1. Docker 常用命令

命令说明
docker pull从镜像仓库拉取镜像
docker push将本地镜像推送到镜像仓库
docker images列出本地所有镜像
docker rmi删除本地镜像
docker run创建并运行一个新容器(不可重复创建同名容器)
docker stop停止运行中的容器
docker start启动已停止的容器
docker restart重启容器
docker rm删除已停止的容器(运行中容器需加 -f 强制删除)
docker ps查看当前运行的容器
docker logs查看容器的日志输出
docker exec在运行中的容器内执行命令(常用于进入容器)
docker save将镜像保存为本地 .tar 文件
docker load从 .tar 文件加载镜像
docker inspect查看容器或镜像的详细信息

1.2 基础操作演示(以 Nginx 为例)

# 1. 拉取 Nginx 镜像
docker pull nginx:1.20.2

# 2. 查看本地镜像
docker images

# 3. 创建并运行容器(后台运行,端口映射 80:80)
docker run -d --name nginx -p 80:80 nginx:1.20.2

# 4. 查看运行中的容器(格式化输出)
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"

# 5. 停止容器
docker stop nginx

# 6. 查看所有容器(包括已停止的)
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"

# 7. 重新启动容器
docker start nginx

# 8. 查看容器详细信息
docker inspect nginx

# 9. 进入容器(交互式 Bash)
docker exec -it nginx bash

# 10. 强制删除运行中的容器
docker rm -f nginx

💡 提示:访问 http://<服务器IP> 即可查看 Nginx 默认页面。


2. 数据卷(Volume)

2.1 什么是数据卷?

数据卷是 Docker 提供的一种持久化存储机制。
它是一个虚拟目录,用于在容器与宿主机之间建立目录映射。
数据卷独立于容器生命周期,即使容器被删除,数据依然保留。
Docker 负责管理数据卷的存储位置,支持多个容器共享同一个数据卷。


2.2 数据卷基本操作演示

# 创建容器并挂载命名数据卷 html 到 Nginx 的网页目录
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx:1.20.2

# 查看所有数据卷
docker volume ls

# 查看数据卷详细信息
docker volume inspect html

# 数据卷实际存储路径(默认)
/var/lib/docker/volumes/html/_data

# 修改宿主机上的 index.html
cd /var/lib/docker/volumes/html/_data
vi index.html

# 进入容器验证内容是否同步
docker exec -it nginx bash
cat /usr/share/nginx/html/index.html

2.3 挂载本地目录(Bind Mount)

Docker 支持直接挂载宿主机的任意目录或文件到容器中:

  • -v mysql:/var/lib/mysql → 创建名为 mysql 的命名数据卷
  • -v ./mysql:/var/lib/mysql → 挂载当前目录下的 mysql 文件夹(Bind Mount)
实际应用:MySQL 容器挂载本地目录
docker run -d \
  --name mysql \
  -p 3307:3306 \
  -e MYSQL_ROOT_PASSWORD=123 \
  -e TZ=Asia/Shanghai \
  -v /root/mysql/data:/var/lib/mysql \
  -v /root/mysql/init:/docker-entrypoint-initdb.d \
  -v /root/mysql/conf:/etc/mysql/conf.d \
  mysql:8

说明:

  • /root/mysql/data:持久化数据库文件
  • /root/mysql/init:存放初始化 SQL 脚本
  • /root/mysql/conf:自定义 MySQL 配置文件

3. 自定义镜像

3.1 镜像组成

Docker 镜像包含:

  • 基础操作系统环境(如 CentOS、Alpine)
  • 运行时依赖(如 JDK、Python)
  • 应用程序(如 JAR 包)
  • 启动脚本与配置

3.2 使用 Dockerfile 构建镜像

Dockerfile 是一个文本文件,用特定语法描述镜像的构建步骤。

常用指令
指令说明
FROM指定基础镜像
ENV设置环境变量
COPY将本地文件复制到镜像中
RUN执行 shell 命令(如安装软件)
EXPOSE声明容器运行时监听的端口(文档用途)
WORKDIR设置工作目录
ENTRYPOINT容器启动时执行的主命令
示例:构建 Java 应用镜像
# 使用 CentOS 7 作为基础镜像
FROM centos:7

# 拷贝并解压 JDK
COPY jdk17.tar.gz /usr/local/
RUN tar -xzf /usr/local/jdk17.tar.gz -C /usr/local/ && \
    rm /usr/local/jdk17.tar.gz

# 配置环境变量
ENV JAVA_HOME=/usr/local/jdk-17.0.10
ENV PATH=$JAVA_HOME/bin:$PATH

# 创建应用目录并设为工作目录
RUN mkdir -p /app
WORKDIR /app

# 拷贝应用 JAR 包
COPY app.jar app.jar

# 声明端口
EXPOSE 8080

# 启动应用
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
构建镜像
# 在 Dockerfile 所在目录执行
docker build -t myapp:1.0 .
  • -t:指定镜像名称和标签(格式:name:tag,默认 tag 为 latest)
  • .:表示使用当前目录下的 Dockerfile

4. Docker 网络

4.1 常用网络命令

命令说明
docker network create创建自定义网络
docker network ls列出所有网络
docker network rm删除网络
docker network prune清理未使用的网络
docker network connect将容器加入指定网络
docker network disconnect将容器从网络中移除
docker network inspect查看网络详情

4.2 网络演示:容器间通信

# 1. 创建自定义网络
docker network create mynet

# 2. 查看网络
docker network ls

# 3. 将 mysql 和 myapp 容器加入 mynet 网络
docker network connect mynet mysql
docker network connect mynet myapp

# 4. 在 myapp 容器中通过容器名访问 mysql
docker exec -it myapp bash
ping mysql  # 成功解析并通信

✅ 在同一自定义网络中,容器可通过容器名直接通信(Docker 内置 DNS)。


5. Docker Compose

5.1 简介

Docker Compose 通过一个 docker-compose.yml 文件,一键管理多个关联容器(如 Web + DB + Nginx),实现快速部署与编排。


5.2 示例配置文件(docker-compose.yml)

services:
  mysql:
    image: mysql:8
    container_name: mysql
    ports:
      - "3307:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "/usr/local/app/mysql/conf:/etc/mysql/conf.d"
      - "/usr/local/app/mysql/data:/var/lib/mysql"
      - "/usr/local/app/mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - test-net

  test:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: test-server
    ports:
      - "8080:8080"
    networks:
      - test-net
    depends_on:
      - mysql

  nginx:
    image: nginx:1.20.2
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - "/usr/local/app/nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
      - "/usr/local/app/nginx/html:/usr/share/nginx/html"
    depends_on:
      - test
    networks:
      - test-net

networks:
  test-net:
    name: mynet
关键字段说明
字段作用
container_name指定容器名称
ports端口映射(宿主机:容器)
environment设置环境变量
volumes挂载数据卷或本地目录
networks指定所属网络
depends_on定义服务启动依赖顺序

5.3 常用 Compose 命令

# 启动所有服务(后台运行)
docker compose up -d

# 停止并删除所有容器、网络
docker compose down

# 查看运行中的容器
docker compose ps

# 查看日志
docker compose logs test

# 重启某个服务
docker compose restart nginx

# 在容器中执行命令
docker compose exec test bash

💡 默认使用当前目录下的 docker-compose.yml 文件。
可通过 -f 指定文件,-p 指定项目名。


 总结

  • 镜像是静态模板,容器是运行实例
  • 数据卷实现数据持久化与共享
  • Dockerfile 用于构建自定义镜像
  • 自定义网络支持容器间通过名称通信
  • Docker Compose 简化多容器应用的部署与管理
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