大家好,Docker 是目前最流行的容器化技术,它让应用的构建、交付和运行变得更加标准化和高效。通过 Docker,我们可以将应用及其依赖环境打包成一个轻量级的容器,在任何支持 Docker 的系统中一致运行。本文将按照知识点分类,系统性地讲解 Docker 的核心概念和常用命令,帮助你快速上手。
一、Docker 基础概念
1.1 Docker 的三个核心概念
| 概念 | 说明 |
|---|---|
| 镜像(Image) | 容器的只读模板,包含应用及其运行环境 |
| 容器(Container) | 镜像的运行实例,可创建、启动、停止和删除 |
| 仓库(Repository) | 存储和分发镜像的地方(如 Docker Hub) |
1.2 版本查看
# 查看 Docker 版本信息
docker version

二、镜像管理
2.1 查看镜像
# 查看本地所有镜像
docker images

2.2 拉取镜像
# 从 Docker Hub 拉取镜像
docker pull nginx:alpine
docker pull python:3.10-slim

2.3 搜索镜像
# 搜索 Docker Hub 上的镜像
docker search nginx
# 搜索结果说明:
# OFFICIAL 表示官方镜像
# STARS 表示该镜像获得的星数

2.4 删除镜像
# 删除镜像
docker rmi 镜像名:标签
docker rmi nginx:alpine
# 强制删除
docker rmi -f 镜像名
2.5 构建镜像
# 使用 Dockerfile 构建镜像(-t 指定镜像名和标签,. 表示当前目录)
docker build -t myapp:1.0 .
三、容器管理
3.1 查看容器
# 查看正在运行的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a

3.2 创建并运行容器
# 基本语法
docker run -d --name 容器名 -p 宿主机端口:容器端口 镜像名:标签
# 示例:运行 Nginx 容器
docker run -d --name my-first-nginx -p 8080:80 nginx:alpine
# 示例:运行 MySQL 容器(设置环境变量)
docker run -d --name mysql-container -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
# 示例:挂载数据卷(将本地目录映射到容器内)
docker run -d --name nginx-volume -p 8080:80 -v $(pwd)/html:/usr/share/nginx/html nginx:alpine
参数说明:
| 参数 | 说明 |
|---|---|
-d |
后台运行(detach) |
--name |
指定容器名称 |
-p |
端口映射(宿主机端口:容器端口) |
-v |
挂载数据卷或目录 |
-e |
设置环境变量 |
3.3 启动、停止与重启
# 启动已存在的容器
docker start 容器名/容器ID
# 停止容器
docker stop 容器名/容器ID
# 重启容器
docker restart 容器名/容器ID

3.4 删除容器
# 删除容器
docker rm 容器名/容器ID
# 强制删除正在运行的容器
docker rm -f 容器名/容器ID
3.5 查看容器日志
# 查看容器日志
docker logs 容器名/容器ID
# 实时跟踪日志
docker logs -f 容器名/容器ID
3.6 进入容器内部
# 进入容器内部(交互式)
docker exec -it 容器名 /bin/bash
docker exec -it 容器名 /bin/sh
# 示例
docker exec -it my-first-nginx /bin/sh

3.7 容器与本地文件拷贝
# 从本地拷贝文件到容器
docker cp 本地文件路径 容器名:容器内路径
# 从容器拷贝文件到本地
docker cp 容器名:容器内路径 本地文件路径
# 示例
docker cp index.html my-first-nginx:/usr/share/nginx/html/
docker cp my-first-nginx:/usr/share/nginx/html/index.html ./
四、数据卷(Volume)
数据卷用于持久化容器数据,即使容器被删除,数据仍然保留。
4.1 数据卷的基本操作
# 查看所有数据卷
docker volume ls
# 创建数据卷
docker volume create 数据卷名
# 删除数据卷
docker volume rm 数据卷名

