diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 80f6885..68724f4 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -5,6 +5,10 @@ on: name: CI +defaults: + run: + shell: bash --noprofile --norc -exo pipefail {0} + jobs: build: name: Build @@ -39,7 +43,10 @@ jobs: docker run -d --rm -p 4000:80 dockerpracticesig/docker_practice sleep 5 + + echo "::group::Test" curl 127.0.0.1:4000 + echo "::endgroup::" echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin docker push dockerpracticesig/docker_practice @@ -139,9 +146,13 @@ jobs: docker push dockerpracticesig/docker_practice:vuepress - docker run -it --rm -d -p 4000:80 dockerpracticesig/docker_practice:vuepress + docker run -it --rm -d -p 4001:80 dockerpracticesig/docker_practice:vuepress - curl 127.0.0.1:4000 + sleep 5 + + echo "::group::Test" + curl 127.0.0.1:4001 + echo "::endgroup::" env: DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}} DOCKER_USERNAME: ${{secrets.DOCKER_USERNAME}} diff --git a/advanced_network/access_control.md b/advanced_network/access_control.md index c382b5d..c99fb77 100644 --- a/advanced_network/access_control.md +++ b/advanced_network/access_control.md @@ -1,4 +1,5 @@ # 容器访问控制 + 容器的访问控制,主要通过 Linux 上的 `iptables` 防火墙来进行管理和实现。`iptables` 是 Linux 上默认的防火墙软件,在大部分发行版中都自带。 ## 容器访问外部网络 diff --git a/advanced_network/example.md b/advanced_network/example.md index f7ca843..e8bf802 100644 --- a/advanced_network/example.md +++ b/advanced_network/example.md @@ -1,4 +1,5 @@ # 工具和示例 + 在介绍自定义网络拓扑之前,你可能会对一些外部工具和例子感兴趣: ## pipework diff --git a/basic_concept/README.md b/basic_concept/README.md index dec8e47..82c417e 100644 --- a/basic_concept/README.md +++ b/basic_concept/README.md @@ -1,4 +1,5 @@ # 基本概念 + Docker 包括三个基本概念 * 镜像(`Image`) * 容器(`Container`) diff --git a/cases/os/debian.md b/cases/os/debian.md index 46b8e95..df640c1 100644 --- a/cases/os/debian.md +++ b/cases/os/debian.md @@ -1,4 +1,5 @@ # Debian/Ubuntu + `Debian` 和 `Ubuntu` 都是目前较为流行的 **Debian 系** 的服务器操作系统,十分适合研发场景。`Docker Hub` 上提供了官方镜像,国内各大容器云服务也基本都提供了相应的支持。 ## Debian 系统简介 diff --git a/container/README.md b/container/README.md index 5d571a9..a7bfeff 100644 --- a/container/README.md +++ b/container/README.md @@ -1,4 +1,5 @@ # 操作 Docker 容器 + 容器是 Docker 又一核心概念。 简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。 diff --git a/image/dockerfile/add.md b/image/dockerfile/add.md index 5d9f18f..4970b10 100644 --- a/image/dockerfile/add.md +++ b/image/dockerfile/add.md @@ -1,4 +1,4 @@ -### ADD 更高级的复制文件 +# ADD 更高级的复制文件 `ADD` 指令和 `COPY` 的格式和性质基本一致。但是在 `COPY` 基础上增加了一些功能。 diff --git a/image/dockerfile/arg.md b/image/dockerfile/arg.md index d4b2708..8f5604b 100644 --- a/image/dockerfile/arg.md +++ b/image/dockerfile/arg.md @@ -1,4 +1,4 @@ -### ARG 构建参数 +# ARG 构建参数 格式:`ARG <参数名>[=<默认值>]` diff --git a/image/dockerfile/cmd.md b/image/dockerfile/cmd.md index 9877c00..b4354ff 100644 --- a/image/dockerfile/cmd.md +++ b/image/dockerfile/cmd.md @@ -1,4 +1,4 @@ -### CMD 容器启动命令 +# CMD 容器启动命令 `CMD` 指令的格式和 `RUN` 相似,也是两种格式: diff --git a/image/dockerfile/copy.md b/image/dockerfile/copy.md index 0d48233..1f03fe9 100644 --- a/image/dockerfile/copy.md +++ b/image/dockerfile/copy.md @@ -1,4 +1,4 @@ -### COPY 复制文件 +# COPY 复制文件 格式: diff --git a/image/dockerfile/entrypoint.md b/image/dockerfile/entrypoint.md index bd13ed8..d7b6e06 100644 --- a/image/dockerfile/entrypoint.md +++ b/image/dockerfile/entrypoint.md @@ -1,4 +1,4 @@ -### ENTRYPOINT 入口点 +# ENTRYPOINT 入口点 `ENTRYPOINT` 的格式和 `RUN` 指令格式一样,分为 `exec` 格式和 `shell` 格式。 diff --git a/image/dockerfile/env.md b/image/dockerfile/env.md index eba9eae..ca39362 100644 --- a/image/dockerfile/env.md +++ b/image/dockerfile/env.md @@ -1,4 +1,4 @@ -### ENV 设置环境变量 +# ENV 设置环境变量 格式有两种: diff --git a/image/dockerfile/expose.md b/image/dockerfile/expose.md index eb707b0..a2b00b9 100644 --- a/image/dockerfile/expose.md +++ b/image/dockerfile/expose.md @@ -1,4 +1,4 @@ -### EXPOSE 声明端口 +# EXPOSE 声明端口 格式为 `EXPOSE <端口1> [<端口2>...]`。 diff --git a/image/dockerfile/healthcheck.md b/image/dockerfile/healthcheck.md index 78a83a6..2684347 100644 --- a/image/dockerfile/healthcheck.md +++ b/image/dockerfile/healthcheck.md @@ -1,4 +1,4 @@ -### HEALTHCHECK 健康检查 +# HEALTHCHECK 健康检查 格式: diff --git a/image/dockerfile/onbuild.md b/image/dockerfile/onbuild.md index dbe1384..50aa803 100644 --- a/image/dockerfile/onbuild.md +++ b/image/dockerfile/onbuild.md @@ -1,4 +1,4 @@ -### ONBUILD 为他人做嫁衣裳 +# ONBUILD 为他人做嫁衣裳 格式:`ONBUILD <其它指令>`。 diff --git a/image/dockerfile/references.md b/image/dockerfile/references.md index f726792..96969ea 100644 --- a/image/dockerfile/references.md +++ b/image/dockerfile/references.md @@ -1,4 +1,4 @@ -### 参考文档 +# 参考文档 * `Dockerfie` 官方文档:https://docs.docker.com/engine/reference/builder/ diff --git a/image/dockerfile/user.md b/image/dockerfile/user.md index 5c60d24..272c4f5 100644 --- a/image/dockerfile/user.md +++ b/image/dockerfile/user.md @@ -1,4 +1,4 @@ -### USER 指定当前用户 +# USER 指定当前用户 格式:`USER <用户名>[:<用户组>]` diff --git a/image/dockerfile/volume.md b/image/dockerfile/volume.md index d27172f..f534d3a 100644 --- a/image/dockerfile/volume.md +++ b/image/dockerfile/volume.md @@ -1,4 +1,4 @@ -### VOLUME 定义匿名卷 +# VOLUME 定义匿名卷 格式为: diff --git a/image/dockerfile/workdir.md b/image/dockerfile/workdir.md index 79ad395..3395403 100644 --- a/image/dockerfile/workdir.md +++ b/image/dockerfile/workdir.md @@ -1,4 +1,4 @@ -### WORKDIR 指定工作目录 +# WORKDIR 指定工作目录 格式为 `WORKDIR <工作目录路径>`。 diff --git a/introduction/README.md b/introduction/README.md index 2907907..61aec6a 100644 --- a/introduction/README.md +++ b/introduction/README.md @@ -1,4 +1,5 @@ # 简介 + 本章将带领你进入 **Docker** 的世界。 什么是 **Docker**? diff --git a/security/README.md b/security/README.md index fab0303..c183e6a 100644 --- a/security/README.md +++ b/security/README.md @@ -1,4 +1,5 @@ # 安全 + 评估 Docker 的安全性时,主要考虑三个方面: * 由内核的命名空间和控制组机制提供的容器内在安全 diff --git a/security/control_group.md b/security/control_group.md index cd2bd39..338f5f9 100644 --- a/security/control_group.md +++ b/security/control_group.md @@ -1,4 +1,5 @@ # 控制组 + 控制组是 Linux 容器机制的另外一个关键组件,负责实现资源的审计和限制。 它提供了很多有用的特性;以及确保各个容器可以公平地分享主机的内存、CPU、磁盘 IO 等资源;当然,更重要的是,控制组确保了当容器内的资源使用产生压力时不会连累主机系统。 diff --git a/security/daemon_sec.md b/security/daemon_sec.md index e43359c..81c8627 100644 --- a/security/daemon_sec.md +++ b/security/daemon_sec.md @@ -1,4 +1,5 @@ # Docker服务端的防护 + 运行一个容器或应用程序的核心是通过 Docker 服务端。Docker 服务的运行目前需要 root 权限,因此其安全性十分关键。 首先,确保只有可信的用户才可以访问 Docker 服务。Docker 允许用户在主机和容器间共享文件夹,同时不需要限制容器的访问权限,这就容易让容器突破资源限制。例如,恶意用户启动容器的时候将主机的根目录`/`映射到容器的 `/host` 目录中,那么容器理论上就可以对主机的文件系统进行任意修改了。这听起来很疯狂?但是事实上几乎所有虚拟化系统都允许类似的资源共享,而没法禁止用户共享主机根文件系统到虚拟机系统。 diff --git a/security/kernel_ns.md b/security/kernel_ns.md index 18e070b..b14e4c2 100644 --- a/security/kernel_ns.md +++ b/security/kernel_ns.md @@ -1,4 +1,5 @@ # 内核命名空间 + Docker 容器和 LXC 容器很相似,所提供的安全特性也差不多。当用 `docker run` 启动一个容器时,在后台 Docker 为容器创建了一个独立的命名空间和控制组集合。 命名空间提供了最基础也是最直接的隔离,在容器中运行的进程不会被运行在主机上的进程和其它容器发现和作用。 diff --git a/security/other_feature.md b/security/other_feature.md index 95cd6a7..2486cfe 100644 --- a/security/other_feature.md +++ b/security/other_feature.md @@ -1,4 +1,5 @@ # 其它安全特性 + 除了能力机制之外,还可以利用一些现有的安全机制来增强使用 Docker 的安全性,例如 TOMOYO, AppArmor, Seccomp, SELinux, GRSEC 等。 Docker 当前默认只启用了能力机制。用户可以采用多种方案来加强 Docker 主机的安全,例如: diff --git a/security/summary.md b/security/summary.md index 3ec8467..ac78992 100644 --- a/security/summary.md +++ b/security/summary.md @@ -1,4 +1,5 @@ # 总结 + 总体来看,Docker 容器还是十分安全的,特别是在容器内不使用 root 权限来运行进程的话。 另外,用户可以使用现有工具,比如 [Apparmor](https://docs.docker.com/engine/security/apparmor/), [Seccomp](https://docs.docker.com/engine/security/seccomp/), SELinux, GRSEC 来增强安全性;甚至自己在内核中实现更复杂的安全机制。 diff --git a/underly/namespace.md b/underly/namespace.md index ec66db2..ef81aae 100644 --- a/underly/namespace.md +++ b/underly/namespace.md @@ -1,4 +1,5 @@ # 命名空间 + 命名空间是 Linux 内核一个强大的特性。每个容器都有自己单独的命名空间,运行在其中的应用都像是在独立的操作系统中运行一样。命名空间保证了容器之间彼此互不影响。 ## pid 命名空间