安装部署harbor及docker-compose的 实例

部署harbor

python --version

yum -y install python2-pip

# 查看版本信息

pip list   

# 更新pip

pip install --upgrade pip    

pip install --upgrade pip==20.3  -i https://mirrors.aliyun.com/pypi/simple  

# 安装docker-compose

pip install docker-compose --ignore-installed requests  -i https://mirrors.aliyun.com/pypi/simple

pip list

docker-compose      1.26.2

# 使用脚本安装docker

脚本为:

cat << EOF | tee /etc/modules-load.d/k8s.conf

overlay

br_netfilter

EOF

modprobe overlay

modprobe br_netfilter

cat << EOF | tee /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.ipv4.ip_forward = 1

EOF

# 重启服务

sysctl --system

# 安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

# 指定镜像源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

# 执行脚本

source docker.sh                    

# 查看docker 的版本号  

docker --version  26.1.4

# 解压软件包

tar -zxvf harbor-offline-installer-v2.11.1.tgz  

cd harbor/  

# 修改配置文件

vim harbor.yml

hostname: 192.168.2.51

# 注释掉https的相关服务,服务类型和端口号等

# 配置docker镜像,启动docker服务,

scp root@192.168.2.50:/etc/docker/daemon.json /etc/docker

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.2.51" # 去掉之前的5000端口

    }

}

#编辑docker.service文件

vim /usr/lib/systemd/system/docker.service

13 ExecStart=/usr/bin/dockerd

# 重载配置文件

systemctl daemon-reload

# 启动服务

systemctl restart docker.service

docker --version

Docker version 26.1.4, build 5650f9b

# 执行可执行文件

./prepare

# 确保5000和80端口未被占用,并关闭防火墙

netstat -lntpu|grep 5000

netstat -lntpu|grep 80

systemctl stop firewalld

./install.sh  

# 是否处于启动状态

dokcer ps -a   

# 浏览器访问测试(192.168.2.51)

 curl localhost:5000/v2_catalog

# 上传镜像,看libary  

docker pull centos  

docker images  

# 打标签,推送标签

docker tag centos:latest 192.168.2.51/library/hj:v0

docker push  192.168.2.51/library/hj:v0  

docker login http://192.168.2.51

Usename:admin 

Password: harbor12345

#查看所有容器

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

#开启关闭的容器

docker start harbor-jobservice harbor-core harbor-portal registry registryctl harbor-db

harbor-jobservice

harbor-core

harbor-portal

registry

registryctl

harbor-db

# 浏览器再次访问验证:发现存在我们创建的hj镜像

#使用复制的连接,添加同时共享的镜像

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

# 查看被共享的镜像

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 官⽅的开源项⽬,负责实现对 docker 容器集群的快速编排(容器,依赖,⽹络,挂载)。compose 是 docker 公司推出的一个工具软件,可以管理多个 docker 容器组成的应⽤。

2、核心概念:Docker-compose 将管理的容器分为三层:⼯程(project)、 服务(service)、容器(container)

工程:运行compose 的⽬录下所有的⽂件,包括 dockercompose.yml、extends

文件、环境变量文件等组成⼀个⼯程,若无特殊指定工程,工程名即为当前⽬录名。工程的默认配置文件为 docker-compose.yml,可通过环境变量 COMPOSE_FILE 或 -f 参数⾃定义配置⽂件,其定义了多个有依赖关系的服务及每个服务运行的容器。

服务:一个工程中包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖等。一个服务中可包括多个容器实例。

容器:被 docker-compose 管理或部署的容器集群,调⽤ docker 服务提供的 API 来对容器进行管理,只要操作的平台支持 docker API,即可在其上进⾏ compose 的容器编排。

YAML ⽂件格式

1)yaml 是⼀种标记语⾔很直观的数据序列化格式,可读性很⾼。类似于 xml 描述性语言,语法⽐xml简单的很多。

2)yaml 数据结构通过缩进进⾏表示,连续的项⽬通过减号来表示,键值对⽤冒号分隔,数组⽤中括号括起来,hash⽤花括号括起来。

3)yaml ⽂件的基本格式由⼀系列键值对构成。每个键值对都⽤冒号“: ”分隔

key: value

对于字符串值,可以使⽤单引号或者双信号将其括起来,这样可以避免出现特殊字符或空格等问题

name: 'Meng Mr'

age: "34"

如果值包含特殊字符(如冒号或短横线),则应该使⽤引号将其括起来

description: "This is a YAML file: good for configuation files."

YAML 注意事项

1. 不⽀持制表符 tab 键缩进,需要使⽤空格缩进。

2. 通常开头缩进 2 个空格。

3. 字符后缩进 1 个空格,如:冒号,逗号,横杠。

4. ⽤ # 表示注释。

