网站Logo 开飞机的舒克

Docker 学习

dddd
9
2026-01-20

一、Docker 基本概念

1.1 什么是 Docker

Docker 是一个开源的应用容器引擎,允许开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

1.2 核心概念

  • 镜像(Image):Docker 镜像就是一个只读的模板,用于创建 Docker 容器。

  • 容器(Container):容器是从镜像创建的运行实例,可以被启动、停止、删除。

  • 仓库(Repository):仓库是集中存放镜像文件的场所,如 Docker Hub。

二、Docker 镜像管理

2.1 查看本地镜像

docker images

2.2 拉取镜像

从 Docker Hub 拉取镜像:

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

示例:

docker pull nginx:latest
docker pull mysql:5.7

2.3 搜索镜像

在 Docker Hub 搜索镜像:

docker search <关键词>

2.4 删除镜像

删除单个镜像:

docker rmi <镜像 ID 或镜像名:标签>

删除所有镜像:

docker rmi $(docker images -q)

2.5 构建镜像

使用 Dockerfile 构建镜像:

docker build -t <镜像名>:<标签> <Dockerfile 所在目录>

示例:

docker build -t myapp:v1 .

三、Docker 容器管理

3.1 查看容器

查看正在运行的容器:

docker ps

查看所有容器(包括停止的):

docker ps -a

3.2 创建容器

创建但不启动容器:

docker create --name <容器名> <镜像名>:<标签>

3.3 启动容器

启动一个已创建的容器:

docker start <容器 ID 或容器名>

3.4 运行容器

创建并启动容器:

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

常用选项:

  • -d:后台运行容器

  • -p:端口映射,格式:主机端口:容器端口

  • -v:挂载数据卷,格式:主机目录:容器目录

  • --name:指定容器名

  • -e:设置环境变量

示例:

docker run -d -p 80:80 --name mynginx nginx:latest
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql57 mysql:5.7

3.5 停止容器

docker stop <容器 ID 或容器名>

3.6 重启容器

docker restart <容器 ID 或容器名>

3.7 强制停止容器

docker kill <容器 ID 或容器名>

3.8 删除容器

删除单个容器:

docker rm <容器 ID 或容器名>

删除所有停止的容器:

docker container prune

3.9 进入容器

使用 exec 进入正在运行的容器(推荐):

docker exec -it <容器 ID 或容器名> /bin/bash

对于 Alpine 镜像,使用 sh 代替 bash

docker exec -it <容器 ID 或容器名> sh

3.10 查看容器日志

查看容器实时日志:

docker logs -f <容器 ID 或容器名>

查看指定行数的日志:

docker logs -n 100 <容器 ID 或容器名>

3.11 查看容器详情

docker inspect <容器 ID 或容器名>

3.12 查看容器内进程

docker top <容器 ID 或容器名>

3.13 复制文件

从容器复制到主机:

docker cp <容器 ID 或容器名>:<容器内路径> <主机路径>

从主机复制到容器:

docker cp <主机路径> <容器 ID 或容器名>:<容器内路径>

四、Docker 网络管理

4.1 查看网络

docker network ls

4.2 创建网络

创建自定义网络:

docker network create <网络名>

4.3 查看网络详情

docker network inspect <网络名>

4.4 连接容器到网络

docker network connect <网络名> <容器名>

4.5 断开容器与网络的连接

docker network disconnect <网络名> <容器名>

4.6 删除网络

docker network rm <网络名>

五、Docker 数据卷管理

5.1 查看数据卷

docker volume ls

5.2 创建数据卷

docker volume create <数据卷名>

5.3 查看数据卷详情

docker volume inspect <数据卷名>

5.4 删除数据卷

删除单个数据卷:

docker volume rm <数据卷名>

删除未使用的数据卷:

docker volume prune

六、Docker Compose

6.1 什么是 Docker Compose

Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YAML 文件来配置应用程序的服务,然后使用一个命令创建并启动所有服务。

6.2 基本命令

启动服务:

docker-compose up -d

停止服务:

docker-compose down

查看服务状态:

docker-compose ps

查看日志:

docker-compose logs -f

七、Docker 常用技巧

7.1 清理 Docker 资源

清理所有未使用的资源(容器、镜像、网络、数据卷):

docker system prune -a

7.2 查看 Docker 信息

docker info

7.3 查看 Docker 版本

docker version

八、Dockerfile 基础

8.1 什么是 Dockerfile

Dockerfile 是一个文本文件,包含了一系列命令,用于构建 Docker 镜像。

8.2 常用指令

  • FROM:指定基础镜像

  • MAINTAINER:维护者信息

  • RUN:执行命令

  • ADD:复制文件到镜像

  • COPY:复制文件到镜像(推荐)

  • WORKDIR:设置工作目录

  • ENV:设置环境变量

  • EXPOSE:暴露端口

  • CMD:容器启动时执行的命令

  • ENTRYPOINT:容器入口点

8.3 示例 Dockerfile

FROM nginx:latest

MAINTAINER example@example.com

WORKDIR /usr/share/nginx/html

COPY index.html .

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

九、Docker 实战示例

9.1 运行一个简单的 Web 服务器

docker run -d -p 8080:80 --name myweb nginx:latest

访问:http://localhost:8080

9.2 运行 MySQL 容器

docker run -d -p 3306:3306 \
  --name mysql \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -e MYSQL_DATABASE=mydb \
  -e MYSQL_USER=user \
  -e MYSQL_PASSWORD=password \
  mysql:5.7

十、Docker 最佳实践

  1. 尽可能使用官方镜像作为基础镜像

  2. 最小化镜像大小,使用 Alpine 等轻量级镜像

  3. 每个容器只运行一个进程

  4. 使用 .dockerignore 文件排除不需要的文件

  5. 合理使用数据卷持久化数据

  6. 避免在容器内存储敏感信息,使用环境变量或 secrets 管理

  7. 定期清理未使用的资源

  8. 使用标签管理镜像版本

  9. 编写清晰的 Dockerfile 并添加注释

  10. 使用 Docker Compose 管理多容器应用