当前位置: 代码迷 >> 综合 >> docker--image build--Image hierarchy--auto pull in harbor
  详细解决方案

docker--image build--Image hierarchy--auto pull in harbor

热度:66   发布时间:2024-02-02 10:44:09.0

docker部署

下载
阿里镜像下载地址:
https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/
或者直接下载docker的yum源:wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
rpm安装 docker报错Requires: container-selinux >= 2.9
去docker官网查看依赖的开发包并下载,按照官网提供的安装方式安装失败(不靠谱的官网)https://docs.docker.com/install/linux/docker-ce/centos/
回到问题起点提示:这个报错应该是container-selinux版本低或者是没安装的原因
yum安装container-selinux 发现各种epel源都没有这个包,此包放在阿里云的extra源里,所以
1 可以通过在centos官网找到此包安装解决:wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.74-1.el7.noarch.rpm
然后 执行 rpm -ivh container-selinux-2.74-1.el7.noarch.rpm;yum install docker-ce-18.09.4-3.el7.x86_64.rpm
2 最简单:直接下载阿里的repo,里面有extra源:https://mirrors.aliyun.com/repo/Centos-7.repo
yum install docker;
systemctl start docker
systemctl enable docker

验证版本 在这里插入图片描述
验证 docker0 网卡:
在 docker 安装启动之后,默认会生成一个名称为 docker0 的网卡并且默认 IP 地
址为 172.17.0.1 的网卡。
在这里插入图片描述
注意:cent7.2包括以前docker默认为devicemapper存储引擎会有最大磁盘容量100G的限制,需要下面设置
如果 docker 数据目录是一块单独的磁盘分区而且是 xfs 格式的, 那么需要在格式化的时候加上参数-n ftype=1, 否则后期在启动容器的时候会报错不支持 dtype。再挂载到/var/lib/docker/上

docker默认使用国外源下载镜像更改为阿里云镜像加速
浏览器打开 http://cr.console.aliyun.com, 注册或登录阿里云账号,点击左侧的
镜像加速器, 将会得到一个专属的加速地址

[root@docker-server1 ~]# mkdir -p /etc/docker
[root@docker-server1 ~]# cat > /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://9916w1ow.mirror.aliyuncs.com"]
> }
> EOF
[root@docker-server1 ~]# systemctl daemon-reload
[root@docker-server1 ~]# sudo systemctl restart docker

Docker 镜像基础命令

docker官网上搜索ningx, https://hub.docker.com/_/nginx?tab=tags
其中命令"docker pull image" 中的镜像名就是网站上TAGS标签
搜索镜像

[root@docker-server1 ~]# docker search centos:7.2.1511 #带指定版本号
[root@docker-server1 ~]# docker search centos #不带版本号默认 latest

从 docker 仓库将镜像下载到本地

[root@docker-server1 ~]# docker pull alpine
[root@docker-server1 ~]# docker pull nginx
[root@docker-server1 ~]# docker pull hello-world
[root@docker-server1 ~]# docker pull centos

查看本地镜像

[root@docker-server1 ~]# docker images

REPOSITORY #镜像所属的仓库名称
TAG #镜像版本号(标识符), 默认为 latest
IMAGE ID #镜像唯一 ID 标示
CREATED #镜像创建时间
VIRTUAL SIZE #镜像的大小
下载完成的镜像比下载的大,因为下载完成后会解压

镜像导出
可以将镜像从本地导出问为一个压缩文件,然后复制到其他服务器进行导入使用。
导出方法 1:

[root@docker-server1 ~]# docker save -o /opt/centos.tar.gz centos
[root@docker-server1 ~]# ll /opt/centos.tar.gz
-rw------- 1 root root 205225472 Nov 1 03:52 /opt/centos.tar.gz

导出方法 2:

[root@docker-server1 ~]# docker save centos > /opt/centos-1.tar.gz
[root@docker-server1 ~]# ll /opt/centos-1.tar.gz
-rw-r--r-- 1 root root 205225472 Nov 1 03:52 /opt/centos-1.tar.gz