5. 如果包含特殊字符⽤单引号引起来。

6. 布尔值(true、false、yes、no、on、off)必须使⽤“”引号括起

来,这样分析器会将它们解释为字符串。

7、列表和数组

在yaml中,可以使⽤“-”符号表示⼀个列表和数组

8、嵌套数据结构

yaml⽀持嵌套数据结构,可以⽤缩进来表示不同层级之间的关系, 可使⽤ # 号表示注释信息。

person:  

 name: 'Meng Mr'   # 两个空格,name和age是person的⼀

级⼦节点

 age: "34"

 address:          # address是person的⼆级⼦节点

   street: '123 Main St'   # address节点包含了

street、city、state和zip四个⼀级⼦节点

   city: 'Anytown'

   state: 'CA'

   zip: '12345'

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:查看版本

文件内常用指令字段

1、version :指定了Docker compose编排⽂件的版本,Docker Compose ⽬前有三个版本,分别为 Version1、Version2和Version3。

Version1 是较早的版本,它将来会被弃⽤。

Version2 是⽬前的稳定版本,⽀持更多的指令。

Version3 在功能上与 Version2 类似,但进⾏了⼀些改进和扩展,例如增加对 Docker BuildKit 的⽀持,可以加速构建过程。

version:'3'

2、service:指定了在 docker compose 编排中要运⾏的服务,每个服务都有⼀

个名称,并指定要使⽤的镜像和容器的配置选项。

services:

 mysql: #服务名

  # 再往下可以对该服务进⾏定义,⽐如指定映射端⼝,指定使⽤的

镜像等,但要注意缩进格式。

3、image:指定要使⽤的 docker 镜像。

services:

 mysql: # 服务名

   image: mysql:5.5 # 指定mysql镜像,如果主机内不存在该镜像,会从登录的docker镜像仓库内拉取,⼀般都是从dockerhub上拉取。

4、build:允许在 docker compose 编排中指定 dockerfile 的位置。

services:

 mysql: # 服务名

   build: /docker/mysql # 这⾥为⽤户微服务⽂件夹,⾥⾯存放的是该服务代码jar包和Dockerfile⽂件。

5、environment:指定了要设置的环境变量。

services:

 mysql: # 服务名

   environment: # 下⾯是MySQL环境变量的例⼦

   MYSQL_ROOT_PASSWORD:   000000 # 设置MySQL的root⽤户的密码

   MYSQL_DATABASE: database # 指定要创建的数据库名称

   MYSQL_USER: user # 指定要创建的MySQL⽤户名

   MYSQL_PASSWORD: 123 # 指定要创建的MySQL⽤户的密码

6、volumes:挂载宿主机路径或命名卷

1)指定路径挂载

services:

 mysql: # 服务名

   volumes:

- ./mysql/data:/var/lib/mysq # 直接指定路径挂载

2)生成 volume 卷挂载

[root@doc ~]# docker volume create mysql # ⽣成名为

mysql的volume卷

[root@doc ~]# vim docker-compose.yml

services:

 mysql: # 服务名

   volumes:

- mysql:/var/lib/mysq # 指定volume卷挂载

3)共享⽬录挂载

[root@doc ~]# vim docker-compose.yml

version: '2' # 使⽤共享⽬录挂载只有‘2’版本⽀持

service:

 mysql: # 服务名

   volumes:

    - /var/lib/mysql # 将这个⽬录作为共享⽬录

 nginx:

   volumes:

    - /usr/local/nginx/html

 php:

   volumes_from: # 共享⽬录来⾃

   - mysql # 挂载的共享⽬录,挂载后会在容器内⽣成与

被挂载的⽬录同名的路径

   - nginx # 共享挂载可以是⼀个列表

7、port:指定了要宿主机映射到容器的端⼝,端⼝不能低于 60(宿主机端口:容器端口),如果选择的端⼝号低于 60,可能会与系统保留的知名端⼝冲突。

services:

 mysql: # 服务名

   ports:

- 3306:3306 # 宿主机端⼝:容器端⼝

8、expose:⽤于在 docker 容器内部暴露端⼝的选项

services:

 mysql: # 服务名

   expose:

- 3306

9、networks:加⼊⽹络,引⽤顶级 networks条⽬。

networks: # 与services同级

 dev: # ⾃定义或已存在的⽹络设备名

   driver: bridge # 设备类型:⽹桥

   external: true # 外部存在:是

10、hostname:设定容器主机名

services:

 mysql: # 服务名

   hostname: mysql

11、command:指定容器启动时要运⾏的命令,覆盖构建时的默认命令

services:

 mysql: #服务名

   command: --character-set·server=utf8

##需要定义⼀个 YAML 格式的配置⽂件 docker-compose.yml,写好多个容器间的调⽤关系。

