Docker 常用命令

Docker 常用命令详细教程

目录


1. Docker 基础命令

1.1 查看 Docker 版本

docker --version
docker version

说明:

  • --version: 显示简短版本信息
  • version: 显示详细的客户端和服务端版本信息

1.2 查看 Docker 系统信息

docker info

说明: 显示 Docker 系统的详细信息,包括容器数量、镜像数量、存储驱动、网络配置等。

1.3 查看帮助信息

docker --help
docker <command> --help

示例:

docker run --help  # 查看 run 命令的帮助

2. 镜像管理命令

2.1 搜索镜像

docker search <镜像名>
docker search --filter stars=100 <镜像名>
docker search --limit 10 <镜像名>

示例:

docker search nginx
docker search --filter stars=500 python

2.2 拉取镜像

docker pull <镜像名>[:标签]

示例:

docker pull nginx
docker pull nginx:1.21.6
docker pull mysql:8.0
docker pull redis:alpine

2.3 查看本地镜像

docker images
docker image ls
docker images -a  # 显示所有镜像(包括中间层)
docker images -q  # 只显示镜像ID
docker images --no-trunc  # 显示完整的镜像ID

示例:

docker images
docker images nginx
docker images --filter "dangling=true"  # 查看悬空镜像

2.4 删除镜像

docker rmi <镜像ID/镜像名>
docker rmi -f <镜像ID>  # 强制删除
docker image prune  # 删除所有悬空镜像
docker image prune -a  # 删除所有未使用的镜像

示例:

docker rmi nginx:latest
docker rmi $(docker images -q)  # 删除所有镜像

2.5 构建镜像

docker build -t <镜像名>[:标签] <Dockerfile路径>
docker build -t <镜像名> .
docker build --no-cache -t <镜像名> .
docker build --build-arg VERSION=1.0 -t <镜像名> .

参数说明:

  • -t, --tag: 指定镜像名称和标签
  • -f, --file: 指定 Dockerfile 文件
  • --no-cache: 不使用缓存
  • --build-arg: 设置构建参数

示例:

docker build -t myapp:1.0 .
docker build -t myapp:latest -f Dockerfile.prod .

2.6 保存和加载镜像

# 导出镜像到文件
docker save -o <文件名.tar> <镜像名>
docker save <镜像名> > <文件名.tar>

# 从文件加载镜像
docker load -i <文件名.tar>
docker load < <文件名.tar>

示例:

docker save -o nginx.tar nginx:latest
docker load -i nginx.tar

2.7 标记镜像

docker tag <源镜像>[:标签] <目标镜像>[:标签]

示例:

docker tag nginx:latest myregistry.com/nginx:v1
docker tag myapp:latest myapp:1.0.0

2.8 查看镜像历史

docker history <镜像名>
docker history --no-trunc <镜像名>

2.9 查看镜像详细信息

docker inspect <镜像名/镜像ID>
docker image inspect <镜像名>

示例:

docker inspect nginx:latest
docker inspect --format='{{.Config.ExposedPorts}}' nginx

3. 容器管理命令

3.1 创建并运行容器

docker run [选项] <镜像名> [命令]

常用参数:

  • -d, --detach: 后台运行
  • -it: 交互式终端
  • --name: 指定容器名称
  • -p: 端口映射(主机端口:容器端口)
  • -P: 随机映射端口
  • -v: 挂载数据卷(主机路径:容器路径)
  • -e: 设置环境变量
  • --rm: 容器停止后自动删除
  • --restart: 重启策略(no/on-failure/always/unless-stopped)
  • --network: 指定网络
  • -m, --memory: 限制内存
  • --cpus: 限制CPU

示例:

# 基本运行
docker run nginx

# 后台运行并命名
docker run -d --name my-nginx nginx

# 端口映射
docker run -d -p 8080:80 --name web nginx

# 多端口映射
docker run -d -p 8080:80 -p 8443:443 nginx

# 挂载数据卷
docker run -d -v /host/path:/container/path nginx
docker run -d -v my-volume:/data nginx

# 设置环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql

# 交互式运行
docker run -it ubuntu /bin/bash

# 容器停止后自动删除
docker run --rm -it ubuntu /bin/bash

# 设置重启策略
docker run -d --restart=always nginx

# 资源限制
docker run -d --memory="512m" --cpus="1.5" nginx