镜像导入:

[root@docker-server1 ~]# scp /opt/centos.tar.gz 192.168.10.206:/opt/
[root@docker-server2 ~]# docker load < /opt/centos.tar.gz

查看镜像内容:

[root@docker-server1 ~]# cd /opt/
[root@docker-server1 opt]# tar xvf centos.tar.gz
[root@docker-server1 opt]# cat manifest.json #包含了镜像的相关配置, 配置文件、
分层
[{"Config":"196e0ce0c9fbb31da595b893dd39bc9fd4aa78a474bbdc21459a3ebe855b
7768.json","RepoTags":["docker.io/centos:latest"],"Layers":["892ebb5d1299cbf459f6
7aa070f29fdc6d83f40
25c58c090e9a69bd4f7af436b/layer.tar"]}]

分层为了方便文件的共用,即相同的文件可以共用
[{“Config”:" 配 置 文 件 .json",“RepoTags”:[“docker.io/nginx:latest”],“Layers”:[" 分 层1/layer.tar",“分层 2 /layer.tar”,“分层 3 /layer.tar”]}]

删除镜像:

[root@docker-server1 opt]# docker rmi -f centos   # -f 强制删除
#rm是删除容器

删除没用镜像脚本
#!/bin/bash
docker rmi -f docker images | grep none |awk '{print $3}'

获取运行参数帮助
[root@linux-docker opt]# docker daemon –help

命令总结:
docker load -i centos-latest.tar.xz #导入本地镜像
docker save -o /opt/centos.tar #centos #导出镜像
docker rmi 镜像 ID/镜像名称 #删除指定 ID 的镜像,通过镜像启动容器的时
候镜像不能被删除,除非将容器全部关闭
docker rm 容器 ID/容器名称 #删除容器
docker rm 容器 ID/容器名-f #强制删除正在运行的容器

容器操作基础命令:

docker run [选项] [镜像名] [shell 命令] [参数]
docker run [参数选项] [镜像名称,必须在所有选项的后面] [/bin/echo ‘hellowold’] #单次执行,没有自定义容器名称

从镜像启动一个容器

[root@docker-server1 ~]# docker run -it docker.io/centos bash

-i 保持标准输入开启
-t tty 分配一个虚拟tty
会直接进入到容器, 并随机生成容器 ID 和名称

docker run centos /bin/echo ‘hello wold’ #启动的容器在执行完 shel 命令就退出了
执行exit推出容器后再进入之前操作不会保留
ctrl+p+q退出容器不注销

显示正在运行的容器:

[root@linux-docker ~]# docker ps   # -a是显示运行+关闭的所有容器

删除运行中的容器: 即使容器正在运行当中, 也会被强制删除

[root@docker-server1 ~]# docker rm -f 11445b3a84d3

随机映射端口:-P

[root@docker-server1 ~]# docker pull nginx #下载 nginx 镜像
[root@docker-server1 ~]# docker run -P docker.io/nginx #前台启动并随机映射本地端口到容器的 80
随机端口映射, 其实是默认从 32768 开始,所以需要访问ip:32768
前台启动的会话窗口无法进行其他操作,除非退出, 但是退出后容器也会退出

指定端口映射:-p

#方式 1:本地端口 81 映射到容器 80 端口:
docker run -p 81:80 --name nginx-test-port1 nginx
#方式 2:本地 IP:本地端口:容器端口
docker run -p 192.168.10.205:82:80 --name nginx-test-port2 docker.io/nginx  #--name指定容器名称   docker ps查看
#方式 3:本地 IP:本地随机端口:容器端口
docker run -p 192.168.10.205::80 --name nginx-test-port3 docker.io/nginx
#方式 4:本机 ip:本地端口:容器端口/协议, 默认为 tcp 协议
docker run -p 192.168.10.205:83:80/udp --name nginx-test-port4 docker.io/nginx
#方式 5:一次性映射多个端口+协议:
docker run -p 86:80/tcp -p 443:443/tcp -p 53:53/udp --name nginx-test-port5
docker.io/nginx

查看 Nginx 容器访问日志:
[root@docker-server1 ~]# docker logs nginx-test-port3 #一次查看
[root@docker-server1 ~]# docker logs -f nginx-test-port3 #持续查看

查看容器已经映射的端口:

[root@docker-server1 ~]# docker port nginx-test-port5 | id

自定义容器名称:
[root@docker-server1 ~]# docker run -it --name nginx-test nginx

后台启动容器:
[root@docker-server1 ~]# docker run -d --name nginx-test1 docker.io/nginx 9aaad776850bc06f516a770d42698e3b8f4ccce30d4b142f102ed3cb34399b31

创建并进入容器:
[root@docker-server1 ~]# docker run -t -i --name test-centos2 docker.io/centos /bin/bash #/bin/bash没有的话有一个默认的命令centos是/bin/bash
[root@a8fb69e71c73 /]# #创建容器后直接进入, 执行 exit 退出后容器关闭
docker run -it --name nginx-web nginx #会在前台 后面默认执行ngnix
docker run -it --name centos centos #会在后台 后面默认执行的命令是bash

单次运行:–rm容器退出后自动删除:
[root@linux-docker opt]# docker run -it --rm --name nginx-delete-test
docker.io/nginx

传递运行命令:持续运行
容器需要有一个前台运行的进程才能保持容器的运行, 通过传递运行参数是一种方式, 另外也可以在构建镜像的时候指定容器启动时运行的前台命令。
[root@docker-server1 ~]# docker run -d centos /usr/bin/tail -f ‘/etc/hosts’

容器的启动和关闭:少用
[root@docker-server1 ~]# docker stop f821d0cd5a99
[root@docker-server1 ~]# docker start f821d0cd5a99

进入到正在运行的容器:
使用 nsenter 命令:安装util-linux
nsenter 命令需要通过 PID 进入到容器内部,不过可以使用docker inspect 获取到容器的 PID:
[root@docker-server1 ~]# yum install util-linux #安装 nsenter 命令
[root@docker-server1 ~]# docker inspect -f “{{.NetworkSettings.IPAddress}}” 91fc190cb538
172.17.0.2
#不加{}就会显示能够取得的所有信息
[root@docker-server1 ~]# docker inspect -f “{{.State.Pid}}” mydocker #获取到某个docker 容器的 PID,可以通过 PID 进入到容器内
[root@docker-server1 ~]# docker inspect -f “{{.State.Pid}}” centos-test3
5892
[root@docker-server1 ~]# nsenter -t 5892 -m -u -i -n -p
脚本方式:
将 nsenter 命令写入到脚本进行调用,如下:

	[root@docker-server1 ~]# cat docker-in.sh#!/bin/bashdocker_in(){NAME_ID=$1PID=$(docker inspect -f "{{.State.Pid}}" ${NAME_ID})nsenter -t ${PID} -m -u -i -n -p}docker_in $1#测试脚本是否可以正常进入到容器且退出后仍然正常运行:[root@docker-server1 ~]# chmod a+x docker-in.sh[root@docker-server1 ~]# ./docker-in.sh centos-test3[root@66f511bb15af /]# pwd/[root@66f511bb15af /]# exitlogout[root@docker-server1 ~]# ./docker-in.sh centos-test3[root@66f511bb15af /]# exitLogout

使用 exec 命令:执行单次命令与进入容器,不是很推荐此方式, 虽然 exit 退出容器还在运行
[root@docker-server1 ~]# docker exec -it centos-test /bin/bash

批量删除已退出容器:

[root@docker-server1 ~]# docker rm -f `docker ps -aq -f status=exited`  # -q取容器id  根据容器id删除

指定容器 DNS:
Dns 服务,默认采用宿主机的 dns 地址
一是将 dns 地址配置在宿主机
二是将参数配置在 docker 启动脚本里面 –dns=1.1.1.1
dns服务dnsmasq,缓存dns

[root@docker-server1 ~]# docker run -it --rm --dns 223.6.6.6 centos bash
[root@afeb628bf074 /]# cat /etc/resolv.conf
nameserver 223.6.6.6

Docker 镜像与制作:

/var/lib/docker/保存所有与docker相关的数据

第一种(不推荐)
docker run --rm -it centos:latest bash
[root@mini7 docker]#docker run --rm -it centos:latest bash [root@7dc3265d9510 /]# yum install epel-release [root@7dc3265d9510 /]# yum install nginx [root@7dc3265d9510 /]# vi /etc/nginx/nginx.conf #添加 daemon off; [root@7dc3265d9510 /]# vim /usr/share/nginx/html/index.html #首页改为docker page
提交成镜像(新开终端做)

	```docker commit -m "nginx v1" 7dc3265d9510 image.magedu.com/nginx/ngninx:v1# id:docker ps      #image.magedu.com:域名  #nginx:业务名     #nginx:v1:写镜像名称就是放本地仓库(可以公有云)[root@mini7 src]#docker imagesREPOSITORY                      TAG                 IMAGE ID            CREATED             SIZEimage.magedu.com/nginx/ngninx   v1                  db118b1f78e8        2 minutes ago       401MBnginx                           1.14.2              295c7be07902        6 days ago          109MBnginx                           latest              2bcb04bdb83f        6 days ago          109MBcentos                          7.5.1804            cf49811e3cdb        2 weeks ago         200MBcentos                          latest              9f38484d220f        2 weeks ago         202MBubuntu                          latest              94e814e2efa8        3 weeks ago         88.9MB[root@mini7 src]#docker run -it --rm -p 80:80 image.magedu.com/nginx/nginx:v1 /sbin/nginx  #访问宿主机80端口测试```

第二种(Dockerfile)

[root@mini7 src]#cd /opt/
[root@mini7 opt]#mkdir -pv  dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,redhat}} #目录结构按照业务类型或系统类型等方式划分,方便后期镜像比较多的时候进行分类。
[root@mini7 nginx]#pwd
/opt/dockerfile/web/nginx

ENV 环境变量 RUN 运行命令
ADD/COPY 本地目录添加到镜像里,比如配置文件放在本地然后ADD添加,COPY不会自动解压tar
编写 Dockerfile:
#生成的镜像的时候会在执行命令的当前目录查找 Dockerfile 文件, 所以名称不可写错, 而且 D 必须大写

[root@mini7 nginx]#vim Dockerfile1 #My Dockerfile2 #"#"为注释,等于 shell 脚本的中#3 #除了注释行之外的第一行,必须是 From xxx (xxx 是基础镜像)4 From centos5 #第一行先定义基础镜像,后面的本地有效的镜像名,如果本地没有会从远程仓库下载,第一行很重要6 #镜像维护者的信息7 MAINTAINER meng 623475820@qq.com8 ########################### 其 他 可 选 ##################################################9 #USER #指定该容器运行时的用户名和 UID,后续的 RUN 命令也会使用这面指定的用户执行10 #WORKDIR /a11 #WORKDIR b #指定工作目录,最终为/a/b12 #VOLUME 设置主机挂载卷13 ####################################################################################14 #执行的命令,将编译安装 nginx 的步骤执行一遍15 RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm16 RUN yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlibdevel openssl openssl-devel iproute net-tools iotop17 ADD nginx.conf /usr/local/nginx/conf/nginx.conf18 RUN useradd nginx -s /sbin/nologin && chown nginx.nginx /usr/local/nginx19 RUN ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx20 ADD nginx-1.12.2.tar.gz /usr/local/src21 #自动解压压缩包22 RUN cd /usr/local/src/nginx-1.12.2 && ./configure --prefix=/usr/local/nginx --with-http_sub_module && make&& make install23 EXPOSE 80 44324 #向外开放的端口,多个端口用空格做间隔,启动容器时候-p 需要使用此端向外映射,如: -p 8081:80,则 80 就是这里的 8025 CMD ["nginx"]26 #运行的命令,每个 Dockerfile 只能有一条,如果有多条则只有最后一条被执行.而且此命令需要常执行不退出,一般daemon off;27 #如果在从该镜像启动容器的时候也指定了命令,那么指定的命令会覆盖Dockerfile 构建的镜像里面的 CMD 命令,即指定的命令优先级更高, Dockerfile 的优先级较低一些

说明
ADD nginx-1.12.2.tar.gz /usr/local/src 意思是在与dockerfile平级的目录里找此文件,并添加到镜像的/usr/local/src里,名称相同。如果ADD nginx-1.12.2.tar.gz /usr/local/src/haha.tar.gz 为重命名
注释不能与代码在同一行
编写dockerfile时要每几步就构建一次镜像检查语法,每次构建相同镜像的命令都会覆盖上一次的镜像。
此文件分层。优化方法:RUN使用 && 连接,越少越好,把不需要调整的写在前面,每执行一步构建镜像检测一次
执行镜像构建:-t tag号
[root@docker-server1 nginx]# docker build –t nginx:v1 /opt/dockerfile/web/nginx/ #后面路径也可使用"."表示从当前目录找Dockerfile

构建镜像可以写成脚本:标准build脚本
在这里插入图片描述
准备源码包与配置文件:
[root@docker-server1 nginx]# cp /usr/local/nginx/conf/nginx.conf .
#为便于测试,更改配置文件关闭后台运行即添加daemon off;
[root@docker-server1 nginx]# cp /usr/local/src/nginx-1.10.3.tar.gz . #nginx 源码包
在这里插入图片描述
测试
进入容器默认执行Dockerfile的CMD里的命令,发现报错,daemon单词写错,需要修改配置文件,然后重新构建镜像,再次进入容器测试。
在这里插入图片描述
在这里插入图片描述
tips:生产中nginx的页面一般会有一个固定路径和名称的文件夹比如webpage,里面存放静态页面。
需要在Dockerfile里ADD webpage.tar.gz /usr/local/nginx/html
下午厂···

实现镜像的分层设计

在这里插入图片描述

基础镜像要更改时区
rm -rf /etc/localtime;
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
在这里插入图片描述
以nginx层为例
1)首先创建centos_base镜像

cd /opt/dockerfile/system/centos/centos_base
vim DockerfileFrom centosMAINTAINER meng 623475820@qq.comRUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpmRUN yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlibdevel openssl openssl-devel iproute net-tools iotop

build脚本
vim docker-build.sh
#!/bin/bash
docker build -t centos_base:v7.6 .
bash docker-build.sh

2)在centos_base上构建nginx_base脚本

