docker基本知识及常用命令汇总

docker简介

Docker是一种开源的容器化平台,用于开发、部署和运行应用程序。它通过容器技术将应用程序及其依赖项打包在一起,确保在不同环境中运行的一致性。

核心概念

容器(Container)

轻量级、可执行的软件包,包含运行应用程序所需的代码、运行时、库和配置。容器共享主机操作系统内核,但彼此隔离。

镜像(Image)

容器的静态模板,包含创建容器所需的文件系统和配置。镜像通过分层存储实现高效复用。

仓库(Registry)

存储和分发镜像的服务,如Docker Hub。用户可以从仓库拉取公共镜像或推送私有镜像。

主要优势

环境一致性

消除"在我机器上能运行"的问题,确保开发、测试和生产环境一致。

资源高效

容器共享主机OS内核,启动快且占用资源少,比虚拟机更轻量。

快速部署与扩展

支持秒级启动和停止,适合微服务架构和动态扩缩容场景。

docker desktop

Docker 最初是为 Linux 设计的,因为其核心依赖于 Linux 内核的容器化技术(如命名空间和控制组)。Windows 原生不支持这些技术,因此需要 Docker Desktop 来提供兼容性。

Docker Desktop 概述

Docker Desktop 是一款适用于开发者的桌面应用程序,支持在 Windows 和 macOS 系统上快速构建、测试和部署容器化应用。它集成了 Docker Engine、Kubernetes 和开发者工具链,提供图形化界面(GUI)与命令行(CLI)的双重操作方式。

核心功能

  • 本地容器环境:内置 Docker Engine,支持创建和管理容器,无需额外配置。
  • Kubernetes 集成:一键启用单机版 Kubernetes 集群,便于本地开发与测试。
  • 跨平台兼容:通过 WSL 2(Windows)或 HyperKit(macOS)实现高效虚拟化。
  • 镜像管理:可视化操作镜像的拉取、构建和推送至 Docker Hub 或其他仓库。
  • 开发工具集成:支持与 VS Code、IntelliJ 等 IDE 深度协作。

Docker Desktop 在 Windows 上的作用包括:

  • 提供 Linux 内核模拟:通过内置的轻量级虚拟机(如 WSL2 或 Hyper-V)运行 Linux 环境,使容器能够正常工作。
  • 简化管理工具:集成图形界面和命令行工具,降低用户操作复杂度。
  • 文件系统与网络适配:解决 Windows 和 Linux 文件系统差异,优化网络桥接和端口映射。

docker常用命令

容器管理

启动容器