# 综合示例
docker run -d \
  --name my-mysql \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root123 \
  -v mysql-data:/var/lib/mysql \
  --restart=always \
  mysql:8.0

3.2 查看容器

# 查看运行中的容器
docker ps
docker container ls

# 查看所有容器(包括停止的)
docker ps -a
docker container ls -a

# 只显示容器ID
docker ps -q

# 查看最近创建的容器
docker ps -l

# 显示容器大小
docker ps -s

参数说明:

  • -a, --all: 显示所有容器
  • -q, --quiet: 只显示容器ID
  • -l, --latest: 显示最近创建的容器
  • -s, --size: 显示容器大小

示例:

docker ps
docker ps -a
docker ps --filter "status=exited"
docker ps --filter "name=nginx"

3.3 启动和停止容器

# 启动容器
docker start <容器ID/容器名>

# 停止容器
docker stop <容器ID/容器名>

# 重启容器
docker restart <容器ID/容器名>

# 强制停止容器
docker kill <容器ID/容器名>

# 暂停容器
docker pause <容器ID/容器名>

# 恢复容器
docker unpause <容器ID/容器名>

示例:

docker start my-nginx
docker stop my-nginx
docker restart my-nginx

# 批量操作
docker start $(docker ps -a -q)  # 启动所有容器
docker stop $(docker ps -q)  # 停止所有运行中的容器

3.4 删除容器

docker rm <容器ID/容器名>
docker rm -f <容器ID>  # 强制删除运行中的容器
docker rm -v <容器ID>  # 删除容器并删除关联的匿名卷
docker container prune  # 删除所有停止的容器

示例:

docker rm my-nginx
docker rm -f my-nginx
docker rm $(docker ps -a -q)  # 删除所有容器
docker rm $(docker ps -a -q -f status=exited)  # 删除所有已停止的容器

3.5 进入容器

# 执行命令(推荐)
docker exec -it <容器ID/容器名> /bin/bash
docker exec -it <容器ID/容器名> sh

# 附加到容器(不推荐)
docker attach <容器ID/容器名>

区别说明:

  • exec: 在容器中启动新进程,退出不会停止容器
  • attach: 附加到容器主进程,退出会停止容器

示例:

docker exec -it my-nginx /bin/bash
docker exec -it my-mysql mysql -uroot -p
docker exec my-nginx ls /etc/nginx

3.6 查看容器日志

docker logs <容器ID/容器名>
docker logs -f <容器ID>  # 实时查看日志
docker logs --tail 100 <容器ID>  # 查看最后100行
docker logs --since "2024-01-01" <容器ID>  # 查看指定时间后的日志
docker logs -t <容器ID>  # 显示时间戳

参数说明:

  • -f, --follow: 实时跟踪日志
  • --tail: 显示最后N行
  • --since: 显示指定时间后的日志
  • --until: 显示指定时间前的日志
  • -t, --timestamps: 显示时间戳

示例:

docker logs my-nginx
docker logs -f --tail 50 my-nginx
docker logs --since "2024-10-20T00:00:00" my-nginx

3.7 查看容器详细信息

docker inspect <容器ID/容器名>
docker inspect --format='{{.NetworkSettings.IPAddress}}' <容器名>

示例:

docker inspect my-nginx
docker inspect --format='{{.State.Status}}' my-nginx
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-nginx

3.8 查看容器进程

docker top <容器ID/容器名>

3.9 查看容器资源使用

docker stats  # 查看所有容器的资源使用
docker stats <容器ID>  # 查看指定容器
docker stats --no-stream  # 只显示一次

3.10 复制文件

# 从容器复制到主机
docker cp <容器ID>:<容器路径> <主机路径>

# 从主机复制到容器
docker cp <主机路径> <容器ID>:<容器路径>

示例:

docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf
docker cp ./app.conf my-nginx:/etc/nginx/conf.d/

3.11 导出和导入容器

# 导出容器为tar文件
docker export <容器ID> > <文件名.tar>
docker export -o <文件名.tar> <容器ID>

# 导入容器快照为镜像
docker import <文件名.tar> <镜像名>[:标签]

3.12 容器提交为镜像

docker commit [选项] <容器ID> <镜像名>[:标签]

参数说明:

  • -a, --author: 作者信息
  • -m, --message: 提交信息

示例:

docker commit my-nginx my-nginx-custom:v1
docker commit -a "author" -m "add custom config" my-nginx my-nginx:v2