#My DockerfileFrom centos_base:v7.6MAINTAINER meng 623475820@qq.comADD nginx-1.12.2.tar.gz /usr/local/srcRUN cd /usr/local/src/nginx-1.12.2 && ./configure --prefix=/usr/local/nginx --with-http_sub_module && make && make installEXPOSE 80 443CMD ["nginx"]

在nginx_base上构建nginx:web1

vim Dockerfile#My DockerfileFrom nginx_base:v1MAINTAINER meng 623475820@qq.comADD nginx.conf /usr/local/nginx/conf/nginx.confRUN useradd nginx -s /sbin/nologin && chown nginx.nginx /usr/local/nginxRUN ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginxEXPOSE 80 443CMD ["nginx"]

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
构建JAVA层
vim Dcokerfile
在这里插入图片描述
vim build-command.sh
在这里插入图片描述
把jdk-8u192-linux-x64.rpm包放到本目录
验证:docker run -it --rm jdk_base:v8u_192 bash

在这里插入图片描述
构建Haproxy镜像

1)准备 Dockerfile:
[root@docker-server1 haproxy]# pwd
/opt/dockerfile/system/centos/haproxy
[root@docker-server1 haproxy]# cat Dockerfile
#Haproxy Base Image
FROM centos_base:v7.6
MAINTAINER meng “meng@163.cn”
ADD haproxy-1.8.12.tar.gz /usr/local/src/
RUN cd /usr/local/src/haproxy-1.8.12 && make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy && cp haproxy /usr/sbin/ && mkdir /usr/local/haproxy/run
ADD haproxy.cfg /etc/haproxy/
ADD run_haproxy.sh /usr/local/haproxy/bin/run_haproxy.sh
RUN chmod a+x /usr/local/haproxy/bin/run_haproxy.sh
EXPOSE 80 9999
CMD ["/usr/local/haproxy/bin/run_haproxy.sh"]

