Docker 常用命令

发布于:2025-08-30 ⋅ 阅读:(11) ⋅ 点赞:(0)

一、概述

Docker 是一种轻量级的容器化技术,通过容器打包应用及其依赖环境,实现“一次构建,到处运行”。核心概念包括:

  • ​镜像(Image)​​:应用的静态模板(类似“快照”),包含运行所需的所有依赖。
  • ​容器(Container)​​:镜像的运行实例(类似“进程”),可启动、停止、删除。
  • ​数据卷(Volume)​​:容器与宿主机间共享的持久化存储目录。
  • ​Dockerfile​​:用于构建自定义镜像的脚本文件。
  • ​Docker Compose​​:管理多容器应用的编排工具(通过 docker-compose.yml 配置)。

二、Docker 服务管理

1. 服务操作

操作 命令 说明
启动 Docker systemctl start docker 启动 Docker 服务
停止 Docker systemctl stop docker 停止 Docker 服务
重启 Docker systemctl restart docker 重启 Docker 服务
设置自启动 systemctl enable docker 开机自动启动 Docker
查看运行状态 systemctl status docker 检查 Docker 服务是否运行正常
查看版本信息 docker versiondocker info 显示 Docker 版本及系统信息

三、镜像操作

1. 镜像基础

镜像可从 Docker Hub(官方仓库)或其他私有仓库拉取,格式为 [仓库地址/][命名空间/]镜像名:标签(标签默认 latest)。

2. 常用命令

