云计算实训39——部署Harbor、部署Docker-compose、YAML文件
一、Harbor部署
1.验证python版本
[root@docker2 ~]#python --version
2.安装pip
[root@docker2 ~]# yum -y install python2-pip
#由于版本过低,需要对其进行一个升级
#更新pip
[root@docker2 ~]#pip install --upgrade pip
3.指定版本号
[root@docker2 ~]# pip install --upgrade pip==20.3 -i https://mirrors.aliyun.com/pypi/simple
#查看pip版本
[root@docker2 ~]# pip list
Package Version
pip 20.3
4.安装docker-compose
[root@docker2 ~]# pip install docker-compose --ignore-installed requests -i https://mirrors.aliyun.com/pypi/simple
#查看docker-compose版本
[root@docker2 ~]# pip list
Package Version
docker-compose 1.26.2
5.安装docker
#docker.sh脚本的具体内容如下:
#---------------------------------------------------------------------------------------
# 创建一个配置文件,确保在系统启动时加载 overlay 和 br_netfilter 内核模块
cat << EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
# 立即加载 overlay 和 br_netfilter 内核模块
modprobe overlay
modprobe br_netfilter
# 创建一个 sysctl 配置文件,配置 Kubernetes 网络设置
cat << EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1 # 允许对桥接接口的iptables过滤
net.bridge.bridge-nf-call-ip6tables = 1 # 允许对桥接接口的ip6tables过滤
net.ipv4.ip_forward = 1 # 启用 IPv4 转发,以支持 pod 网络
EOF
# 重新加载 sysctl 配置,应用新的网络设置
sysctl --system
# 安装 yum-utils、设备映射持久数据和 lvm2,这些是后续安装 Docker 所需的工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加阿里云 Docker 仓库,以便于通过 yum 安装 Docker
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 Docker 及相关组件,包括 Docker CLI、containerd、Buildx 和 Compose 插件
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
#---------------------------------------------------------------------------------------
#拖拽安装docker的脚本
[root@docker2 ~]# rz -E
rz waiting to receive.
#查看
[root@docker2 ~]# ls
anaconda-ks.cfg docker.sh
#让docker.sh脚本生效
[root@docker2 ~]# source docker.sh
#上传daemon.json文件
[root@docker2 harbor]# scp root@192.168.1.32:/etc/docker/daemon.json /etc/docker/
#编辑daemon.json文件
[root@docker2 harbor]# vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
],
"hosts":[
"tcp://0.0.0.0:2375",
"unix:///var/run/docker.sock"
],
"insecure-registries": [
"http://192.168.1.24"
]
}
#编辑docker.service文件
[root@docker2 harbor]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd
#启动docker
[root@docker2 harbor]# systemctl start docker
Warning: docker.service changed on disk. Run 'systemctl daemon-reload' to reload units.
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
#重新加载daemon
[root@docker2 harbor]# systemctl daemon-reload
#再次启动docker
[root@docker2 harbor]# systemctl start docker
6.安装harbor
#下载harbor包
[root@docker2 ~]# rz -E
rz waiting to receive.
#查看
[root@docker2 ~]# ls
anaconda-ks.cfg docker.sh harbor-offline-installer-v2.11.1.tgz
#查看docker版本
[root@docker2 ~]# docker --version
Docker version 26.1.4, build 5650f9b
#解压harbor
[root@docker2 ~]# tar -zxvf harbor-offline-installer-v2.11.1.tgz
#查看
[root@docker2 ~]# ls
anaconda-ks.cfg docker.sh harbor harbor-offline-installer-v2.11.1.tgz
#切入harbor目录
[root@docker2 ~]# cd harbor/
#查看
[root@docker2 harbor]# ls
common.sh harbor.v2.11.1.tar.gz harbor.yml.tmpl install.sh LICENSE prepare
7.复制harbor.yml文件
[root@docker2 harbor]# cp harbor.yml.tmpl harbor.yml
8.编辑harbor.yml文件
[root@docker2 harbor]# vim harbor.yml
9.查看端口状态
[root@docker2 harbor]# netstat -lnput | grep 80[root@docker2 harbor]# netstat -lnput | grep 5000
10.执行
#执行prepare
[root@docker2 harbor]# ./prepare
#执行install.sh
[root@docker2 harbor]# ./install.sh
11.上传镜像
[root@docker2 harbor]# docker pull centos
12.打标签
[root@docker2 harbor]# docker tag centos:latest 192.168.1.24/library/ddcentos:v0
13.下载镜像
[root@docker2 harbor]# docker push 192.168.1.24/library/ddcentos:v0
14.登录docker镜像仓库
[root@docker2 harbor]# docker login http://192.168.1.24
Username: admin
Password:
Error response from daemon: Get "http://192.168.1.24/v2/": dial tcp 192.168.1.24:80: connect: connection refused
15.浏览器访问:
16.开启容器
#查看所有容器
[root@docker2 harbor]# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99c3f62458f4 goharbor/nginx-photon:v2.11.1 "nginx -g 'daemon of…" 32 minutes ago Up 3 seconds (health: starting) 0.0.0.0:80->8080/tcp, :::80->8080/tcp nginx
dd3ef1a8cdfc goharbor/harbor-jobservice:v2.11.1 "/harbor/entrypoint.…" 32 minutes ago Exited (128) 3 minutes ago harbor-jobservice
8999a3b7136d goharbor/harbor-core:v2.11.1 "/harbor/entrypoint.…" 32 minutes ago Exited (128) 2 minutes ago harbor-core
444ce3ab8f55 goharbor/harbor-portal:v2.11.1 "nginx -g 'daemon of…" 32 minutes ago Exited (128) 2 minutes ago harbor-portal
8a8cd273a779 goharbor/registry-photon:v2.11.1 "/home/harbor/entryp…" 32 minutes ago Exited (128) 2 minutes ago registry
dbf40ab53516 goharbor/redis-photon:v2.11.1 "redis-server /etc/r…" 32 minutes ago Up 2 minutes (healthy) redis
59f6ebcbaa18 goharbor/harbor-registryctl:v2.11.1 "/home/harbor/start.…" 32 minutes ago Exited (128) 2 minutes ago registryctl
a7b8abe38923 goharbor/harbor-db:v2.11.1 "/docker-entrypoint.…" 32 minutes ago Exited (128) 2 minutes ago harbor-db
9cc010ff2807 goharbor/harbor-log:v2.11.1 "/bin/sh -c /usr/loc…" 32 minutes ago Up 2 minutes (healthy) 127.0.0.1:1514->10514/tcp harbor-log
#开启关闭的容器
[root@docker2 harbor]# docker start harbor-jobservice harbor-core harbor-portal registry registryctl harbor-db
harbor-jobservice
harbor-core
harbor-portal
registry
registryctl
harbor-db
17.访问验证
#再次登录docker镜像仓库
[root@docker2 harbor]# docker login http://192.168.1.24
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
#再次下载镜像
[root@docker2 harbor]# docker push 192.168.1.24/library/ddcentos:v0
The push refers to repository [192.168.1.24/library/ddcentos]
74ddd0ec08fa: Pushed
v0: digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc size: 529
#浏览器访问验证:
能够看到我们所创建的镜像---ddcentos
18.共享镜像
切到docker机器:
#启动docker
[root@docker ~]# systemctl start docker
#编辑daemon.json文件
[root@docker ~]# vim /etc/docker/daemon.json
#重新启动docker
[root@docker ~]# systemctl restart docker
#到访问页面复制拉取命令
#使用复制的连接,添加同时共享的镜像
[root@docker ~]# docker pull 192.168.1.24/library/ddcentos@sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc
192.168.1.24/library/ddcentos@sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc: Pulling from library/ddcentos
Digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc
Status: Downloaded newer image for 192.168.1.24/library/ddcentos@sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc
192.168.1.24/library/ddcentos@sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc
#查看镜像
#可以看到被共享的镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos httpd0 db3cae3b5002 2 days ago 280MB
192.168.1.32:5000/centos_nginx v0 1c2a0901c77a 3 days ago 368MB
centos nginx 1c2a0901c77a 3 days ago 368MB
centos httpd e9a1ee725b43 6 days ago 311MB
centos yum 82ca12d9b058 6 days ago 261MB
registry latest cfb4d9904335 11 months ago 25.4MB
centos latest 5d0da3dc9764 2 years ago 231MB
192.168.1.24/library/ddcentos <none> 5d0da3dc9764 2 years ago 231MB
二、部署Docker-compose
1.Docker-compose 核⼼概念
docker compose 是 docker 官⽅的开源项⽬,负责实现对 docker 容器集群的快速编排;
docker compose可以管理多个 docker 容器组成的应⽤;
需要定义⼀个 YAML 格式的配置⽂件 docker-compose.yml,写 好多个容器之间的调⽤关系;
Docker-compose 将管理的容器分为三层:⼯程(project)、 服务(service)、容器(container)
⼯程:
运⾏ compose 的⽬录下所有的⽂件,包括 dockercompose.yml、extends ⽂件、环境变量⽂件等组成⼀个⼯程, 若⽆特殊指定⼯程,⼯程名即为当前⽬录名。⼯程的默认配置⽂ 件为 docker-compose.yml,可通过环境变量 COMPOSE_FILE 或 -f 参数⾃定义配置⽂件,其定义了多个有依赖关系的服务及 每个服务运⾏的容器。
服务:
⼀个⼯程中包含多个服务,每个服务中定义了容器运⾏的镜像、参数、依赖等,⼀个服务中可包括多个容器实例。
容器:
被 docker-compose 管理或部署的容器集群,调⽤ docker 服务提供的 API 来对容器进⾏管理,只要操作的平台⽀ 持 docker API,即可在其上进⾏ compose 的容器编排。
2.YAML⽂件的格式和语法
1、YAML ⽂件格式
yaml 是⼀种标记语⾔很直观的数据序列化格式,可读性很⾼。 类似于 xml 描述性语⾔,语法⽐xml简单的很多。
yaml 数据结构通过缩进进⾏表示,连续的项⽬通过减号来表 示,键值对⽤冒号分隔,数组⽤中括号括起来,hash
⽤花括号括起来。
yaml ⽂件的基本格式由⼀系列键值对构成。每个键值对都⽤冒 号“: ”分隔
在 yaml 中,键和值之间只需要⼀个空格,这是为了保证 yaml ⽂件的可读性和⼀致性
key: value
对于字符串值,可以使⽤单引号或者双信号将其括起来,这样可以避免出现特殊字符或空格等问题
name: 'Meng Mr'
age: "34"
如果值包含特殊字符(如冒号或短横线),则应该使⽤引号将其括起来
description: "This is a YAML file: good for configuation files."
2、YAML 注意事项
(1)不⽀持制表符 tab 键缩进,需要使⽤空格缩进。
(2)通常开头缩进 2 个空格。
(3)字符后缩进 1 个空格,如:冒号,逗号,横杠。
(4)⽤ # 表示注释。
(5)如果包含特殊字符⽤单引号引起来。
(6)布尔值(true、false、yes、no、on、off)必须使⽤“”引号括起 来,这样分析器会将它们解释为字符串。
3、列表和数组
在yaml中,可以使⽤“-”符号表示⼀个列表和数组
4、嵌套数据结构
yaml⽀持嵌套数据结构,可以⽤缩进来表示不同层级之间的关系, 可使⽤ # 号表示注释信息。
3.docker compose 命令选项
1.build:重新构建服务
2.ps:列出容器
3.up:启动所有的docker-compose服务
4.up -d:启动所有docker-compose服务并在后台运行
5.exec:进入容器实例内部
6.:指定一个服务器启动数量
7.top:显示容器进程
8.logs:查看容器输出日志
9.down:停止并删除容器、网络、卷、镜像
10.stop:停止服务
11.start:启动服务
12.restart:重启服务
13.config:检查配置
14.config -q:检查配置,有问题才有输出
15.--version:查看版本
4.YAML⽂件内常⽤指令字段
(1)version
指定了Docker compose编排⽂件的版本
Docker Compose ⽬前有三个版本,分别为 Version1、Version2和Version3。
Version1 是较早的版本,它将来会被弃⽤。
Version2 是⽬前的稳定版本,⽀持更多的指令。
Version3 在功能上与 Version2 类似,但进⾏了⼀些改进和 扩展,例如增加了对 Docker BuildKit
的⽀持,可以加速构 建过程。
(2)service
指定了在 docker compose 编排中要运⾏的服务,每个服务都有⼀ 个名称,并指定要使⽤的镜像
和容器的配置选项。
(3)image
指定要使⽤的 docker 镜像。
(4)build
允许在 docker compose 编排中指定 dockerfile 的位置。
(5)environment
指定了要设置的环境变量。
(6)volumes
挂载宿主机路径或命名卷
(7)port
指定了要宿主机映射到容器的端⼝,端⼝不能低于 60(宿主机端 ⼝:容器端⼝),如果选择的端
⼝号低于 60,可能会与系统保留的 知名端⼝冲突。
(8)expose
⽤于在 docker 容器内部暴露端⼝的选项。
(9)networks
加⼊⽹络,引⽤顶级 networks 条⽬.
(10)hostname
设定容器主机名
(11)command
指定容器启动时要运⾏的命令,覆盖构建时的默认命令
5.安装Docker-compose
1.下载pip
[root@docker3 ~]# yum -y install python2-pip
2.升级pip到最新版本
[root@docker3 ~]# pip install --upgrade pip
3.指定版本号
[root@docker3 ~]# pip install --upgrade pip==20.3 -i Simple Index
4.使用pip安装docker-compose
[root@docker3 ~]# pip install docker-compose -i Simple Index
rz waiting to receive.
5.安装docker
[root@docker3 ~]# lsanaconda-ks.cfg docker.sh
#让docker.sh脚本文件生效
[root@docker3 ~]# source docker.sh
6.远程复制daemon.json文件到本地目录
[root@docker3 test]# scp root@192.168.1.32:/etc/docker/daemon.json /etc/docker/
7.编辑配置文件
#编辑daemon.json 文件
[root@docker3 test]# vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
],
"hosts":[
"tcp://0.0.0.0:2375",
"unix:///var/run/docker.sock"
],
"insecure-registries": [
"http://192.168.1.35"
]
}
#编辑docker.service文件
[root@docker3 test]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd
8.加载deamon
[root@docker3 test]# systemctl daemon-reload
9.启动docker
[root@docker3 test]# systemctl start docker
10.创建目录
#创建test目录
[root@docker3 ~]# mkdir test
#切入test目录
[root@docker3 ~]# cd test/[root@docker3 test]# ls
#创建html目录
[root@docker3 test]# mkdir html
#写入内容
[root@docker3 test]# echo "我是被编排的nginx" > ./html/index.html
#访问验证
#使用tree命令查看
[root@docker3 test]# tree
.
└── html
└── index.html
1 directory, 1 file
11.创建yml文件
[root@docker3 test]# vim docker-compose.yml
version: "3"
services:
nginx:
container_name: c1
image: "nginx:latest"
ports:
- "80:80"
volumes:
- /root/test/html/:/usr/share/nginx/html/
12.启动docker-compose容器集群
[root@docker3 test]# docker compose up -d
WARN[0000] /root/test/docker-compose.yml: `version` is obsolete
[+] Running 8/8
✔ nginx Pulled 89.7s
✔ e4fff0779e6d Pull complete 26.1s
✔ 2a0cb278fd9f Pull complete 31.0s
✔ 7045d6c32ae2 Pull complete 31.0s
✔ 03de31afb035 Pull complete 31.0s
✔ 0f17be8dcff2 Pull complete 31.0s
✔ 14b7e5e8f394 Pull complete 31.0s
✔ 23fa5a7b99a6 Pull complete 31.1s
[+] Running 2/2
✔ Network test_default Created 0.1s
✔ Container c1 Started 0.9s
13.查看及验证
#查看镜像
[root@docker3 test]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 5ef79149e0ec 2 weeks ago 188MB
#查看容器
[root@docker3 test]# docker ps --allCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESebfbdb329f7a nginx:latest "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp c1