2)准备Dockerfile [CMD] 脚本
#!/bin/bash
haproxy -f /etc/haproxy/haproxy.cfg
tail -f /etc/hosts

3)准备 haproxy 源码文件:
[root@docker-server1 haproxy]# ll haproxy-1.8.12.tar.gz
-rw-r–r-- 1 root root 2059925 Jun 30 23:32 haproxy-1.8.12.tar.gz

4)准备 haproxy 配置文件:
[root@docker-server1 haproxy]# cat haproxy.cfg
global
chroot /usr/local/haproxy
#stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
uid 99
gid 99
daemon
nbproc 1
pidfile /usr/local/haproxy/run/haproxy.pid
log 127.0.0.1 local3 info
defaults
option http-keep-alive
option forwardfor
mode http
timeout connect 300000ms
timeout client 300000ms
timeout server 300000ms

listen stats
mode http
bind 0.0.0.0:9999
stats enable
log global
stats uri /haproxy-status
stats auth haadmin:q1w2e3r4ys

listen web_port
bind 0.0.0.0:80
mode http
log global
balance roundrobin
server web1 172.18.51.17:8803 check inter 3000 fall 2 rise 5
server web2 172.18.51.27:8804 check inter 3000 fall 2 rise 5

5)准备构建脚本:
[root@docker-server1 haproxy]# cat build-command.sh
#!/bin/bash
docker build -t centos-haproxy-base:7.5-1.8.12 .

