mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-23 10:15:24 +00:00
Restruct
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
## 快速上手(5分钟)
|
||||
## 1.1 快速上手
|
||||
|
||||
本节将通过一个简单的 Web 应用例子,带你快速体验 Docker 的核心流程:构建镜像、运行容器。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 什么是 Docker
|
||||
## 1.2 什么是 Docker
|
||||
|
||||
Docker 是彻底改变了软件开发和交付方式的革命性技术。本节将从核心概念、与传统虚拟机的对比、技术基础以及历史生态等多个维度,带你深入理解什么是 Docker。
|
||||
|
||||
@@ -77,7 +77,7 @@ Docker 使用 [Go 语言](https://golang.google.cn/) 开发,基于 Linux 内
|
||||
- **[Cgroups](https://zh.wikipedia.org/wiki/Cgroups)**:实现资源限制(CPU、内存、I/O 等)
|
||||
- **[Union FS](https://en.wikipedia.org/wiki/Union_mount)**:实现分层存储(如 OverlayFS)
|
||||
|
||||
> 如果你对这些底层技术感兴趣,可以阅读本书的[底层实现](../13_implementation/README.md)章节。
|
||||
> 如果你对这些底层技术感兴趣,可以阅读本书的[底层实现](../14_implementation/README.md)章节。
|
||||
|
||||
#### Docker 架构演进
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 为什么要使用 Docker?
|
||||
## 1.3 为什么要使用 Docker?
|
||||
|
||||
在回答"为什么用 Docker"之前,笔者想先问一个问题:**你有没有经历过这些场景?**
|
||||
|
||||
@@ -152,7 +152,7 @@ Docker 完美契合 DevOps 的工作流程:
|
||||
使用 [Dockerfile](../04_image/4.5_build.md) 定义镜像构建过程,使得:
|
||||
- 构建过程**可重复、可追溯**
|
||||
- 任何人都能从代码重建完全相同的镜像
|
||||
- 配合 [GitHub Actions](../14_cases/ci/actions/README.md) 等 CI 系统实现自动化
|
||||
- 配合 [GitHub Actions](../15_cases/ci/actions/README.md) 等 CI 系统实现自动化
|
||||
|
||||
#### 5. 轻松迁移
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Docker 镜像
|
||||
## 2.1 Docker 镜像
|
||||
|
||||
## Docker 镜像
|
||||
|
||||
@@ -238,5 +238,5 @@ Docker 镜像可以通过以下方式获取:
|
||||
|
||||
- [获取镜像](../04_image/4.1_pull.md):从 Registry 下载镜像
|
||||
- [使用 Dockerfile 定制镜像](../04_image/4.5_build.md):创建自己的镜像
|
||||
- [Dockerfile 最佳实践](../15_appendix/15.1_best_practices.md):构建高质量镜像的技巧
|
||||
- [底层实现 - 联合文件系统](../13_implementation/13.4_ufs.md):深入理解分层存储的技术原理
|
||||
- [Dockerfile 最佳实践](../16_appendix/16.1_best_practices.md):构建高质量镜像的技巧
|
||||
- [底层实现 - 联合文件系统](../14_implementation/14.4_ufs.md):深入理解分层存储的技术原理
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Docker 容器
|
||||
## 2.2 Docker 容器
|
||||
|
||||
## Docker 容器
|
||||
|
||||
@@ -137,8 +137,8 @@ $ docker rm abc123
|
||||
|
||||
| 方式 | 说明 | 适用场景 |
|
||||
|------|------|---------|
|
||||
| **[数据卷(Volume)](../07_data_network/data/volume.md)** | Docker 管理的存储 | 数据库、应用数据 |
|
||||
| **[绑定挂载(Bind Mount)](../07_data_network/data/bind-mounts.md)** | 挂载宿主机目录 | 开发时共享代码 |
|
||||
| **[数据卷(Volume)](../08_data_network/data/volume.md)** | Docker 管理的存储 | 数据库、应用数据 |
|
||||
| **[绑定挂载(Bind Mount)](../08_data_network/data/bind-mounts.md)** | 挂载宿主机目录 | 开发时共享代码 |
|
||||
|
||||
```bash
|
||||
## 使用数据卷(推荐)
|
||||
@@ -254,7 +254,7 @@ Docker 容器通过以下 Namespace 实现隔离:
|
||||
| **IPC** | 进程间通信 | 独立的信号量、消息队列 |
|
||||
| **USER** | 用户 | 独立的用户和组 ID |
|
||||
|
||||
> 想深入了解?请阅读[底层实现 - 命名空间](../13_implementation/13.2_namespace.md)。
|
||||
> 想深入了解?请阅读[底层实现 - 命名空间](../14_implementation/14.2_namespace.md)。
|
||||
|
||||
### 本章小结
|
||||
|
||||
@@ -273,4 +273,4 @@ Docker 容器通过以下 Namespace 实现隔离:
|
||||
- [启动容器](../05_container/5.1_run.md):详细的容器启动选项
|
||||
- [后台运行](../05_container/5.2_daemon.md):理解容器为什么会"立即退出"
|
||||
- [进入容器](../05_container/5.4_attach_exec.md):如何操作运行中的容器
|
||||
- [数据管理](../07_data_network/README.md):Volume 和数据持久化详解
|
||||
- [数据管理](../08_data_network/README.md):Volume 和数据持久化详解
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Docker Registry
|
||||
## 2.3 Docker Registry
|
||||
|
||||
## Docker Registry
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 开启实验特性
|
||||
## 3.10 开启实验特性
|
||||
|
||||
一些 docker 命令或功能仅当 **实验特性** 开启时才能使用,请按照以下方法进行设置。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Ubuntu 安装 Docker
|
||||
## 3.1 Ubuntu 安装 Docker
|
||||
|
||||
## Ubuntu 安装 Docker
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Debian 安装 Docker
|
||||
## 3.2 Debian 安装 Docker
|
||||
|
||||
## Debian 安装 Docker
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Fedora 安装 Docker
|
||||
## 3.3 Fedora 安装 Docker
|
||||
|
||||
## Fedora 安装 Docker
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## CentOS 安装 Docker
|
||||
## 3.4 CentOS 安装 Docker
|
||||
|
||||
## CentOS 安装 Docker
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 树莓派卡片电脑安装 Docker
|
||||
## 3.5 树莓派卡片电脑安装 Docker
|
||||
|
||||
## 树莓派卡片电脑安装 Docker
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Linux 离线安装
|
||||
## 3.6 Linux 离线安装
|
||||
|
||||
\[TOC]
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## macOS
|
||||
## 3.7 macOS
|
||||
|
||||
### 系统要求
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Windows 10/11
|
||||
## 3.8 Windows 10/11
|
||||
|
||||
在 Windows 平台上,Docker Desktop 提供了完整的 Docker 开发环境。本节介绍在 Windows 10/11 上的安装和配置。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 镜像加速器
|
||||
## 3.9 镜像加速器
|
||||
|
||||
国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 获取镜像
|
||||
## 4.1 获取镜像
|
||||
|
||||
## 获取镜像
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 列出镜像
|
||||
## 4.2 列出镜像
|
||||
|
||||
## 列出镜像
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 删除本地镜像
|
||||
## 4.3 删除本地镜像
|
||||
|
||||
当不再需要某个镜像时,我们可以将其删除以释放存储空间。本节介绍删除镜像的常用方法。
|
||||
|
||||
@@ -307,4 +307,4 @@ Build Cache 0 0 0B 0B
|
||||
|
||||
- [列出镜像](4.2_list.md):查看和过滤镜像
|
||||
- [删除容器](../05_container/4.3_rm.md):清理容器
|
||||
- [数据卷](../07_data_network/data/volume.md):清理数据卷
|
||||
- [数据卷](../08_data_network/data/volume.md):清理数据卷
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 利用 commit 理解镜像构成
|
||||
## 4.4 利用 commit 理解镜像构成
|
||||
|
||||
> 注意:如果您是初学者,您可以暂时跳过后面的内容,直接学习 [容器](../05_container/) 一节。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 使用 Dockerfile 定制镜像
|
||||
## 4.5 使用 Dockerfile 定制镜像
|
||||
|
||||
从刚才的 `docker commit` 的学习中,我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 其它制作镜像的方式
|
||||
## 4.6 其它制作镜像的方式
|
||||
|
||||
除了标准的使用 `Dockerfile` 生成镜像的方法外,由于各种特殊需求和历史原因,还提供了一些其它方法用以生成镜像。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 镜像的实现原理
|
||||
## 4.7 镜像的实现原理
|
||||
|
||||
Docker 镜像是怎么实现增量的修改和维护的?
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
# Dockerfile 指令详解
|
||||
|
||||
我们已经介绍了 `FROM`,`RUN`,还提及了 `COPY`, `ADD`,其实 `Dockerfile` 功能很强大,它提供了十多个指令。下面我们继续讲解其他的指令。
|
||||
@@ -1,4 +1,4 @@
|
||||
## 启动容器
|
||||
## 5.1 启动容器
|
||||
|
||||
本节将详细介绍 Docker 容器的启动方式,包括新建启动和重新启动已停止的容器。
|
||||
|
||||
@@ -240,7 +240,7 @@ $ docker run -d -p 80:80 nginx
|
||||
$ docker run -v mydata:/app/data myapp
|
||||
```
|
||||
|
||||
详见[数据管理](../07_data_network/README.md)。
|
||||
详见[数据管理](../08_data_network/README.md)。
|
||||
|
||||
### 本章小结
|
||||
|
||||
@@ -256,4 +256,4 @@ $ docker run -v mydata:/app/data myapp
|
||||
- [后台运行](5.2_daemon.md):理解 `-d` 参数和容器生命周期
|
||||
- [进入容器](5.4_attach_exec.md):操作运行中的容器
|
||||
- [网络配置](../network/README.md):理解端口映射的原理
|
||||
- [数据管理](../07_data_network/README.md):数据持久化方案
|
||||
- [数据管理](../08_data_network/README.md):数据持久化方案
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 后台运行
|
||||
## 5.2 后台运行
|
||||
|
||||
在生产环境中,我们通常需要容器持续运行,不受终端关闭的影响。本节将深入讲解如何让容器在后台运行,以及理解容器生命周期的核心概念。
|
||||
|
||||
@@ -240,6 +240,6 @@ $ docker attach mycontainer
|
||||
### 延伸阅读
|
||||
|
||||
- [进入容器](5.4_attach_exec.md):如何进入正在运行的容器执行命令
|
||||
- [容器日志](../15_appendix/15.1_best_practices.md):生产环境的日志管理最佳实践
|
||||
- [HEALTHCHECK 健康检查](../04_image/dockerfile/healthcheck.md):自动检测容器内服务是否正常
|
||||
- [容器日志](../16_appendix/16.1_best_practices.md):生产环境的日志管理最佳实践
|
||||
- [HEALTHCHECK 健康检查](../07_dockerfile/7.12_healthcheck.md):自动检测容器内服务是否正常
|
||||
- [Docker Compose](../compose/README.md):管理多个后台容器的更好方式
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 终止容器
|
||||
## 5.3 终止容器
|
||||
|
||||
本节将介绍如何终止一个运行中的容器,以及几种不同的终止方式及其区别。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 进入容器
|
||||
## 5.4 进入容器
|
||||
|
||||
### 为什么需要进入容器
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 导出和导入容器
|
||||
## 5.5 导出和导入容器
|
||||
|
||||
当我们需要迁移容器或者备份容器时,可以使用 Docker 的导入和导出功能。本节将介绍这两个命令的使用方法。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 删除容器
|
||||
## 5.6 删除容器
|
||||
|
||||
随着容器的创建和停止,系统中会积累大量的容器。本节将介绍如何删除不再需要的容器,以及如何清理所有停止的容器。
|
||||
|
||||
@@ -280,4 +280,4 @@ $ docker system prune -a --volumes
|
||||
|
||||
- [终止容器](5.3_stop.md):优雅停止容器
|
||||
- [删除镜像](../04_image/4.3_rm.md):清理镜像
|
||||
- [数据卷](../07_data_network/data/volume.md):数据卷管理
|
||||
- [数据卷](../08_data_network/data/volume.md):数据卷管理
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Docker Hub
|
||||
## 6.1 Docker Hub
|
||||
|
||||
### 什么是 Docker Hub
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 私有仓库
|
||||
## 6.2 私有仓库
|
||||
|
||||
有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 私有仓库高级配置
|
||||
## 6.3 私有仓库高级配置
|
||||
|
||||
上一节我们搭建了一个具有基础功能的私有仓库,本小节我们来使用 `Docker Compose` 搭建一个拥有权限认证、TLS 的私有仓库。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Nexus 3
|
||||
## 6.4 Nexus 3
|
||||
|
||||
使用 Docker 官方的 Registry 创建的仓库面临一些维护问题。比如某些镜像删除以后空间默认是不会回收的,需要一些命令去回收空间然后重启 Registry。在企业中把内部的一些工具包放入 `Nexus` 中是比较常见的做法,最新版本 `Nexus3.x` 全面支持 Docker 的私有镜像。所以使用 [`Nexus3.x`](https://www.sonatype.com/product/repository-oss-download) 一个软件来管理 `Docker` , `Maven` , `Yum` , `PyPI` 等是一个明智的选择。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## WORKDIR 指定工作目录
|
||||
## 7.10 WORKDIR 指定工作目录
|
||||
|
||||
### 基本语法
|
||||
|
||||
@@ -226,4 +226,4 @@ $ docker run -w /tmp myimage pwd
|
||||
|
||||
- [COPY 复制文件](copy.md):文件复制
|
||||
- [RUN 执行命令](../../04_image/4.5_build.md):执行构建命令
|
||||
- [最佳实践](../../15_appendix/15.1_best_practices.md):Dockerfile 编写指南
|
||||
- [最佳实践](../../16_appendix/16.1_best_practices.md):Dockerfile 编写指南
|
||||
@@ -1,4 +1,4 @@
|
||||
## USER 指定当前用户
|
||||
## 7.11 USER 指定当前用户
|
||||
|
||||
### 基本语法
|
||||
|
||||
@@ -304,4 +304,4 @@ RUN mkdir -p /app/data && chown appuser:appuser /app/data
|
||||
|
||||
- [安全](../../security/README.md):容器安全实践
|
||||
- [ENTRYPOINT](entrypoint.md):入口脚本中的用户切换
|
||||
- [最佳实践](../../15_appendix/15.1_best_practices.md):Dockerfile 安全
|
||||
- [最佳实践](../../16_appendix/16.1_best_practices.md):Dockerfile 安全
|
||||
@@ -1,4 +1,4 @@
|
||||
## HEALTHCHECK 健康检查
|
||||
## 7.12 HEALTHCHECK 健康检查
|
||||
|
||||
### 基本语法
|
||||
|
||||
@@ -219,5 +219,5 @@ HEALTHCHECK --start-period=60s CMD curl -f http://localhost/ || exit 1
|
||||
### 延伸阅读
|
||||
|
||||
- [CMD 容器启动命令](cmd.md):启动主进程
|
||||
- [Compose 模板文件](../../compose/9.5_compose_file.md):Compose 中的健康检查
|
||||
- [Docker 调试](../../15_appendix/15.2_debug.md):容器排障
|
||||
- [Compose 模板文件](../../compose/10.5_compose_file.md):Compose 中的健康检查
|
||||
- [Docker 调试](../../16_appendix/16.2_debug.md):容器排障
|
||||
@@ -1,4 +1,4 @@
|
||||
## ONBUILD 为他人做嫁衣裳
|
||||
## 7.13 ONBUILD 为他人做嫁衣裳
|
||||
|
||||
### 基本语法
|
||||
|
||||
@@ -166,4 +166,4 @@ python:3.12-onbuild
|
||||
### 延伸阅读
|
||||
|
||||
- [COPY 指令](copy.md):文件复制
|
||||
- [Dockerfile 最佳实践](../../15_appendix/15.1_best_practices.md):基础镜像设计
|
||||
- [Dockerfile 最佳实践](../../16_appendix/16.1_best_practices.md):基础镜像设计
|
||||
@@ -1,4 +1,4 @@
|
||||
## LABEL 为镜像添加元数据
|
||||
## 7.14 LABEL 为镜像添加元数据
|
||||
|
||||
### 基本语法
|
||||
|
||||
@@ -164,4 +164,4 @@ $ docker rmi $(docker images -q --filter "label=stage=builder")
|
||||
### 延伸阅读
|
||||
|
||||
- [OCI 标签规范](https://github.com/opencontainers/image-spec/blob/main/annotations.md)
|
||||
- [Dockerfile 最佳实践](../../15_appendix/15.1_best_practices.md)
|
||||
- [Dockerfile 最佳实践](../../16_appendix/16.1_best_practices.md)
|
||||
@@ -1,4 +1,4 @@
|
||||
## SHELL 指令
|
||||
## 7.15 SHELL 指令
|
||||
|
||||
### 基本语法
|
||||
|
||||
@@ -151,4 +151,4 @@ SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||
### 延伸阅读
|
||||
|
||||
- [RUN 指令](../../04_image/4.5_build.md):执行命令
|
||||
- [Dockerfile 最佳实践](../../15_appendix/15.1_best_practices.md):错误处理与调试
|
||||
- [Dockerfile 最佳实践](../../16_appendix/16.1_best_practices.md):错误处理与调试
|
||||
@@ -1,4 +1,4 @@
|
||||
## 参考文档
|
||||
## 7.16 参考文档
|
||||
|
||||
* `Dockerfile` 官方文档:https://docs.docker.com/engine/reference/builder/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## RUN 执行命令
|
||||
## 7.1 RUN 执行命令
|
||||
|
||||
### 基本语法
|
||||
|
||||
@@ -191,4 +191,4 @@ RUN --mount=type=secret,id=mysecret \
|
||||
|
||||
- [CMD 容器启动命令](cmd.md):容器启动时的命令
|
||||
- [WORKDIR 指定工作目录](workdir.md):改变目录
|
||||
- [Dockerfile 最佳实践](../../15_appendix/15.1_best_practices.md)
|
||||
- [Dockerfile 最佳实践](../../16_appendix/16.1_best_practices.md)
|
||||
@@ -1,4 +1,4 @@
|
||||
## COPY 复制文件
|
||||
## 7.2 COPY 复制文件
|
||||
|
||||
### 基本语法
|
||||
|
||||
@@ -304,4 +304,4 @@ COPY . .
|
||||
- [ADD 指令](add.md):复制和解压
|
||||
- [WORKDIR 指令](workdir.md):设置工作目录
|
||||
- [多阶段构建](../multistage-builds.md):优化镜像大小
|
||||
- [最佳实践](../../15_appendix/15.1_best_practices.md):Dockerfile 编写指南
|
||||
- [最佳实践](../../16_appendix/16.1_best_practices.md):Dockerfile 编写指南
|
||||
@@ -1,4 +1,4 @@
|
||||
## ADD 更高级的复制文件
|
||||
## 7.3 ADD 更高级的复制文件
|
||||
|
||||
### 基本语法
|
||||
|
||||
@@ -259,4 +259,4 @@ RUN tar -xzf /tmp/app.tar.gz -C /app && \
|
||||
|
||||
- [COPY 复制文件](copy.md):基本复制操作
|
||||
- [多阶段构建](../multistage-builds.md):减少镜像体积
|
||||
- [最佳实践](../../15_appendix/15.1_best_practices.md):Dockerfile 编写指南
|
||||
- [最佳实践](../../16_appendix/16.1_best_practices.md):Dockerfile 编写指南
|
||||
@@ -1,4 +1,4 @@
|
||||
## CMD 容器启动命令
|
||||
## 7.4 CMD 容器启动命令
|
||||
|
||||
### 什么是 CMD
|
||||
|
||||
@@ -316,4 +316,4 @@ CMD ["python", "app.py"]
|
||||
|
||||
- [ENTRYPOINT 入口点](entrypoint.md):固定的启动命令
|
||||
- [后台运行](../../05_container/5.2_daemon.md):容器前台/后台概念
|
||||
- [最佳实践](../../15_appendix/15.1_best_practices.md):Dockerfile 编写指南
|
||||
- [最佳实践](../../16_appendix/16.1_best_practices.md):Dockerfile 编写指南
|
||||
@@ -1,4 +1,4 @@
|
||||
## ENTRYPOINT 入口点
|
||||
## 7.5 ENTRYPOINT 入口点
|
||||
|
||||
### 什么是 ENTRYPOINT
|
||||
|
||||
@@ -347,5 +347,5 @@ wait $PID
|
||||
### 延伸阅读
|
||||
|
||||
- [CMD 容器启动命令](cmd.md):默认命令
|
||||
- [最佳实践](../../15_appendix/15.1_best_practices.md):启动命令设计
|
||||
- [最佳实践](../../16_appendix/16.1_best_practices.md):启动命令设计
|
||||
- [后台运行](../../05_container/5.2_daemon.md):前台/后台概念
|
||||
@@ -1,4 +1,4 @@
|
||||
## ENV 设置环境变量
|
||||
## 7.6 ENV 设置环境变量
|
||||
|
||||
### 基本语法
|
||||
|
||||
@@ -296,5 +296,5 @@ ENV VAR3=value3
|
||||
### 延伸阅读
|
||||
|
||||
- [ARG 构建参数](arg.md):构建时变量
|
||||
- [Compose 环境变量](../../compose/9.5_compose_file.md):Compose 中的环境变量
|
||||
- [最佳实践](../../15_appendix/15.1_best_practices.md):Dockerfile 编写指南
|
||||
- [Compose 环境变量](../../compose/10.5_compose_file.md):Compose 中的环境变量
|
||||
- [最佳实践](../../16_appendix/16.1_best_practices.md):Dockerfile 编写指南
|
||||
@@ -1,4 +1,4 @@
|
||||
## ARG 构建参数
|
||||
## 7.7 ARG 构建参数
|
||||
|
||||
### 基本语法
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## VOLUME 定义匿名卷
|
||||
## 7.8 VOLUME 定义匿名卷
|
||||
|
||||
### 基本语法
|
||||
|
||||
@@ -288,6 +288,6 @@ VOLUME /var/lib/mysql
|
||||
|
||||
### 延伸阅读
|
||||
|
||||
- [数据卷](../../07_data_network/data/volume.md):卷的管理和使用
|
||||
- [挂载主机目录](../../07_data_network/data/bind-mounts.md):Bind Mount
|
||||
- [Compose 数据管理](../../compose/9.5_compose_file.md):Compose 中的卷配置
|
||||
- [数据卷](../../08_data_network/data/volume.md):卷的管理和使用
|
||||
- [挂载主机目录](../../08_data_network/data/bind-mounts.md):Bind Mount
|
||||
- [Compose 数据管理](../../compose/10.5_compose_file.md):Compose 中的卷配置
|
||||
@@ -1,4 +1,4 @@
|
||||
## EXPOSE 声明端口
|
||||
## 7.9 EXPOSE 声明端口
|
||||
|
||||
### 基本语法
|
||||
|
||||
@@ -258,4 +258,4 @@ services:
|
||||
|
||||
- [网络配置](../../network/README.md):Docker 网络详解
|
||||
- [端口映射](../../network/port_bindingbindingbinding.md):-p 参数详解
|
||||
- [Compose 端口](../../compose/9.5_compose_file.md):Compose 中的端口配置
|
||||
- [Compose 端口](../../compose/10.5_compose_file.md):Compose 中的端口配置
|
||||
58
07_dockerfile/README.md
Normal file
58
07_dockerfile/README.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# 第七章 Dockerfile 指令详解
|
||||
|
||||
## 什么是 Dockerfile
|
||||
|
||||
Dockerfile 是一个文本文件,其內包含了一条条的 **指令(Instruction)**,每一条指令构建一层,therefore 每一条指令的内容,就是描述该层应当如何构建。
|
||||
|
||||
在 [第四章](04_image/README.md) 中,我们通过 `docker commit` 学习了镜像的构成。但是,手动 `commit` 只能作为临时修补,并不适合作为生产环境镜像的构建方式。
|
||||
|
||||
使用 Dockerfile 构建镜像有以下优势:
|
||||
|
||||
* **自动化**:可以通过 `docker build` 命令自动构建镜像。
|
||||
* **可重复性**:由于 Dockerfile 是文本文件,可以确保每次构建的结果一致。
|
||||
* **版本控制**:Dockerfile 可以纳入版本控制系统(如 Git),便于追踪变更。
|
||||
* **透明性**:任何人都可以通过阅读 Dockerfile 了解镜像的构建过程。
|
||||
|
||||
## Dockerfile 基本结构
|
||||
|
||||
Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
|
||||
|
||||
### 指令详解
|
||||
|
||||
本章将详细讲解 Dockerfile 中的各个指令:
|
||||
|
||||
* [COPY 复制文件](7.2_copy.md)
|
||||
* [ADD 更高级的复制文件](7.3_add.md)
|
||||
* [CMD 容器启动命令](7.4_cmd.md)
|
||||
* [ENTRYPOINT 入口点](7.5_entrypoint.md)
|
||||
* [ENV 设置环境变量](7.6_env.md)
|
||||
* [ARG 构建参数](7.7_arg.md)
|
||||
* [VOLUME 定义匿名卷](7.8_volume.md)
|
||||
* [EXPOSE 暴露端口](7.9_expose.md)
|
||||
* [WORKDIR 指定工作目录](7.10_workdir.md)
|
||||
* [USER 指定当前用户](7.11_user.md)
|
||||
* [HEALTHCHECK 健康检查](7.12_healthcheck.md)
|
||||
* [ONBUILD 为他人作嫁衣裳](7.13_onbuild.md)
|
||||
* [LABEL 为镜像添加元数据](7.14_label.md)
|
||||
* [SHELL 指令](7.15_shell.md)
|
||||
* [RUN 执行命令](5.1_run.md)
|
||||
|
||||
此外,我们还将介绍 Dockerfile 的最佳实践和常见问题。
|
||||
|
||||
* [参考文档](7.16_references.md)
|
||||
|
||||
## 使用 Dockerfile 构建镜像
|
||||
|
||||
构建镜像的基本命令格式为:
|
||||
|
||||
```bash
|
||||
docker build [选项] <上下文路径/URL/->
|
||||
```
|
||||
|
||||
例如,在 Dockerfile 所在目录执行:
|
||||
|
||||
```bash
|
||||
docker build -t my-image:v1 .
|
||||
```
|
||||
|
||||
更多关于 `docker build` 的用法,我们在实战中会结合具体指令进行演示。
|
||||
@@ -1,4 +1,4 @@
|
||||
# 第七章 数据与网络管理
|
||||
# 第八章 数据与网络管理
|
||||
|
||||
本章将介绍 Docker 中的数据管理与网络配置。
|
||||
|
||||
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
@@ -329,4 +329,4 @@ $ docker run -v /app/data:/data ...
|
||||
|
||||
- [数据卷](volume.md):Docker 管理的持久化存储
|
||||
- [tmpfs 挂载](tmpfs.md):内存临时存储
|
||||
- [Compose 数据管理](../compose/9.5_compose_file.md):Compose 中的挂载配置
|
||||
- [Compose 数据管理](../compose/10.5_compose_file.md):Compose 中的挂载配置
|
||||
@@ -417,4 +417,4 @@ $ docker volume inspect my-vol
|
||||
|
||||
- [绑定挂载](bind-mounts.md):挂载宿主机目录
|
||||
- [tmpfs 挂载](tmpfs.md):内存中的临时存储
|
||||
- [存储驱动](../13_implementation/13.4_ufs.md):Docker 存储的底层原理
|
||||
- [存储驱动](../14_implementation/14.4_ufs.md):Docker 存储的底层原理
|
||||
@@ -330,4 +330,4 @@ $ docker network prune
|
||||
- [高级网络配置](linking.md):容器互联详解
|
||||
- [配置 DNS](dns.md):自定义 DNS 设置
|
||||
- [端口映射](port_mapping.md):高级端口配置
|
||||
- [Compose 网络](../compose/9.5_compose_file.md):Compose 中的网络配置
|
||||
- [Compose 网络](../compose/10.5_compose_file.md):Compose 中的网络配置
|
||||
@@ -164,5 +164,5 @@ iptables -t nat -A DOCKER -p tcp --dport 8080 -j DNAT --to-destination 172.17.0.
|
||||
|
||||
### 延伸阅读
|
||||
|
||||
- [EXPOSE 指令](../04_image/dockerfile/expose.md):在 Dockerfile 中声明端口
|
||||
- [EXPOSE 指令](../07_dockerfile/7.9_expose.md):在 Dockerfile 中声明端口
|
||||
- [网络模式](README.md):Host 模式不需要端口映射
|
||||
@@ -1,4 +1,4 @@
|
||||
## 使用 `BuildKit` 构建镜像
|
||||
## 9.1 使用 `BuildKit` 构建镜像
|
||||
|
||||
**BuildKit** 是下一代的镜像构建组件,在 https://github.com/moby/buildkit 开源。
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 使用 Buildx 构建镜像
|
||||
## 9.2 使用 Buildx 构建镜像
|
||||
|
||||
### 使用
|
||||
|
||||
@@ -12,7 +12,7 @@ $ docker buildx build .
|
||||
=> ...
|
||||
```
|
||||
|
||||
Buildx 使用 [BuildKit 引擎](8.1_buildkit.md) 进行构建,支持许多新的功能,具体参考 [Buildkit](8.1_buildkit.md) 一节。
|
||||
Buildx 使用 [BuildKit 引擎](9.1_buildkit.md) 进行构建,支持许多新的功能,具体参考 [Buildkit](9.1_buildkit.md) 一节。
|
||||
|
||||
#### 使用 `bake`
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 构建多种系统架构支持的 Docker 镜像
|
||||
## 9.3 构建多种系统架构支持的 Docker 镜像
|
||||
|
||||
Docker 镜像可以支持多种系统架构,这意味着你可以在 `x86_64`、`arm64` 等不同架构的机器上运行同一个镜像。这是通过一个名为 "manifest list"(或称为 "fat manifest")的文件来实现的。
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 第八章 Docker Buildx
|
||||
# 第九章 Docker Buildx
|
||||
|
||||
Docker Buildx 是一个 docker CLI 插件,其扩展了 docker 命令,支持 [Moby BuildKit](8.1_buildkit.md) 提供的功能。提供了与 docker build 相同的用户体验,并增加了许多新功能。
|
||||
Docker Buildx 是一个 docker CLI 插件,其扩展了 docker 命令,支持 [Moby BuildKit](9.1_buildkit.md) 提供的功能。提供了与 docker build 相同的用户体验,并增加了许多新功能。
|
||||
|
||||
> 该功能仅适用于 Docker v19.03+ 版本
|
||||
|
||||
@@ -8,6 +8,6 @@ Docker Buildx 是一个 docker CLI 插件,其扩展了 docker 命令,支持
|
||||
|
||||
本章将详细介绍 Docker Buildx 的使用,包括:
|
||||
|
||||
* [使用 BuildKit 构建镜像](8.1_buildkit.md)
|
||||
* [使用 Buildx 构建镜像](8.2_buildx.md)
|
||||
* [构建多种系统架构支持的 Docker 镜像](8.3_multi-arch-images.md)
|
||||
* [使用 BuildKit 构建镜像](9.1_buildkit.md)
|
||||
* [使用 Buildx 构建镜像](9.2_buildx.md)
|
||||
* [构建多种系统架构支持的 Docker 镜像](9.3_multi-arch-images.md)
|
||||
@@ -1,4 +1,4 @@
|
||||
## Compose 简介
|
||||
## 10.1 Compose 简介
|
||||
|
||||
`Compose` 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 `OpenStack` 中的 `Heat` 十分类似。
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 安装与卸载
|
||||
## 10.2 安装与卸载
|
||||
|
||||
`Compose` 是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 使用
|
||||
## 10.3 使用
|
||||
|
||||
本节将通过一个具体的 Web 应用案例,介绍 Docker Compose 的基本概念和使用方法。
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Compose 命令说明
|
||||
## 10.4 Compose 命令说明
|
||||
|
||||
Docker Compose 提供了丰富的命令来管理项目和容器。本节将详细介绍这些命令的使用格式和常用选项。
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Compose 模板文件
|
||||
## 10.5 Compose 模板文件
|
||||
|
||||
模板文件是使用 `Compose` 的核心,涉及到的指令关键字也比较多。但大家不用担心,这里面大部分指令跟 `docker run` 相关参数的含义都是类似的。
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 使用 Django
|
||||
## 10.6 使用 Django
|
||||
|
||||
> 本小节内容适合 `Python` 开发人员阅读。
|
||||
|
||||
@@ -360,7 +360,7 @@ services:
|
||||
|
||||
### 延伸阅读
|
||||
|
||||
- [Compose 模板文件详解](9.5_compose_file.md):深入理解 docker-compose.yml 的所有配置项
|
||||
- [使用 WordPress](9.8_wordpress.md):另一个 Compose 实战案例
|
||||
- [Dockerfile 最佳实践](../15_appendix/15.1_best_practices.md):构建更小、更安全的镜像
|
||||
- [数据管理](../07_data_network/README.md):Volume 和数据持久化详解
|
||||
- [Compose 模板文件详解](10.5_compose_file.md):深入理解 docker-compose.yml 的所有配置项
|
||||
- [使用 WordPress](10.8_wordpress.md):另一个 Compose 实战案例
|
||||
- [Dockerfile 最佳实践](../16_appendix/16.1_best_practices.md):构建更小、更安全的镜像
|
||||
- [数据管理](../08_data_network/README.md):Volume 和数据持久化详解
|
||||
@@ -1,4 +1,4 @@
|
||||
## 使用 Rails
|
||||
## 10.7 使用 Rails
|
||||
|
||||
> 本小节内容适合 Ruby 开发人员阅读。
|
||||
|
||||
@@ -282,6 +282,6 @@ $ docker compose run --rm web bundle update
|
||||
|
||||
### 延伸阅读
|
||||
|
||||
- [使用 Django](9.6_django.md):Python Web 框架实战
|
||||
- [Compose 模板文件](9.5_compose_file.md):配置详解
|
||||
- [数据管理](../07_data_network/README.md):数据持久化
|
||||
- [使用 Django](10.6_django.md):Python Web 框架实战
|
||||
- [Compose 模板文件](10.5_compose_file.md):配置详解
|
||||
- [数据管理](../08_data_network/README.md):数据持久化
|
||||
@@ -1,4 +1,4 @@
|
||||
## 实战 WordPress
|
||||
## 10.8 实战 WordPress
|
||||
|
||||
WordPress 是全球最流行的内容管理系统(CMS)。使用 Docker Compose 可以在几分钟内搭建一个包含数据库、Web 服务和持久化存储的生产级 WordPress 环境。
|
||||
|
||||
@@ -206,6 +206,6 @@ $ docker compose restart wordpress
|
||||
|
||||
### 延伸阅读
|
||||
|
||||
- [Compose 模板文件](9.5_compose_file.md):深入了解配置项
|
||||
- [数据卷](../07_data_network/data/volume.md):理解数据持久化
|
||||
- [Compose 模板文件](10.5_compose_file.md):深入了解配置项
|
||||
- [数据卷](../08_data_network/data/volume.md):理解数据持久化
|
||||
- [Docker Hub WordPress](https://hub.docker.com/_/wordpress):官方镜像文档
|
||||
@@ -1,3 +1,3 @@
|
||||
## 使用 compose 搭建 LNMP 环境
|
||||
## 10.9 使用 compose 搭建 LNMP 环境
|
||||
|
||||
本项目的维护者 [khs1994](https://github.com/khs1994) 的开源项目 [khs1994-docker/lnmp](https://github.com/khs1994-docker/lnmp) 使用 Docker Compose 搭建了一套 LNMP 环境,各位开发者可以参考该项目在 Docker 或 Kubernetes 中运行 LNMP。
|
||||
@@ -1,4 +1,4 @@
|
||||
# 第九章 Docker Compose
|
||||
# 第十章 Docker Compose
|
||||
|
||||
`Docker Compose` 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 第十章 运维管理
|
||||
# 第十一章 运维管理
|
||||
|
||||
本章将介绍 Docker 的运维管理,包括监控、日志与安全。
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
| IPC | 进程通信 | 隔离共享内存 |
|
||||
| UTS | 主机名 | 独立主机名 |
|
||||
|
||||
详见 [命名空间](../13_implementation/13.2_namespace.md) 章节。
|
||||
详见 [命名空间](../14_implementation/14.2_namespace.md) 章节。
|
||||
|
||||
### 2. 控制组(Cgroups)
|
||||
|
||||
@@ -393,6 +393,6 @@ $ cosign verify --key cosign.pub myimage:tag
|
||||
|
||||
## 延伸阅读
|
||||
|
||||
- [命名空间](../13_implementation/13.2_namespace.md):隔离机制详解
|
||||
- [控制组](../13_implementation/13.3_cgroups.md):资源限制详解
|
||||
- [最佳实践](../15_appendix/15.1_best_practices.md):Dockerfile 安全配置
|
||||
- [命名空间](../14_implementation/14.2_namespace.md):隔离机制详解
|
||||
- [控制组](../14_implementation/14.3_cgroups.md):资源限制详解
|
||||
- [最佳实践](../16_appendix/16.1_best_practices.md):Dockerfile 安全配置
|
||||
@@ -1,4 +1,4 @@
|
||||
# 第十一章 容器编排
|
||||
# 第十二章 容器编排
|
||||
|
||||
本章将介绍容器编排相关的技术与工具。
|
||||
|
||||
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user