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)测试双向同步:删除镜像查看同步,添加镜像查看同步。