在这里插入图片描述
6)构建镜像
bash build-command.sh
7)测试
docker run -it --rm -r 80:80 -p 9999:9999 haproxy:v1
宿主机访问172.18.51.17:9999/haproxy-status

(42-2.65 镜像上传到阿里云镜像服务器,阿里云上有教程 公网速度较慢不推荐)

构建自动化harbor镜像服务器

在这里插入图片描述
图解 42-5.40
1)虚拟机添加硬盘,echo ‘- - -’ > /sys/class/scsi_host/host2/scan
[root@mini7 src]#mkfs.xfs /dev/sdb(确保ftype=1)
meta-data=/dev/sdb isize=512 agcount=4, agsize=1310720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242880, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
2)mount /dev/sdb /var/lib/docker
设置开机挂载
[root@mini7 src]#blkid /dev/sdb
/dev/sdb: UUID=“76f07f33-7e42-42ba-85ff-2ec1cdb1acc0” TYPE=“xfs”
[root@mini7 src]#vim /etc/fstab
UUID=“76f07f33-7e42-42ba-85ff-2ec1cdb1acc0” /var/lib/docker xfs defaults 0 0
[root@mini7 src]mount -a

	[root@mini7 src]#df -THFilesystem     Type      Size  Used Avail Use% Mounted on/dev/sda2      xfs        54G  3.3G   51G   7% /devtmpfs       devtmpfs  577M     0  577M   0% /devtmpfs          tmpfs     588M     0  588M   0% /dev/shmtmpfs          tmpfs     588M  9.1M  579M   2% /runtmpfs          tmpfs     588M     0  588M   0% /sys/fs/cgroup/dev/sda1      xfs       1.1G  133M  931M  13% /boot/dev/sda3      xfs       1.1G   34M  1.1G   4% /datatmpfs          tmpfs     118M     0  118M   0% /run/user/0/dev/sdb       xfs        22G   34M   22G   1% /var/lib/docker

