Bootstrap

Docker常用命令

以下是常用的 Docker 命令及示例解释,按功能分类整理:


1. 镜像管理

1.1 拉取镜像
docker pull nginx:latest
  • nginx:latest: 从 Docker Hub 拉取最新版本的 Nginx 镜像。
1.2 查看本地镜像
docker images
  • 列出本地所有镜像,显示名称、标签、大小等信息。
1.3 删除镜像
docker rmi nginx:latest
  • 删除指定的本地镜像(需确保没有容器依赖)。

2. 容器生命周期

2.1 运行容器
docker run -d -p 80:80 --name my-nginx nginx:latest
  • -d: 后台运行容器(detached 模式)。
  • -p 80:80: 将宿主机的 80 端口映射到容器的 80 端口。
  • --name my-nginx: 指定容器名称(避免随机生成)。
2.2 查看运行中的容器
docker ps
  • 仅显示正在运行的容器。
2.3 查看所有容器(包括已停止的)
docker ps -a
2.4 停止容器
docker stop my-nginx
  • 优雅停止容器(发送 SIGTERM 信号)。
2.5 启动已停止的容器
docker start my-nginx
2.6 重启容器
docker restart my-nginx
2.7 强制删除容器
docker rm -f my-nginx
  • -f: 强制删除运行中的容器(慎用)。

查看容器IP
从容器外面看:

docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1

或者

docker inspect -f "{{.NetworkSettings.IPAddress}}" <containerNameOrId>

从容器里面看:
dock儿 exec / attach 进入容器,通过ip 或 ifconfig查看

docker inspectdocker exec/docker attach 是 Docker 中用于查看和操作容器的两个不同命令。

  1. docker inspect:该命令用于查看容器的详细信息,例如容器的 ID、名称、状态、端口映射等。要使用 docker inspect,请运行以下命令:
docker inspect [container_id_or_name]    

其中,[container_id_or_name] 是您要查看的容器的 ID 或名称。例如,要查看名为 my_container 的容器的详细信息,请运行:

docker inspect my_container    
  1. docker execdocker attach:这两个命令用于在容器中执行命令或附加到容器。docker exec 用于在容器中执行命令,而 docker attach 用于附加到容器并查看其输出。要使用 docker exec,请运行以下命令:
docker exec [container_id_or_name] [command]    

其中,[container_id_or_name] 是您要执行命令的容器的 ID 或名称,[command] 是您要在容器中执行的命令。例如,要在名为 my_container 的容器中执行 ls 命令,请运行:

docker exec my_container ls    

要使用 docker attach,请运行以下命令:

docker attach [container_id_or_name]    

其中,[container_id_or_name] 是您要附加的容器的 ID 或名称。例如,要附加到名为 my_container 的容器,请运行:

docker attach my_container    

总之,docker inspect 用于查看容器的详细信息,而 docker execdocker attach 用于在容器中执行命令或附加到容器。

docker attach 命令用于附加到正在运行的 Docker 容器。一旦附加到容器,您将能够查看容器的输出、与容器进行交互,并在容器中执行命令。

要使用 docker attach,请运行以下命令:

docker attach [container_id_or_name]    

其中,[container_id_or_name] 是您要附加的容器的 ID 或名称。例如,要附加到名为 my_container 的容器,请运行:

docker attach my_container    

一旦附加到容器,您将看到容器的输出,并能够在容器中执行命令。例如,您可以在容器中运行 shell 命令、查看日志等。

需要注意的是,docker attach 命令会将您的终端附加到容器,这意味着您将无法在终端中执行其他命令,直到您从容器中分离。要从容器中分离,请按 Ctrl+P,然后按 Ctrl+Q

总之,docker attach 命令用于附加到正在运行的 Docker 容器,以便查看容器的输出、与容器进行交互,并在容器中执行命令。


3. 容器交互与调试

3.1 进入容器终端
docker exec -it my-nginx /bin/bash
  • -it: 以交互模式进入容器(需容器内包含 /bin/bash)。
3.2 查看容器日志
docker logs -f my-nginx
  • -f: 实时跟踪日志输出(类似 tail -f)。
3.3 查看容器资源使用
docker stats my-nginx
  • 实时监控 CPU、内存、网络等资源。

4. 构建镜像

4.1 通过 Dockerfile 构建镜像
docker build -t my-app:1.0 .
  • -t my-app:1.0: 指定镜像名称和标签。
  • .: 使用当前目录下的 Dockerfile

5. 数据管理

5.1 挂载数据卷
docker run -v /host/path:/container/path nginx
  • 将宿主机的 /host/path 目录挂载到容器的 /container/path