3.13 容器重命名

docker rename <旧容器名> <新容器名>

3.14 更新容器配置

docker update [选项] <容器ID>

示例:

docker update --restart=always my-nginx
docker update --memory="1g" --cpus="2" my-nginx

4. 网络管理命令

4.1 查看网络

docker network ls
docker network ls --filter driver=bridge

4.2 创建网络

docker network create <网络名>
docker network create --driver <驱动类型> <网络名>
docker network create --subnet <子网> <网络名>

驱动类型:

  • bridge: 桥接网络(默认)
  • host: 主机网络
  • overlay: 覆盖网络(Swarm)
  • macvlan: MAC地址网络
  • none: 无网络

示例:

docker network create my-network
docker network create --driver bridge my-bridge
docker network create --subnet=172.18.0.0/16 my-net
docker network create --driver=bridge --subnet=172.20.0.0/16 --gateway=172.20.0.1 custom-net

4.3 查看网络详情

docker network inspect <网络名>

4.4 连接和断开网络

# 连接容器到网络
docker network connect <网络名> <容器名>

# 断开容器网络连接
docker network disconnect <网络名> <容器名>

4.5 删除网络

docker network rm <网络名>
docker network prune  # 删除所有未使用的网络

4.6 创建容器时指定网络

docker run -d --network <网络名> --name <容器名> <镜像名>

示例:

docker run -d --network my-network --name web nginx
docker run -d --network host --name app myapp

5. 数据卷管理命令

5.1 查看数据卷

docker volume ls
docker volume ls -q
docker volume ls --filter dangling=true

5.2 创建数据卷

docker volume create <卷名>
docker volume create --driver <驱动> <卷名>

示例:

docker volume create my-volume
docker volume create --driver local my-data

5.3 查看数据卷详情

docker volume inspect <卷名>

5.4 删除数据卷

docker volume rm <卷名>
docker volume prune  # 删除所有未使用的数据卷

5.5 使用数据卷

# 命名卷
docker run -d -v <卷名>:<容器路径> <镜像名>

# 绑定挂载
docker run -d -v <主机路径>:<容器路径> <镜像名>

# 只读挂载
docker run -d -v <卷名>:<容器路径>:ro <镜像名>

示例:

docker run -d -v mysql-data:/var/lib/mysql mysql
docker run -d -v /host/data:/app/data nginx
docker run -d -v config:/etc/nginx:ro nginx

6. Docker Compose 命令

6.1 启动服务

docker-compose up
docker-compose up -d  # 后台运行
docker-compose up --build  # 构建并启动
docker-compose up --force-recreate  # 强制重新创建容器
docker-compose up --scale <服务名>=<数量>  # 扩展服务

6.2 停止服务

docker-compose down  # 停止并删除容器
docker-compose down -v  # 同时删除数据卷
docker-compose down --rmi all  # 同时删除镜像
docker-compose stop  # 仅停止容器

6.3 查看服务

docker-compose ps
docker-compose ps -a

6.4 查看日志

docker-compose logs
docker-compose logs -f  # 实时查看
docker-compose logs -f <服务名>  # 查看指定服务
docker-compose logs --tail=100

6.5 执行命令

docker-compose exec <服务名> <命令>
docker-compose exec -it <服务名> /bin/bash

6.6 构建服务

docker-compose build
docker-compose build --no-cache
docker-compose build <服务名>

6.7 其他命令

docker-compose restart  # 重启服务
docker-compose pause  # 暂停服务
docker-compose unpause  # 恢复服务
docker-compose top  # 查看进程
docker-compose config  # 验证配置文件
docker-compose pull  # 拉取镜像
docker-compose push  # 推送镜像

7. 系统管理命令

7.1 清理系统

# 清理未使用的数据
docker system prune

# 清理所有未使用的数据(包括未使用的镜像)
docker system prune -a

# 清理所有数据(包括数据卷)
docker system prune -a --volumes

# 强制清理(不提示确认)
docker system prune -f

7.2 查看磁盘使用

docker system df
docker system df -v  # 详细信息

7.3 查看系统事件

docker events
docker events --since '2024-10-20'
docker events --filter 'type=container'

7.4 登录和登出镜像仓库

# 登录 Docker Hub
docker login

# 登录私有仓库
docker login <仓库地址>

# 登出
docker logout