操作 命令 示例/说明
拉取镜像 docker pull 镜像名[:标签] docker pull nginx(拉取最新版 Nginx)
查看本地镜像 docker imagesdocker image ls 显示所有本地镜像(含仓库、标签、大小等)
搜索镜像 docker search 镜像名 搜索 Docker Hub 中的镜像(如 docker search mysql
删除单个镜像 docker rmi -f 镜像名[:标签]docker rmi -f 镜像ID -f 强制删除(即使镜像被容器使用)
删除多个镜像 docker rmi -f 镜像1 镜像2 ... 空格分隔多个镜像
删除所有未使用镜像 docker rmi -f $(docker images -aq) 清理无容器引用的镜像
打标签(Tag) docker tag 原镜像名:原标签 新镜像名:新标签 docker tag nginx:latest my-nginx:v1
保存镜像到本地 docker save -o 保存路径 镜像名[:标签] docker save -o /tmp/nginx.tar nginx:latest
加载本地镜像 docker load -i 本地文件路径 docker load -i /tmp/nginx.tar

四、容器操作

1. 容器生命周期

操作 命令 示例/说明
运行容器 docker run [参数] 镜像名[:标签] 常用参数:
- -d:后台运行
- -p 宿主机端口:容器端口:端口映射
- --name 容器名:指定容器名
- -v 宿主机路径:容器路径:挂载数据卷
- -e 环境变量=值:设置环境变量
示例:docker run -d --name my-nginx -p 80:80 nginx
停止容器 docker stop 容器名/容器ID 优雅停止容器(发送 SIGTERM 信号)
启动容器 docker start 容器名/容器ID 启动已停止的容器
重启容器 docker restart 容器名/容器ID 重启容器
强制删除容器 docker rm -f 容器名/容器ID -f 强制删除(即使容器运行中)
查看所有容器 docker ps -adocker container ps -a -a 显示所有容器(含已停止的)
查看运行中容器 docker psdocker container ps 仅显示运行中的容器

2. 容器日志与交互

操作 命令 示例/说明
查看实时日志 docker logs -f 容器名/容器ID -f 跟踪日志更新(类似 tail -f
查看末尾 N 行日志 docker logs --tail=N 容器名/容器ID 示例:docker logs --tail=100 my-nginx
进入容器终端 docker exec -it 容器名/容器ID /bin/bash -it 交互式终端(退出用 exitCtrl+P+Q
从容器拷贝文件到宿主机 docker cp 容器名/容器ID:容器内路径 宿主机路径 示例:docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf
从宿主机拷贝文件到容器 docker cp 宿主机路径 容器名/容器ID:容器内路径 示例:docker cp ./app.jar my-container:/app/

3. 数据卷管理

操作 命令 示例/说明
查看所有数据卷 docker volume ls 显示所有数据卷名称及驱动信息
创建数据卷 docker volume create 卷名 示例:docker volume create mysql-data
查看数据卷详情 docker volume inspect 卷名 显示卷的挂载路径等详细信息
删除数据卷 docker volume rm 卷名 删除未被容器使用的数据卷
清理未使用数据卷 docker volume prune 删除所有未被容器引用的数据卷

五、Dockerfile 构建镜像

1. Dockerfile 指令

Dockerfile 是构建镜像的脚本,包含一系列指令。以下是核心指令说明:

指令 说明 示例
FROM 指定基础镜像(必须为第一条指令) FROM openjdk:8
MAINTAINER 镜像维护者信息(已弃用,推荐用 LABEL LABEL maintainer="user@example.com"
RUN 构建时执行的命令(支持 shellexec 格式) RUN apt-get update && apt-get install -y vim
COPY 拷贝宿主机文件/目录到镜像(不自动解压) COPY ./app.jar /app/
ADD 类似 COPY,但支持 URL 和自动解压 tar 包 ADD http://example.com/file.tar.gz /tmp/
WORKDIR 设置容器的工作目录(后续指令在此目录执行) WORKDIR /app
ENV 设置环境变量(可在后续指令中引用) ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk
EXPOSE 声明容器暴露的端口(仅声明,需配合 -p 映射) EXPOSE 8080
VOLUME 创建数据卷(挂载到宿主机或匿名卷) VOLUME ["/data"]
CMD 容器启动时执行的默认命令(仅最后一个生效,可被 docker run 参数覆盖) CMD ["java", "-jar", "app.jar"]
ENTRYPOINT 容器启动时的入口命令(不会被 docker run 参数覆盖,常与 CMD 配合) ENTRYPOINT ["java", "-jar"]
CMD ["app.jar"]

2. 构建步骤

  1. ​编写 Dockerfile​​:在项目根目录创建 Dockerfile(无扩展名)。
  2. ​构建镜像​​:执行 docker build -t 镜像名:标签 .. 表示 Dockerfile 所在目录)。
    • 示例:docker build -t my-spring-boot:1.0 .
  3. ​运行容器​​:基于新镜像启动容器(参考第四章容器运行命令)。

六、Docker Compose 编排

Docker Compose 用于管理多容器应用,通过 docker-compose.yml 配置文件定义服务、网络、数据卷等。

1. 常用命令

操作 命令 说明
启动所有服务(前台) docker compose up 实时显示日志,按 Ctrl+C 停止
启动所有服务(后台) docker compose up -d 后台运行,不显示日志
停止并删除所有资源 docker compose down 停止容器、删除网络/卷/镜像(可选 -v
查看服务日志 docker compose logs [服务名] 示例:docker compose logs web
重启服务 docker compose restart [服务名] 示例:docker compose restart db
检查配置文件语法 docker compose config 验证 docker-compose.yml 格式是否正确

2. 示例 docker-compose.yml

version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    volumes:
      - mysql-data:/var/lib/mysql
volumes:
  mysql-data:
  • ​说明​​:定义两个服务(webdb),web 服务挂载本地 ./html 目录到容器,依赖 db 服务;db 服务使用 MySQL 镜像,设置 root 密码并持久化数据到 mysql-data 卷。

七、高级配置

1. 远程访问 Docker(仅开发环境)

默认 Docker 仅监听本地 Unix Socket(fd://),如需远程访问(如通过 TCP 端口),需修改配置:

  1. ​编辑 Docker 服务配置文件​​:
    sudo vim /lib/systemd/system/docker.service
  2. ​修改 ExecStart 行​​,添加 -H tcp://0.0.0.0:2375(监听所有 IP 的 2375 端口):
    ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
  3. ​重新加载配置并重启 Docker​​:
    sudo systemctl daemon-reload
    sudo systemctl restart docker
  4. ​开放防火墙端口​​(如使用 firewalld):
    sudo firewall-cmd --zone=public --add-port=2375/tcp --permanent
    sudo firewall-cmd --reload

2. 查看容器 IP 地址

docker inspect 容器名/容器ID | grep -i ipaddress | head -n 1 | awk '{print $2}' | tr -d '",'

3. 清理无用资源

  • ​清理停止的容器​​:
    docker rm $(docker ps -aq)
  • ​清理名称/标签为 <none> 的镜像​​:
    docker rmi -f $(docker images | grep '<none>' | awk '{print $3}')
  • ​清理所有未使用资源(容器、镜像、卷、网络)​​:
    docker system prune -a --volumes

八、附录:常用命令速查表

分类 命令 说明
服务管理 systemctl start/stop/restart docker 启动/停止/重启 Docker 服务
镜像操作 docker pull nginx 拉取 Nginx 镜像
docker images 查看本地镜像
容器操作 docker run -d -p 80:80 --name web nginx 运行后台 Nginx 容器并映射端口
docker logs -f web 实时查看 web 容器日志
数据卷 docker volume create my-vol 创建数据卷 my-vol
docker volume ls 查看所有数据卷
Dockerfile 构建 docker build -t my-img:1.0 . 构建名为 my-img:1.0 的镜像
Docker Compose docker compose up -d 后台启动 Compose 服务

​注意​​:以上操作需根据实际环境调整路径、端口等参数,生产环境需加强安全配置(如限制远程访问、启用 TLS 加密等)。

补充