5.2 创建命名卷
docker volume create my-volume
docker run -v my-volume:/container/path nginx

6. 网络管理

6.1 查看网络列表
docker network ls
6.2 创建自定义网络
docker network create my-network
docker run --network=my-network nginx

7. 清理与维护

7.1 删除所有已停止的容器
docker container prune
7.2 清理未使用的镜像、卷、网络
docker system prune -a
  • -a: 删除所有未使用的镜像(不仅仅是临时镜像)。

8. Docker Compose 常用命令

8.1 启动服务
docker-compose up -d
  • -d: 后台运行。
8.2 停止并删除服务
docker-compose down
8.3 查看服务状态
docker-compose ps

典型使用场景示例

运行一个 MySQL 容器
docker run -d \
  --name mysql-db \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -v mysql_data:/var/lib/mysql \
  -p 3306:3306 \
  mysql:8.0
  • -e: 设置环境变量(此处为 MySQL root 密码)。
  • -v mysql_data:/var/lib/mysql: 持久化 MySQL 数据。

掌握这些命令后,可覆盖日常开发、测试和运维中的大部分需求。根据实际场景组合使用参数(如 -p, -v, --network)能灵活控制容器行为。

Docker 和 Docker Compose 是互补工具,但解决的问题不同。以下是它们的核心区别和关系:


1. 定位与作用

Docker
  • 定位:容器运行时和管理工具。
  • 作用:用于创建、运行和管理单个容器
  • 操作对象:直接操作镜像、容器、网络、卷等资源。
  • 典型场景
    • 快速启动一个独立容器(如 Nginx、MySQL)。
    • 调试或测试单个服务。
Docker Compose
  • 定位:多容器应用的编排工具(基于 Docker)。
  • 作用:通过 YAML 文件定义和运行多容器应用,简化复杂应用的部署流程。
  • 操作对象:管理一组关联的容器(服务)及其依赖(网络、卷等)。
  • 典型场景
    • 同时启动 Web 服务 + 数据库 + 缓存(如 Django + PostgreSQL + Redis)。
    • 开发环境中快速重建完整的多服务应用环境。

2. 核心区别

维度DockerDocker Compose
管理目标单容器多容器组成的应用
配置方式命令行参数(docker run -p -vYAML 文件(docker-compose.yml
网络管理需手动创建网络并连接容器自动创建共享网络,服务间通过服务名通信
依赖关系需手动控制启动顺序通过 depends_on 定义启动顺序
适用场景简单容器操作复杂多服务应用(开发、测试环境)

3. 操作对比示例

场景:部署一个 Web 应用(Python Flask) + 数据库(PostgreSQL)

使用纯 Docker 命令

需手动执行多个步骤:

# 1. 创建共享网络
docker network create my-app-network

# 2. 启动数据库容器
docker run -d \
  --name postgres-db \
  --network my-app-network \
  -e POSTGRES_PASSWORD=secret \
  -v pgdata:/var/lib/postgresql/data \
  postgres:13

# 3. 启动 Web 应用容器(依赖数据库)
docker run -d \
  --name flask-app \
  --network my-app-network \
  -e DB_HOST=postgres-db \
  -p 5000:5000 \
  my-flask-app:latest

痛点

  • 手动管理网络和卷。
  • 需记住容器间的依赖关系和启动顺序。
  • 命令冗长,难以复用。

使用 Docker Compose

通过 docker-compose.yml 一键启动:

version: '3.8'

services:
  web:
    image: my-flask-app:latest
    ports:
      - "5000:5000"
    environment:
      DB_HOST: postgres-db
    depends_on:
      - db
    networks:
      - my-network

  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: secret
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
      - my-network

volumes:
  pgdata:

networks:
  my-network:

执行命令:

docker-compose up -d

优势

  • 依赖关系和配置集中管理。
  • 自动创建网络、卷,并连接服务。
  • 支持一键启动/停止整个应用栈。

4. 关键特性对比

功能DockerDocker Compose
服务编排❌ 不支持✅ 定义多服务及其关系
环境变量管理命令行传递(-eYAML 文件集中定义
配置文件复用❌ 需重复输入命令✅ 通过 YAML 文件复用配置
跨主机部署❌ 不支持❌ 仅限单机(生产环境需 Swarm/K8s)

5. 总结

  • Docker:基础工具,适合管理单个容器
  • Docker Compose:上层工具,适合在单机环境中编排多容器应用,尤其适合开发和测试。
  • 关系:Compose 依赖 Docker,通过抽象简化复杂应用的部署,但不适用于生产集群(生产环境需 Kubernetes 或 Docker Swarm)。
;