Docker Compose与私有仓库部署
目录
第一节:docker 重启策略与状态码
一:Docker 重启策略
二:Docker 容器的常见退出状态码
第二节:Docker Compose 工具的应用
一:Docker Compose 工具简介
1: 什么是 Docker Compose
2: Docker Compose 的安装
3:文件格式以及编写注意事项
二:docker-compose 的基本用法
三:docke-compose案例演示
1:编写文件
2:修改nginx配置文件
3:执行文件,生成容器
4:列出当前运行的容器
第三节:Harbor私有仓库
一:Harbor 基础概念
1: 什么是 Harbor
2: Harbor 的优势
3: Harbor 的构成
二:部署 Harbor 私有仓库
资源列表
1:基础环境设置
2:Harbor部署安装
3:配置harbor
4:运行Harbor的安装脚本
三:Harbor客户端应用
1: 所有的 docker 主机设置 daemon.json 文件
2: 找一个 docker 主机,登录到我们的 Harbor 仓库
3: 然后尝试使用命令行 push 一个镜像到 Harbor 上
4: 测试 pull
5: 退出 harbor
第一节:docker 重启策略与状态码
一:Docker 重启策略
Docker 容器的重启策略是面向生产环境的一个启动策略,在开发过程中可以忽略该策略。Docker 容器的重启都是由 Docker 守护进程完成的,因此与守护进程息息相关。
Docker 容器的重启策略如下:
- no,默认策略,在容器退出时不重启容器
- on-failure,在容器非正常退出时(退出状态非 0),才会重启容器
- on-failure:3,指定启动的次数,在容器非正常退出时重启容器,最多重启 3 次
- always,在容器退出时总是重启容器
- unless-stopped,在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器
使用 --restart 指定重启策略
[root@bogon ~]# docker run -itd --restart=always --name host1 busybox sh
8348bf8334cfe8fda90dc3f15e0df39f7c514116f1faa0721f728ed41fb29425
二:Docker 容器的常见退出状态码
通过状态码我们可以大概判断出容器的情况。
状态码 | 说明 |
---|---|
0 | 正常退出 |
125 | Docker 守护进程本身错误 |
126 | 容器启动后,要执行的默认命令无法调用 |
127 | 容器启动后,要执行的默认命令不存在 |
其他 | 容器启动后正常执行的命令返回的状态码 |
第二节:Docker Compose 工具的应用
一:Docker Compose 工具简介
1: 什么是 Docker Compose
Docker Compose 的前身是 Fig,它是一个定义及运行多个 Docker 容器的工具。使用 Docker Compose 时,只需要在一个配置文件中定义多个 Docker 容器,然后使用一条命令启动这些容器。Docker Compose 会通过解析容器间的依赖关系按先后顺序启动所定义的容器。
2: Docker Compose 的安装
[root@localhost ~]# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-
(uname−s)−
(uname -m)" -o /usr/local/bin/docker-compose[root@localhost ~]# chmod +x /usr/local/bin/docker-compose
[root@localhost ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose[root@localhost ~]# docker-compose --version
3:文件格式以及编写注意事项
YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 XML 数据描述语言,语法比 XML 简单的很多。YAML 数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号([])括起来,hash 用花括号({})括起来
使用 YAML 时需要注意下面事项:
- 不支持制表符 tab 键缩进,需要使用空格缩进。
- 通常开头缩进两个空格。
- 字符后缩进一个空格,如冒号、逗号、横杆。
- 用 #号注释。
- 如果包含特殊字符,要使用单引号('')引起来。
- 布尔值 (true、false、yes、no、on、off) 必须用引号("")括起来,这样分析器会将它们解释为字符串。
二:docker-compose 的基本用法
1:docker-compose 的运行
docker-compose up #前台运行
docker-compose up -d #后台运行
docker-compose up --build -d #重新构建运行2:docker-compose 的关闭
docker-compose stop < 容器名称 > #关闭指定容器##docker-compose stop nginx
docker-compose stop #全部关闭3:docker-compose 的启动
docker-compose start < 容器名称 > #启动指定容器##docker-compose start nginx
docker-compose start # 全部启动4:docker-compose 的重启
docker-compose restart < 容器名称 > #重启指定容器##docker-compose restart nginx
docker-compose restart #全部重启5:删除
docker-compose down
三:docke-compose案例演示
1:编写文件
vi docke-compose.yaml
services:webapp:image: 'nginx'ports:- "80:80"volumes:- "/www/html:/www/html:rw"- "/opt/nginx/nginx.conf:/etc/nginx/nginx.conf"
2:修改nginx配置文件
将nginx的配置文件上传到docker主机上
mkdir /opt/nginx
vi /opt/nginx/nginx.conf
3:执行文件,生成容器
导入镜像:
拉取images
cd images/
bash imp_docker_img.shdocker-compose up -d
4:列出当前运行的容器
docker-compose ps
docker-compose kill webapp
docker-compose stop webapp
docker-compose start webapp
docker-compose down
docker-compose ps -a
第三节:Harbor私有仓库
一:Harbor 基础概念
1: 什么是 Harbor
Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。它以 Docker 公司开源的 Registry 为基础,提供了管理 UI、基于角色的访问控制(Role Based AccessControl)、AD/LDAP 集成、以及审计日志(Auditlogging)等企业用户需求的功能。通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全,以提升用户使用 Registry 构建和运行环境传输镜像的效率。
2: Harbor 的优势
Harbor 具有如下优势:
- 基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。
- 基于镜像的复制策略:镜像可以在多个 Harbor 实例之间进行复制(同步),适用于负载平衡、高可用性、多数据中心、混合云和多云场景。
- 支持 LDAP/AD:Harbor 与现有的企业 LDAP/AD 集成,用于用户认证和管理。
- 删除图像和收集垃圾:镜像可以被删除,也可以回收镜像占用的空间。
- 图形 UI:用户可以轻松浏览、搜索镜像仓库以及对项目进行管理。
- 审计:对存储库的所有操作都进行记录。
- RESTful API:用于大多数管理操作的 RESTful API,易于与外部系统集成。
3: Harbor 的构成
Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)五个组件:
(1) Proxy
Harbor 的 Registry、UI、Token 等服务通过一个前置的反向代理统一接收浏览器和 Docker 客户端的请求,并将请求转发给后端不同的服务。
(2) Registry
负责储存 Docker 镜像,并处理 Docker push/pull 命令。由于要对用户进行访问控制,即不同用户对 Docker image 有不同的读写权限,Registry 会指向一个 Token 服务,强制用户的每次 Docker pull/push 请求都要携带一个合法的 Token,Registry 会通过公钥对 Token 进行解密验证。
(3) Core service
这是 Harbor 的核心功能,主要提供以下服务:
- UI(Harbor-ui):提供图形化界面,帮助用户管理 Registry 上的镜像(image),并对用户进行授权。
- webhook:为了及时获取 Registry 上 image 状态变化的情况,在 Registry 上配置 webhook,把状态变化传递给 UI 模块。
(4) Token 服务:负责根据用户权限给每个 Docker push/pull 命令签发 Token。Docker 客户端向 Registry 服务发起的请求,如果不包含 Token,会被重定向,获得 Token 后再重新向 Registry 进行请求。
(5) Database(Harbor-db)
为 coreservices 提供数据库服务,负责储存用户权限、审计日志、Docker image 分组信息等数据。
(6) Log collector(Harbor-log)
为了帮助监控 Harbor 运行,负责收集其他组件的 log,供日后进行分析
二:部署 Harbor 私有仓库
资源列表
操作系统 | 主机名 | 配置 | IP |
---|---|---|---|
CentOS7.9 2009 | harbor | 2C4G | 192.168.10.106 |
CentOS7.9 2009 | client | 2C4G | 192.168.10.101 |
1:基础环境设置
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vi /etc/selinux/config
修改为:SELINUX=disabled
2:Harbor部署安装
#上传软件包
harbor-offline-installer-v2.4.3.tgz
#解压软件包
tar zxvf harbor-offline-installer-v2.4.3.tgz
#解压后的目录文件
cd harbor
ls
3:配置harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
#修改为当前所在节点的IP
hostname:192.168.10.201
#登录界面的密码
harbor_admin_password:Harbor12345
#将https相关的配置给注释掉
4:运行Harbor的安装脚本
./install.sh默认用户:admin
默认密码:Harbor12345
三:Harbor客户端应用
1: 所有的 docker 主机设置 daemon.json 文件
回到命令行上测试一下 push 和 pull。由于我们自己搭建的私有仓库默认是不受 Docker 信任的,所以需要先在配置文件中增加如下配置项让 Docker 信任该 registry:
[root@localhost ~]# vim /etc/docker/daemon.json{
"insecure-registries": ["192.168.10.106"]
}[root@m1 ~]# systemctl daemon-reload
[root@m1 ~]# systemctl restart docker
2: 找一个 docker 主机,登录到我们的 Harbor 仓库
[root@localhost ~]# docker login 192.168.10.106
Username: zhangsan
Password:
Login Succeeded
3: 然后尝试使用命令行 push 一个镜像到 Harbor 上
[root@localhost ~]# docker pull cirros
[root@localhost ~]# docker tag cirros 192.168.10.106/kubernetes/cirros:v1
[root@localhost ~]# docker push 192.168.10.106/kubernetes/cirros:v1
The push refers to repository [192.168.10.106/kubernetes/nginx]
7ab428981537: Pushed
828b1d779f83: Pushed
d626a8ad97a1: Pushed
1.13.12:
digest: sha256:e4f04a747c510f40b37b6b7dc2516241ffa8bde5a442bdde3d372c9519c84d90 size: 948
4: 测试 pull
到另一台机器上用同样方式配置 daemon.json 并 docker login 到 Harbor,然后使用 docker pull 从 Harbor 上拉取镜像:
[root@localhost ~]# docker pull 192.168.10.106/kubernetes/cirros:v1
1.13.12: Pulling from kubernetes/nginx
f2aa67a397c4: Pull complete
3c091c23e29d: Pull complete
4a9999b86836: Pull complete
Digest: sha256:e4f04a747c510f40b37b6b7dc2516241ffa8bde5a442bdde3d372c9519c84d90
Status: Downloaded newer image for 192.168.243.138/kubernetes/nginx:1.13.12
192.168.243.138/kubernetes/nginx:1.13.12
5: 退出 harbor
[root@localhost ~]# docker logout 192.168.10.106