DevOps - Docker
我们看到,DevOps 和 Docker 在当今的软件开发和部署中非常重要。它们有助于简化流程并改善团队合作。在本章中,我们将介绍 Docker 的基本思想。我们还将检查其架构以及它在 DevOps 生命周期中的工作方式。
首先,我们将学习如何在 DevOps 环境中设置 Docker。然后,我们将管理映像和容器。之后,我们将查看网络设置。最后,我们将了解如何将 Docker 与 CI/CD 管道连接起来。这将帮助我们更有效地交付软件。
了解 Docker 架构
在 Docker 架构中,我们有许多重要的部分协同工作以帮助我们使用容器化。
Docker 架构的关键组件如下所示 −
- Docker 守护进程 (dockerd) − 这是负责 Docker 容器、镜像、网络和卷的主要服务。它监听 API 请求并管理容器任务。
- Docker 客户端 (docker) − 这是我们用来与 Docker 守护进程通信的命令行工具。我们运行 docker run、docker build 和 docker ps 等命令
- Docker 镜像 −这些是我们用来创建容器的只读模板。我们从 Dockerfile 构建它们。Dockerfile 告诉我们如何制作镜像。
- Docker 容器 − 这些是 Docker 镜像的运行版本。它们让我们可以在单独的空间中运行应用程序。我们使用命令 docker run 从镜像创建它们。
- Docker 注册表 − 这是一个存储和共享 Docker 镜像的地方,就像 Docker Hub 一样。它允许我们推送和拉取图像。
在 DevOps 环境中设置 Docker
为了在 DevOps 工作中很好地使用 Docker,我们可以按照这些简单的步骤进行安装和设置。
步骤 1. 安装 Docker
对于 Ubuntu:使用以下命令在 Ubuntu 上安装 Docker −
sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt update sudo apt install docker-ce
适用于 Windows / Mac −我们可以从官方网站下载 Docker Desktop 应用程序。
第 2 步。启动 Docker 服务
我们需要使用这些命令启动 Docker 服务 −
sudo systemctl start docker sudo systemctl enable docker
第 3 步。将用户添加到 Docker 组
为了不使用 sudo 执行 Docker 命令,我们可以将用户添加到 Docker 组 −
sudo usermod -aG docker $USER
不要忘记注销然后重新登录以进行更改工作。
第 4 步。验证安装
我们可以使用这些命令检查 Docker 是否正常工作 −
docker --version docker run hello-world
第 5 步。配置 Docker Daemon
我们可以编辑 /etc/docker/daemon.json 文件进行一些自定义设置 −
{
"storage-driver": "overlay2",
"log-level": "error"
}
之后,我们需要重新启动 Docker 服务 −
sudo systemctl restart docker
现在我们已经准备好 Docker,我们可以开始容器化我们的应用程序并将它们添加到我们的 CI/CD 管道中。
Docker 镜像和容器:最佳实践
如果遵循一些最佳实践,我们可以在 DevOps 环境中很好地使用 Docker 镜像和容器。
Docker 镜像
最小化镜像大小 − 我们应该使用像 alpine 这样的小型基础镜像。这有助于使我们的镜像更小,下载速度更快。
层管理 − 我们可以在一个 RUN 语句中组合命令。这将帮助我们减少层数。例如−
RUN apt-get update && apt-get install -y \
package1 \
package2 \
&& rm -rf /var/lib/apt/lists/*
使用 .dockerignore − 就像 .gitignore 一样,我们可以列出要从构建上下文中排除的文件。这也有助于缩小我们的镜像大小。
标记 − 让我们对标记使用语义版本控制。例如,我们可以使用 myapp:1.0.0。我们应该小心使用最新版本。
Docker 容器
资源限制 − 我们需要设置 CPU 和内存的限制。这有助于阻止我们的容器使用过多的资源 −
docker run --memory="256m" --cpus="1.0" myapp
环境变量 − 我们可以使用环境变量进行配置。这样,我们就不会在代码中硬编码敏感信息。
定期更新 − 我们应该保持镜像更新。这有助于修复漏洞。我们需要定期扫描镜像以查找安全问题。
通过遵循这些做法,我们可以提高 Docker 镜像和容器的性能、安全性和维护性。
Docker 网络:概念和配置
我们可以使用 Docker 网络让我们的容器相互通信并与外部系统通信。了解不同的网络模式对于管理好我们的容器非常重要。Docker 为我们提供了几种网络选项 −
桥接网络
这是我们容器的默认网络。它允许容器在同一主机上相互通信
docker network create my_bridge_network docker run -d --name container1 --network my_bridge_network nginx docker run -d --name container2 --network my_bridge_network nginx
主机网络
主机网络跳过 Docker 网络堆栈。它将容器直接连接到主机网络。
docker run --network host nginx
覆盖网络
覆盖网络允许不同 Docker 主机上的容器进行通信。当我们使用 Swarm 模式时,它很有用。
docker network create -d overlay my_overlay_network
Macvlan 网络
这使我们的容器拥有自己的 MAC 地址。它们看起来像网络上的真实设备。
docker network create -d macvlan \ --subnet=192.168.1.0/24 \ --gateway=192.168.1.1 \ -o parent=eth0 my_macvlan_network
当我们理解了这些想法和设置后,我们可以在 DevOps 环境中更好地管理 Docker 容器。
使用 Docker Compose 管理 Docker 容器
我们使用 Docker Compose 来帮助管理多容器 Docker 应用程序。它使仅使用一个 YAML 文件定义和运行这些应用程序变得容易。这样,编排变得更简单。
主要功能
- 服务定义 − 我们在 docker-compose.yml 文件中定义服务、网络和卷。
- 环境配置 − 我们可以轻松管理容器的环境变量。
- 扩展 − 我们可以使用简单的命令来扩展或缩小服务。
docker-compose.yml 的基本结构 −
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
常用命令
启动服务 −
docker-compose up
停止服务 −
docker-compose down
扩展服务 −
docker-compose up --scale web=3
使用 Docker Compose 可帮助我们简化应用程序的开发和部署。它使管理多容器设置的依赖项和配置更加容易。
与 Docker 的 CI / CD 集成
通过将 Docker 添加到我们的持续集成和持续部署 (CI/CD) 管道中,我们可以更好地进行开发。 Docker 帮助我们创建一致的构建并使应用程序的部署更加容易。
以下是关键组件 −
Dockerfile − 此文件告诉我们如何构建 Docker 映像。
FROM node:14 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . CMD ["npm", "start"]
CI / CD 工具 − 我们可以将 Jenkins、GitLab CI、CircleCI 和 GitHub Actions 等流行工具与 Docker 结合使用。
管道示例
构建 − 我们从 Dockerfile 创建 Docker 映像。
docker build -t myapp:latest
测试 − 我们在容器内运行测试。
docker run --rm myapp:latest npm test
部署 −我们将镜像推送到注册表并将其部署到生产环境中。
docker push myapp:latest
结论
在本章中,我们了解了 DevOps 框架中 Docker 的基础知识。我们讨论了它的结构以及如何设置它。我们还分享了使用镜像和容器的最佳方法。
网络设置是我们讨论的另一个主题。最后,我们讨论了使用 Docker Compose 管理 Docker。我们还展示了如何将 Docker 添加到 CI/CD 管道中。

