入职了新公司,电脑限制了公网访问,为了补上打卡进度,后面的打卡内容纯手敲文本,没有图片,不便之处请谅解,如果错误,请帮忙指正,谢谢。
11 使用docker-compose
使用一个工具,得先了解这个工具是什么,为什么要用它。
11.1 docker-compose
Docker Compose 是一个用于定义和运行多容器 Docker(容器有多种,本文统一使用docker) 应用的工具。也可以说它是一个微型的容器编排工具,配置文件使用yaml格式,用来管理、调度和协调大量容器的部署和运行。
容器为什么要编排呢?用shell脚本直接批量docker run不就完成了吗?
是的,也可以那样弄,但是不方便,shell脚本有很多弊端,如果有能力可以尝试一下ansible, 非常强大有趣的一个工具,那是另一个课程。
聊回docker-compose, 通过使用 Docker Compose,用户可以使用一个 YAML 文件来配置应用所需的所有服务,并通过一个命令来启动和管理这些服务。Docker Compose 主要适用于开发、测试和小规模的生产环境。如果规模再大就不适用了,得用真正的容器编排工具,容器编排工具包括Kubernetes、Docker Swarm、Apache Mesos等。
11.2 为什么要使用docker-compose
使用 Docker Compose 有以下几个主要原因:
1)简化多容器应用的管理
Docker Compose 允许你通过一个简单的 YAML 文件来定义和管理多容器应用。你可以在一个文件中配置所有服务,想想一个yaml文件能干几十个dockerfile的活,工作量大大降低了,并通过一个命令来启动或停止这些服务。这大大简化了多容器应用的管理。
2) 提高开发效率
Docker Compose 可以帮助开发人员快速搭建与生产环境一致的开发环境。通过 docker-compose.yml 文件,开发人员可以轻松地启动所需的所有服务,而不必手动配置每个容器。这有助于减少环境配置问题,提高开发效率。
3) 一致性和可移植性
使用 Docker Compose,可以确保在不同环境(如开发、测试和生产)中的配置一致性。只需要一个 docker-compose.yml 文件,就可以在任何支持 Docker 的平台上运行相同的应用。这提高了应用的可移植性。
4) 支持复杂应用场景
Docker Compose 支持定义复杂的多容器应用,包括服务之间的依赖关系、网络配置、卷挂载等。你可以轻松地定义和管理微服务架构中的各个组件及其相互关系。
5) 自动化部署和扩展
Docker Compose 支持自动化部署和扩展。你可以使docker-compose up 命令来自动部署所有服务,并通过修改 docker-compose.yml 文件来轻松扩展或更新服务。
6) 数据持久化和共享
Docker Compose 支持卷(Volume)的定义和管理,方便数据持久化和共享。你可以在 docker-compose.yml 文件中定义卷,并将其挂载到不同的容器中,以便实现数据持久化和共享。
7) 易于调试和监控
Docker Compose 提供了丰富的命令行工具,方便调试和监控。例如,你可以使用 docker-compose logs 查看容器日志,使用docker-compose ps 查看运行中的容器状态,使用 docker-compose exec 在运行中的容器中执行命令等。
总结:使用 Docker Compose 可以显著提高多容器应用的管理效率、开发效率以及环境的一致性和可移植性。它是一个非常强大且灵活的工具,特别适合用于开发、测试以及小规模生产环境。
示例:快速启动多容器应用
假设你有一个简单的 Web 应用,需要 Nginx 和 MySQL 两个服务,你可以通过如下的 docker-compose.yml(不保证能用,复制过程中可能缩进有误) 文件快速启动这个应用:
version: 'v0.1'
services:web:image: nginx:latestports:- "80:80"database:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: 123456
然后,只需运行以下命令即可启动整个应用:
docker-compose up
12 搭建harbor私有镜像仓库
Harbor 是一个用于存储和分发 Docker 镜像的企业级私有镜像仓库。它提供了用户管理、访问控制、安全扫描等功能,适合企业级应用的需求。
容器不是有一个Docker Registry,为什么要用harbor?
Docker Registry 是 Docker 官方提供的一个基础容器镜像仓库解决方案,它功能简单,适合小规模、低复杂度的场景。然而,在企业级应用中,通常需要更强大的功能和更高的安全性,这就是为什么要使用 Harbor 的原因。
那docker-compose也是小规模的,应该和registry对等,怎么学完compose,就来学企业级harbor了?
docker registry 仅有基础镜像存储和分发功能,而harbor有用户管理和访问控制、镜像签名和验证、镜像扫描(安全漏洞)、Web 管理界面、审计日志、多租户支持(项目隔离)、LDAP/AD 集成、镜像复制(跨数据中心)等功能,两者差距大了去了。
在掌握了基本的容器编排之后,学习 Harbor 可以帮助你了解如何在企业级环境中进行镜像管理,这是一种更高级、更复杂的需求。在进入生产环境时,你需要考虑镜像的安全性、可控性和高效分发,这时候就需要使用像 Harbor 这样的企业级解决方案。
搭建 Harbor 私有镜像仓库的详细步骤:(后补)
13 将镜像推送到私有仓库harbor
将镜像推送到私有仓库 Harbor 需要以下几个步骤:
前提条件
确保已经安装并配置好 Harbor。
确保 Docker 客户端能够访问 Harbor 服务器。
确保已经在 Harbor 中创建了一个项目。
步骤一:登录到 Harbor
首先,使用 Docker CLI 登录到 Harbor。假设你的 Harbor 服务器的地址是 harbor.xxx.com。
复制代码复制代码
docker login harbor.xxx.com
系统会提示输入用户名和密码。输入你在 Harbor 上的用户名和密码即可。
步骤二:打标签(Tag)镜像
假设你有一个本地镜像 my-image:latest,需要将其推送到 Harbor 的 myproject 项目中。在推送之前,需要给镜像打上目标仓库的标签。
复制代码复制代码
docker tag my-image:latest harbor.xxx.com/myproject/my-image:latest
这里的格式为:
复制代码复制代码
docker tag [源镜像]:[标签] [Harbor地址]/[项目名]/[目标镜像名]:[标签]
步骤三:推送镜像到 Harbor
使用 docker push 命令将打好标签的镜像推送到 Harbor 仓库。
复制代码复制代码
docker push harbor.xxx.com/myproject/my-image:latest
推送成功后,你可以在 Harbor 的 Web 界面上看到刚刚上传的镜像。
示例完整流程
假设你有一个本地镜像 my-app:1.0,需要将其推送到 harbor.xxx.com 的 dev-project 项目中,完整流程如下:
登录到 Harbor:
docker login harbor.xxx.com
打标签:
docker tag my-app:1.0 harbor.xxx.com/dev-project/my-app:1.0
推送镜像:
docker push harbor.xxx.com/dev-project/my-app:1.0
注意事项
HTTPS 配置:
如果你的 Harbor 使用 HTTPS 并且是自签名证书,你可能需要在 Docker Daemon 配置中添加信任该证书。
编辑或创建 /etc/docker/daemon.json 文件,添加以下内容:
{"insecure-registries": ["harbor.xxx.com"]
}
然后重启 Docker 服务:
sudo systemctl restart docker
访问控制:
确保你有权限向指定项目推送镜像。在 Harbor 的 Web 界面上,你可以设置用户和项目的访问权限。
命名规范:
遵循命名规范,确保项目名称、镜像名称和标签都符合约定,以便于管理和查找。
通过以上步骤,你可以将本地 Docker 镜像成功推送到私有仓库 Harbor 中,从而实现企业级的容器镜像管理。
(完)