使用 compose 的步骤

1)使⽤ Dockerfile 定义各个微服务应⽤并构建出对应的镜像⽂件Dockerfile的使⽤,以便可以在任何地⽅复制。

2)使⽤ docker-compose.yml 定义⼀个完整的业务单元,安排好整体应⽤中的各个容器服务。

3)最后,执⾏ docker-compose up 命令来启动并运⾏整个应⽤程序,完成⼀键部署。

docker-compose 实例

1、下载pip

[root@localhost ~]#yum -y install python2-pip

2、升级pip到最新版本

[root@localhost ~]#pip install --upgrade pip

3、指定版本号

[root@localhost ~]#pip install --upgrade pip==20.3 -i Simple Inde

4、使用pip安装docker-compose

[root@localhost ~]#pip install docker-compose -i Simple Index rz waiting to receive.

5、安装docker

[root@localhost ~]#lsanaconda-ks.cfg docker.sh

[root@localhost ~]#source docker.sh

[root@localhost ~]#scp root@192.168.2.51:/etc/docker/daemon.json /etc/docker/

# 编辑daemon.json 文件

[root@localhost ~]#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.2.51"

    ]

}

[root@localhost ~]#vim /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd

# 加载并重启

[root@localhost ~]#systemctl daemon-reload

[root@localhost ~]#systemctl start docker

# 创建测试目录test,该目录是⼀个:(project)⼯程

[root@localhost ~]#mkdir test

[root@localhost ~]#cd test/

[root@localhost test]#cat docker-compose.yml   #  这里⽂件名称是固定不变的

version: "3" # 指定⽂件版本

services:

 nginx:     # 这是service名

   container_name: nginx01 # 这是容器名

   image: nginx:latest

   ports:

    - "8001:80" # 端⼝映射

   volumes:

    - /www/wwwroot/8001:/usr/share/nginx/html # 挂

   hostname: nginx.test.com # 容器主机名 

   nginx-php:    # 第⼆个service服务名称

   container_name: nginx02   # 第⼆个容器的名称

    image: nginx:latest

   ports:

    - "8002:80"

   volumes:

    - /www/wwwroot/8002:/usr/share/nginx/html

   hostname: nginx-php.test.com

# 创建数据卷⽬录

[root@localhost ~]#mkdir html

[root@localhost ~]#echo "我是被编排的nginx" > ./html/index.html

tree

.

└── html

└── index.html

1 directory, 1 file

# 创建yml文件

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/

# 启动 compose 集群,要在 docker-compose.yml ⽂件所在的⽬录下才能通过

docker compose up -d # 启动⼯程后会根据指定的容器名称,⽣成对应的容器

[+] Running 3/3

 ✔ Network test_default Created          0.1s

 ✔ Container nginx02     Started          0.1s

 ✔ Container nginx01     Started          0.1s

# 访问测试

[root@localhost test]# curl 192.168.15.3:8001

8001

[root@localhost test]# curl 192.168.15.3:8002

80026

# 删除集群中的容器

rm 命令只能删除已经停⽌的容器

docker compose ps -a   #

# 查看docker-compose的所有容器

NAME     IMAGE         COMMAND                  

                      SERVICE     CREATED        

STATUS         PORTS

nginx01   nginx:latest   "/docker-entrypoint.sh

nginx -g 'daemon off;'"   nginx       3 minutes

ago   Up 3 minutes   0.0.0.0:8001->80/tcp,

:::8001->80/tcp

nginx02   nginx:latest   "/docker-entrypoint.sh

nginx -g 'daemon off;'"   nginx-php   3 minutes

ago   Up 3 minutes   0.0.0.0:8002->80/tcp,

:::8002->80/tcp

[root@localhost test]# docker compose stop nginx01

  # 以容器名关闭compose失败

no such service: nginx01

[root@localhost test]# docker compose stop nginx  

# 必须使⽤service关闭docker-compose

[+] Stopping 1/1

 ✔ Container nginx01 Stopped 强制删除

[root@localhost test]# docker compose rm   #删除容

器,不需要指定容器名称

? Going to remove nginx01 Yes

[+] Removing 1/0

 ✔ Container nginx01 Removed                    

                                                 

       0.0s

[root@localhost test]# docker compose rm   #再次删

除找不到容器,因为没有停⽌的容器

No stopped containers

[root@localhost test]# docker compose ps   #查看运⾏

的容器,⽬前只有⼀个nginx02

NAME     IMAGE         COMMAND                  

                      SERVICE     CREATED        

STATUS         PORTS

nginx02   nginx:latest   "/docker-entrypoint.sh

nginx -g 'daemon off;'"   nginx-php   6 minutes

ago   Up 6 minutes   0.0.0.0:8002->80/tcp,

:::8002->80/tcp

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值