3)确认

[root@mini7 src]#systemctl start docker[root@mini7 src]#cd /var/lib/docker[root@mini7 docker]#lltotal 0drwx------. 2 root root 24 Apr  5 17:18 builderdrwx------. 4 root root 92 Apr  5 17:18 buildkitdrwx------. 3 root root 20 Apr  5 17:18 containerddrwx------. 2 root root  6 Apr  5 17:18 containersdrwx------. 3 root root 22 Apr  5 17:18 imagedrwxr-x---. 3 root root 19 Apr  5 17:18 networkdrwx------. 3 root root 40 Apr  5 17:18 overlay2drwx------. 4 root root 32 Apr  5 17:18 pluginsdrwx------. 2 root root  6 Apr  5 17:18 runtimesdrwx------. 2 root root  6 Apr  5 17:18 swarmdrwx------. 2 root root  6 Apr  5 17:18 tmpdrwx------. 2 root root  6 Apr  5 17:18 trustdrwx------. 2 root root 25 Apr  5 17:18 volumes[root@mini7 docker]#docker infoContainers: 0Running: 0Paused: 0Stopped: 0Images: 0Server Version: 18.06.3-ceStorage Driver: overlay2(确认项)

4)安装harbor
下载地址: https://github.com/vmware/harbor/releases
安装文档:https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
yum install docker-compose -y
[root@mini7 src]#tar xvf harbor-offline-installer-v1.2.2.tgz
[root@mini7 src]#cd harbor;
[root@mini7 harbor]#vim harbor.cfg
hostname = 192.168.51.17
69 harbor_admin_password = 123456
[root@mini7 harbor]#./install.sh
harbor默认存放在/var/lib/docker中,最好配置大容量单独磁盘
访问192.168.51.17进入管理系统
账号:admin 密码:123456
在这里插入图片描述
在这里插入图片描述
选择新建项目
在这里插入图片描述
5)上传镜像到harbor
准备Dockerfile docker-build.sh

