云计算实训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](https://mirrors.aliyun.com/pypi/simple "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 [email protected]:/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 ![](https://i-blog.csdnimg.cn/direct/4d9b279625c146ae9ebd348358b1eaa6.png)![](https://i-blog.csdnimg.cn/direct/eedb294a7df249eb8a9fd508699a8006.png) 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.浏览器访问: ![](https://i-blog.csdnimg.cn/direct/6821642a72084f58bb859ef924603078.png) 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 ![](https://i-blog.csdnimg.cn/direct/64beabe037a1466185c26b7912ad36b5.png) 18.共享镜像 切到docker机器: #启动docker \[root@docker \~\]# systemctl start docker #编辑daemon.json文件 \[root@docker \~\]# vim /etc/docker/daemon.json ![](https://i-blog.csdnimg.cn/direct/7bb8f04b4a804a138ca5d8e1a249825a.png) #重新启动docker \[root@docker \~\]# systemctl restart docker #到访问页面复制拉取命令 ![](https://i-blog.csdnimg.cn/direct/5c442c07e128430da48a96d0e411facc.png) #使用复制的连接,添加同时共享的镜像 [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 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)services 指定了在 docker compose 编排中要运⾏的服务,每个服务都有⼀ 个名称,并指定要使⽤的镜像 和容器的配置选项。 (3)image 指定要使⽤的 docker 镜像。 (4)build 允许在 docker compose 编排中指定 dockerfile 的位置。 (5)environment 指定了要设置的环境变量。 (6)volumes 挂载宿主机路径或命名卷 (7)ports 指定了要宿主机映射到容器的端⼝,端⼝不能低于 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](https://mirrors.aliyun.com/pypi/simple "Simple Index") 4.使用pip安装docker-compose \[root@docker3 \~\]# pip install docker-compose -i [Simple Index](https://mirrors.aliyun.com/pypi/simple "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 [email protected]:/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 #访问验证 ![](https://i-blog.csdnimg.cn/direct/c1dceba953e64fa5965fe11aa9d51591.png) #使用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

相关推荐
春生黎至100525 分钟前
GZ073网络系统管理赛项赛题第1套模块A:网络构建解题笔记
运维·网络
IT程序媛-桃子26 分钟前
【网安面经合集】42 道高频 Web 安全面试题全解析(附原理+防御+思路)
运维·网络·安全·面试
机器鱼33 分钟前
1.2 基于卷积神经网络与SE注意力的轴承故障诊断
深度学习·机器学习·cnn
❀͜͡傀儡师44 分钟前
多台服务器上docker部署 Redis 集群
运维·服务器·redis
JCBP_1 小时前
数据结构4
运维·c语言·数据结构·vscode
AdrichPro1 小时前
10、Linux C 网络编程(完整版)
linux·服务器·c语言·网络
IT 小旋风1 小时前
Linux centos 7 常用服务器搭建
linux·服务器·centos
Hotlogin2 小时前
多账号登录管理工具技术解析:浏览器指纹与自动化架构设计
运维·自动化
牙牙要健康2 小时前
【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解
pytorch·深度学习·目标检测