Docker命令大全与实战指南
·
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 简化多容器应用的部署与管理
更多推荐



所有评论(0)