7.5 推送和拉取镜像

# 推送镜像
docker push <镜像名>[:标签]

# 拉取镜像
docker pull <镜像名>[:标签]

8. 实用技巧与最佳实践

8.1 批量操作

停止所有容器

docker stop $(docker ps -q)

删除所有容器

docker rm $(docker ps -a -q)

删除所有镜像

docker rmi $(docker images -q)

删除所有未使用的资源

docker system prune -a --volumes

删除悬空镜像

docker rmi $(docker images -f "dangling=true" -q)

删除已停止的容器

docker rm $(docker ps -a -q -f status=exited)

8.2 常用组合命令

构建并运行

docker build -t myapp . && docker run -d -p 8080:80 myapp

停止并删除容器

docker stop my-nginx && docker rm my-nginx

查看容器IP地址

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <容器名>

查看容器环境变量

docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' <容器名>

8.3 常用 Dockerfile 指令

# 基础镜像
FROM nginx:alpine

# 维护者信息
LABEL maintainer="your@email.com"

# 设置工作目录
WORKDIR /app

# 复制文件
COPY . /app
ADD archive.tar.gz /app

# 运行命令
RUN apk add --no-cache python3

# 设置环境变量
ENV NODE_ENV=production

# 暴露端口
EXPOSE 80 443

# 挂载点
VOLUME ["/data"]

# 设置用户
USER nginx

# 容器启动命令
CMD ["nginx", "-g", "daemon off;"]
ENTRYPOINT ["nginx"]

8.4 常用 docker-compose.yml 模板

version: '3.8'

services:
  web:
    image: nginx:alpine
    container_name: web
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./html:/usr/share/nginx/html
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    networks:
      - app-network
    restart: always
    environment:
      - TZ=Asia/Shanghai
    depends_on:
      - db

  db:
    image: mysql:8.0
    container_name: mysql
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: myapp
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    networks:
      - app-network
    restart: always

  redis:
    image: redis:alpine
    container_name: redis
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    networks:
      - app-network
    restart: always

networks:
  app-network:
    driver: bridge

volumes:
  mysql-data:
  redis-data:

8.5 性能优化技巧

1. 减小镜像体积 - 使用多阶段构建

FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html

2. 使用 .dockerignore

node_modules
npm-debug.log
.git
.gitignore
README.md
.env
*.md

3. 合并 RUN 命令

# 推荐
RUN apt-get update && \
    apt-get install -y nginx && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

8.6 安全最佳实践

1. 使用非 root 用户

RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser

2. 限制容器资源

docker run -d \
  --memory="512m" \
  --memory-swap="1g" \
  --cpus="1.0" \
  --pids-limit=100 \
  nginx

3. 只读文件系统

docker run -d --read-only --tmpfs /tmp nginx

8.7 常用调试命令

# 查看容器详细信息
docker inspect <容器名>

# 查看容器日志
docker logs -f --tail 100 <容器名>

# 进入容器调试
docker exec -it <容器名> /bin/sh

# 查看容器进程
docker top <容器名>

# 查看资源使用
docker stats <容器名>

# 查看端口映射
docker port <容器名>

# 查看容器文件系统变化
docker diff <容器名>

8.8 数据备份与恢复

备份容器数据

# 备份数据卷
docker run --rm -v <卷名>:/data -v $(pwd):/backup ubuntu tar czf /backup/backup.tar.gz /data

# 备份容器
docker export <容器名> > container-backup.tar

恢复数据

# 恢复数据卷
docker run --rm -v <卷名>:/data -v $(pwd):/backup ubuntu tar xzf /backup/backup.tar.gz -C /

# 恢复容器
docker import container-backup.tar <镜像名>

附录:快速参考

镜像命令快查

命令 说明
docker pull 拉取镜像
docker build 构建镜像
docker images 查看镜像
docker rmi 删除镜像
docker tag 标记镜像
docker save 保存镜像
docker load 加载镜像

容器命令快查

命令 说明
docker run 创建并运行容器
docker ps 查看容器
docker start 启动容器
docker stop 停止容器
docker restart 重启容器
docker rm 删除容器
docker exec 进入容器
docker logs 查看日志

常用参数快查

参数 说明
-d 后台运行
-it 交互式终端
-p 端口映射
-v 数据卷挂载
-e 环境变量
--name 容器名称
--restart 重启策略
--network 网络设置

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容