云计算实训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)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

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
相关推荐
watermelonoops3 分钟前
Windows安装Ubuntu,Deepin三系统启动问题(XXX has invalid signature 您需要先加载内核)
linux·运维·ubuntu·deepin
阿甘知识库25 分钟前
宝塔面板跨服务器数据同步教程:双机备份零停机
android·运维·服务器·备份·同步·宝塔面板·建站
滴水之功1 小时前
VMware OpenWrt怎么桥接模式联网
linux·openwrt
paixiaoxin1 小时前
CV-OCR经典论文解读|An Empirical Study of Scaling Law for OCR/OCR 缩放定律的实证研究
人工智能·深度学习·机器学习·生成对抗网络·计算机视觉·ocr·.net
saynaihe1 小时前
安全地使用 Docker 和 Systemctl 部署 Kafka 的综合指南
运维·安全·docker·容器·kafka
ldinvicible1 小时前
How to run Flutter on an Embedded Device
linux
weixin_515202491 小时前
第R3周:RNN-心脏病预测
人工智能·rnn·深度学习
YRr YRr2 小时前
解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误
linux·opencv·ubuntu
G_whang2 小时前
centos7下docker 容器实现redis主从同步
redis·docker·容器
认真学习的小雅兰.2 小时前
如何在Ubuntu上利用Docker和Cpolar实现Excalidraw公网访问高效绘图——“cpolar内网穿透”
linux·ubuntu·docker