[root@mini7 system]#vim docker-build.sh1 #!/bin/bash2 docker build -t 192.168.51.17/test/centos_base:v7.6 .3 sleep 24 docker push 192.168.51.17/test/centos_base:v7.6

dockerd -h 查看需要用到的参数,给docker指定harbor服务器地址

vim /usr/lib/systemd/system/docker.serviceExecStart=/usr/bin/dockerd --insecure-registry 192.168.51.17 --insecure-registry 192.168.51.27   #scp给192.168.51.27systemctl daemon-reloadsystemctl restart docker 	ps -ef| grep dockerdocker login 192.168.51.17   #登录harbor   admin 12346bash docker-build.sh #创建镜像并上传到harbor

生产中经常需要修改 images 的名称,不修改成指定格式无法将镜像上传到 harbor 仓库,格式为: HarborIP/项目名/image 名字:版本号:
[root@docker-server1 harbor]# docker tag 192.168.10.205:5000/jack/nginx-1.10.3:v1
192.168.10.205/nginx/nginx_1.10.3:v1

6)下载镜像
在这里插入图片描述
点击图片的复制按钮得到推送镜像的命令
[root@mini7 system]#docker pull 192.168.51.17/test/centos_base:v7.6

vim /root/.dockerd/config.json保存登录过的阿里云和harbor账号

harbor高可用

17主 27从 两台harhor
27上创建与主 harbor 项目名称保持一致的项目 test

17 和27 都需要做,实现双向同步
1) 仓库管理–>新建目标
在这里插入图片描述
2) 复制管理–>新建规则

在这里插入图片描述

在这里插入图片描述
3)测试双向同步:删除镜像查看同步,添加镜像查看同步。

  相关解决方案