4.2 使用数据卷运行容器
# 使用数据卷挂载
docker run -d --name myapp -v 数据卷名:容器内路径 镜像名
# 示例
docker volume create mydata
docker run -d --name nginx-volume -v mydata:/usr/share/nginx/html nginx:alpine
4.3 挂载本地目录
# 将本地目录挂载到容器内(bind mount)
docker run -d --name myapp -v $(pwd)/html:/app/html 镜像名
五、Dockerfile 镜像构建
Dockerfile 是用于构建镜像的文本文件,包含了一系列指令。
5.1 基础语法
| 指令 | 说明 |
|---|---|
FROM |
指定基础镜像 |
ENV |
设置环境变量 |
WORKDIR |
设置工作目录 |
COPY |
复制文件到镜像 |
RUN |
在构建时执行命令 |
EXPOSE |
声明容器监听的端口 |
CMD |
容器启动时执行的命令 |
5.2 Dockerfile 示例
dockerfile
# 基础镜像为 python:3.10-slim
FROM python:3.10-slim
# 设置环境变量
ENV HOME=/app \
PORT=5000
# 设置工作目录
WORKDIR $HOME
# 将 requirements.txt 复制到工作目录
COPY requirements.txt $HOME/requirements.txt
# 安装依赖
RUN pip install -r requirements.txt
# 复制当前目录下的所有文件到工作目录
COPY . /app
# 暴露端口
EXPOSE $PORT
# 运行应用
CMD ["python", "web.py"]
5.3 构建镜像
# 使用 Dockerfile 构建镜像
docker build -t myapp:1.0 .
# 指定 Dockerfile 路径
docker build -t myapp:1.0 -f Dockerfile.prod .
六、镜像标签与仓库
6.1 给镜像打标签
# 语法
docker tag 原镜像名:标签 新镜像名:标签
# 示例:打标签准备推送到仓库
docker tag myapp:1.0 zzy0371/myapp:1.0
6.2 登录 Docker Hub
# 登录 Docker Hub
docker login -u 用户名
# 输入密码后登录成功
6.3 推送镜像到仓库
# 推送镜像到 Docker Hub
docker push 用户名/镜像名:标签
# 示例
docker push zzy0371/myapp:1.0
七、Docker Compose
Docker Compose 用于定义和运行多个容器的应用,通过一个 docker-compose.yml 文件配置所有服务。
7.1 常用命令
| 命令 | 说明 |
|---|---|
docker compose up -d |
启动所有服务(后台运行) |
docker compose down |
停止并删除所有服务 |
docker compose logs |
查看服务日志 |
docker compose ps |
查看服务状态 |
# 启动所有服务
docker compose up -d
# 停止并删除所有服务
docker compose down
# 查看日志
docker compose logs
# 查看服务状态
docker compose ps
7.2 docker-compose.yml 示例
yaml
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
environment:
- PORT=5000
volumes:
- ./app:/app
redis:
image: redis:alpine
ports:
- "6379:6379"
mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=123456
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
八、常用命令速查表
| 分类 | 命令 | 说明 |
|---|---|---|
| 基础 | docker version |
查看版本信息 |
| 镜像 | docker images |
查看本地镜像列表 |
docker pull 镜像名 |
拉取镜像 | |
docker search 镜像名 |
搜索镜像 | |
docker rmi 镜像名 |
删除镜像 | |
docker build -t 名 . |
构建镜像 | |
| 容器 | docker ps -a |
查看所有容器 |
docker run -d --name 名 -p端口 镜像 |
创建并运行容器 | |
docker start 容器名 |
启动容器 | |
docker stop 容器名 |
停止容器 | |
docker restart 容器名 |
重启容器 | |
docker rm 容器名 |
删除容器 | |
docker logs 容器名 |
查看日志 | |
docker exec -it 容器名 bash |
进入容器内部 | |
docker cp 本地 容器:目录 |
拷贝文件到容器 | |
| 数据卷 | docker volume ls |
查看所有数据卷 |
docker volume create 名 |
创建数据卷 | |
docker volume rm 名 |
删除数据卷 | |
| 仓库 | docker tag 原 新 |
给镜像打标签 |
docker login -u 用户名 |
登录仓库 | |
docker push 镜像名 |
推送镜像 | |
| Compose | docker compose up -d |
启动所有服务 |
docker compose down |
停止所有服务 |
九、总结
| 分类 | 核心内容 |
|---|---|
| 镜像 | pull、images、build、rmi |
| 容器 | run、ps、start、stop、restart、rm、logs、exec、cp |
| 数据卷 | volume create、volume ls、volume rm、-v 挂载 |
| Dockerfile | FROM、ENV、WORKDIR、COPY、RUN、EXPOSE、CMD |
| 仓库 | login、tag、push |
| Compose | docker-compose.yml、up -d、down |
Docker 通过镜像、容器、数据卷三大核心概念,实现了应用的标准化交付和运行。掌握这些基础知识后,你可以开始构建自己的镜像,管理容器化应用,并使用 Docker Compose 编排多服务应用。建议在实际项目中多练习,逐步熟悉 Docker 的工作流程。
如果觉得这篇内容对你有帮助,欢迎收藏备用。