复制代码
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用选项:

  • -d:后台运行(守护进程模式)
  • -p:端口映射(格式:主机端口:容器端口
  • -v:卷挂载(格式:主机目录:容器目录
  • --name:指定容器名称
  • -e:设置环境变量

查看容器

复制代码
docker ps [OPTIONS]

常用选项:

  • -a:显示所有容器(包括已停止的)
  • -q:仅显示容器ID
  • --filter:按条件过滤(如status=exited

停止/启动容器

复制代码
docker stop CONTAINER
docker start CONTAINER
docker restart CONTAINER

删除容器

复制代码
docker rm [OPTIONS] CONTAINER

常用选项:

  • -f:强制删除运行中的容器
  • -v:同时删除关联的卷

镜像管理

拉取镜像

复制代码
docker pull [OPTIONS] NAME[:TAG]

列出镜像

复制代码
docker images [OPTIONS]

常用选项:

  • -a:显示所有镜像(包括中间层)
  • --digests:显示摘要信息
  • --filter:按条件过滤

删除镜像

复制代码
docker rmi [OPTIONS] IMAGE

常用选项:

  • -f:强制删除

构建镜像

复制代码
docker build [OPTIONS] PATH

常用选项:

  • -t:指定镜像名称和标签
  • --no-cache:禁用缓存构建

日志与监控

查看日志

复制代码
docker logs [OPTIONS] CONTAINER

常用选项:

  • -f:实时跟踪日志
  • --tail:显示最后N行
  • -t:显示时间戳

资源监控

复制代码
docker stats [OPTIONS] [CONTAINER...]

显示实时资源使用统计(CPU、内存等)

网络管理

列出网络

复制代码
docker network ls

创建网络

复制代码
docker network create [OPTIONS] NETWORK

连接容器到网络

复制代码
docker network connect [OPTIONS] NETWORK CONTAINER

数据管理

创建卷

复制代码
docker volume create [OPTIONS] VOLUME

列出卷

复制代码
docker volume ls

删除卷

复制代码
docker volume rm VOLUME

其他实用命令

执行命令

复制代码
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

常用选项:

  • -it:交互式终端(通常与/bin/bash配合使用)

复制文件

复制代码
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH

查看信息

复制代码
docker info

显示Docker系统信息

查看版本

复制代码
docker version

Docker run 与 Docker start 的区别

docker run 用于从镜像创建并启动一个新容器。

该命令会执行以下操作:检查本地是否存在指定镜像,若不存在则从远程仓库拉取;基于镜像创建新的容器文件系统层;分配网络和存储资源;执行启动命令(如 CMD 或 ENTRYPOINT)。每次运行都会生成一个全新的容器实例。

示例命令:

bash 复制代码
docker run -d --name my_container nginx

docker start 用于重新启动已存在的停止状态容器。该命令不会创建新容器,而是复用现有容器的文件系统层和配置,仅触发容器内进程的重新启动。适用于暂停或退出的容器恢复运行。

示例命令:

bash 复制代码
docker start my_container

核心差异总结

创建行为
docker run 每次调用均生成新容器(即使同名也会因冲突失败需先删除旧容器)。docker start 仅操作已创建的容器,无法修改原始配置(如端口映射或环境变量)。

资源分配
docker run 涉及完整的资源分配流程(IP、存储卷等)。docker start 复用现有资源,启动速度更快。

日志与状态
docker run 产生新的独立日志流。docker start 延续原有容器的日志文件,状态信息(如容器ID)保持不变。

典型使用场景

  • 初始化部署 :需使用 docker run 创建容器并设置参数(如 -p 8080:80)。
  • 故障恢复 :容器意外停止后,用 docker start 快速重启服务。
  • 调试测试docker run 适合隔离测试环境;docker start 适合延续之前的工作状态。

Docker 与 Docker-Compose 的核心区别

Docker 是一个容器化平台,用于构建、运行和管理单个容器。它通过 Dockerfile 定义容器镜像的构建步骤,并通过 docker run 命令启动容器。适用于单容器应用的开发和部署。

Docker-Compose 是一个工具,用于定义和运行多容器应用。通过 docker-compose.yml 文件配置多个服务(容器)、网络和卷,实现一键启动复杂应用栈。适用于微服务或多组件应用的编排。


功能对比

Docker

  • 操作对象:单容器
  • 配置文件:Dockerfile
  • 典型命令:docker build, docker run
  • 适用场景:构建镜像或运行独立容器

Docker-Compose

  • 操作对象:多容器组成的服务
  • 配置文件:docker-compose.yml
  • 典型命令:docker-compose up, docker-compose down
  • 适用场景:定义前后端、数据库等关联容器的协同部署

配置示例对比

Docker 单容器启动

通过命令行参数配置:

bash 复制代码
docker run -d --name nginx -p 80:80 -v /data:/usr/share/nginx/html nginx

Docker-Compose 多服务编排

通过 YAML 文件配置:

yaml 复制代码
version: '3'
services:
  web:
    image: nginx
    ports: ["80:80"]
    volumes: ["./data:/usr/share/nginx/html"]
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

网络与依赖管理差异

Docker

需手动创建网络并连接容器:

bash 复制代码
docker network create app_net
docker run -d --net=app_net --name mysql mysql
docker run -d --net=app_net --link mysql -p 8080:8080 my_app

Docker-Compose

自动处理容器间网络和依赖:

yaml 复制代码
services:
  app:
    depends_on: [db]
  db:
    image: mysql

适用场景建议

  • 开发测试环境:优先使用 Docker-Compose 快速搭建完整服务栈
  • 生产环境:结合 Docker Swarm/Kubernetes 进行集群编排
  • 简单工具容器:直接使用 Docker 命令更高效

docker-compose常用命令

启动服务

docker-compose up 启动所有服务,默认在前台运行。添加 -d 参数可后台运行:

bash 复制代码
docker-compose up -d
停止服务

docker-compose down 停止并移除所有容器、网络、镜像(默认保留数据卷)。添加 -v 参数可同时删除数据卷:

bash 复制代码
docker-compose down -v
查看服务状态

docker-compose ps 列出所有容器的运行状态,包括端口映射:

bash 复制代码
docker-compose ps
查看日志

docker-compose logs 查看服务的日志输出。添加 -f 参数可实时跟踪日志:

bash 复制代码
docker-compose logs -f [服务名]
构建或重新构建服务

docker-compose build 重新构建服务的镜像,适用于Dockerfile有变更时:

bash 复制代码
docker-compose build
启动/停止/重启服务
  • 启动已存在的服务容器:

    bash 复制代码
    docker-compose start
  • 停止运行中的服务容器:

    bash 复制代码
    docker-compose stop
  • 重启服务容器:

    bash 复制代码
    docker-compose restart
进入容器

docker-compose exec 在运行中的容器内执行命令,常用于调试:

bash 复制代码
docker-compose exec [服务名] /bin/bash
查看服务依赖

docker-compose config 验证并查看最终的compose文件配置:

bash 复制代码
docker-compose config
扩展服务实例

docker-compose scale 扩展指定服务的容器数量(需结合up使用):

bash 复制代码
docker-compose up -d --scale [服务名]=3
环境变量管理
  • 通过.env文件定义环境变量,或在命令中直接指定:

    bash 复制代码
    docker-compose --env-file .env up
清理资源
  • 删除未使用的资源(镜像、网络等):

    bash 复制代码
    docker-compose down --rmi all
命令组合示例
  • 重新构建并启动服务:

    bash 复制代码
    docker-compose up -d --build
  • 强制重新创建容器(忽略缓存):

    bash 复制代码
    docker-compose up -d --force-recreate

注意:以上命令需在包含docker-compose.yml文件的目录中执行。部分命令可能需要Docker Compose V2以上版本支持。

相关推荐
学烹饪的小胡桃2 小时前
【运维学习】实时性能监控工具 WGCLOUD v3.6.2 更新介绍
linux·运维·服务器·学习·工单系统
叫致寒吧2 小时前
Docker
运维·docker·容器
杨浦老苏3 小时前
现代流媒体聚合播放器冬瓜TV MAX
docker·群晖·多媒体
白露与泡影3 小时前
使用systemd,把服务装进 Linux 心脏里~
linux·运维·python
l1t4 小时前
用docker安装oracle 19c
运维·数据库·docker·oracle·容器
k***92165 小时前
【Linux】进程概念(五):详解环境变量的本质
linux·运维·服务器
专业开发者5 小时前
艾通科技(ITON Technology)借助蓝牙 ® 网状网络,构建适用于自动化控制应用的大规模设备网络
运维·物联网·自动化
KakiNakajima5 小时前
CentOS 7 x86系统安装EMQX 【kaki备忘录】
linux·运维·centos
weixin_462446235 小时前
【原创实践】Docker 镜像批量导出镜像与导入镜像
运维·docker·容器