- 第九章 配置docker静态IP地址-配置docker私有仓库
- Generated by NetworkManager
- docker run -d -p 5000:5000 -v /opt/registry:/var/lib/registry registry:latest
- busybox:latest 192.168.1.63:5000/busybox:latest">docker tag busybox:latest 192.168.1.63:5000/busybox:latest
- hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost
- 启动Harbor后,管理员UI登录的密码,默认是Harbor12345,改为123456
- 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
- mysql数据库root用户默认密码root123,实际使用时修改下
Docker+K8S+DevOps微服务架构师
学神IT教育:从零基础到实战,从入门到精通!版权声明:
免责声明: 本课程设计目的只用于教学,切勿使用课程中的技术进行违法活动,学员利用课程中的技术进行违法活动,造成的后果与讲师本人及讲师所属机构无关。倡导维护网络安全人人有责,共同维护网络文明和谐。
本系列文档为《学神IT教育》内部使用教材和教案,只允许VIP学员个人使用,禁止私自传播。否则将取消其VIP资格,追究其法律责任,请知晓!
联系方式:
学神IT教育官方网站: http://www.xuegod.cn
学神K8S精英学习11群QQ群: 957231097
微信扫码添加学习顾问微信,同时扫码关注学神公众号了解最新行业动态,获取更多学习资料及答疑就业服务!
第九章 配置docker静态IP地址-配置docker私有仓库
本节所讲内容:
9.1 创建docker静态化IP 9.2 创建docker私有化仓库 9.3 实战-使用阿里云私有仓库存储自己的docker镜像实验环境: 一个还原到之前安装了docker的虚拟机快照:
9.1 创建docker静态化IP
9.1.1 Docker的4种网络模式
- Docker有以下4种网络模式:
host模式,使用—net=host指定。
container模式,使用—net=container:NAME_or_ID指定。
none模式,使用—net=none指定。
bridge模式,使用—net=bridge指定,默认就是bridge模式。默认选择bridge的情况下,容器启动后会通过DHCP获取一个地址,这可能不是我们想要的,在centos7系统上, docker环境下可以使用pipework脚本对容器分配固定IP(这个IP可以是和物理机同网段IP)。
注: docker 默认是bridge(—net=bridge)模式,相当于VMware中NAT模式。
docker环境下可以使用pipework脚本对容器分配固定IP,相当于VMware中桥接模式。
注:Pipework有个缺陷,容器重启后IP设置会自动消失,需要重新设置。
9.1.2 配置桥接网络:
桥接本地物理网络的目的,是为了局域网内用户方便访问docker实例中服务,不要需要各种端口映射即可访问服务。 但是这样做,又违背了docker容器的安全隔离的原则,工作中辩证的选择.
创建桥设备br0:
安装包: [root@xuegod63 ~]# rpm -ivh /mnt/Packages/bridge-utils-1.5-9.el7.x86_64.rpm 把ens33绑到br0桥设备上:[root@xuegod63 ~]# cd /etc/sysconfig/network-scripts/
[root@xuegod63 network-scripts]# cp ifcfg-ens33 /opt/ #备份一下eth0
[root@xuegod63 network-scripts]# vim ifcfg-ens33#编辑配置文件为以下内容
TYPE=”Ethernet”
BOOTPROTO=”none”
DEFROUTE=”yes”
IPV4_FAILURE_FATAL=”no”
IPV6INIT=”yes”
IPV6_AUTOCONF=”yes”
IPV6_DEFROUTE=”yes”
IPV6_FAILURE_FATAL=”no”
NAME=”ens33”
UUID=”7a556ff6-f865-4549-b08f-9e526c9bb638”
DEVICE=”ens33”
ONBOOT=”yes”
IPADDR=”192.168.1.63” #删除IP地址相关内容,删除下面4行 PREFIX=”24” GATEWAY=”192.168.1.1” DNS1=”8.8.8.8”IPV6_PEERDNS=”yes”
IPV6_PEERROUTES=”yes”
IPV6_PRIVACY=”no”
BRIDGE=”br0” #在文件最后插入这一行,表示把ens33桥接到br0上 生成桥设备br0的配置文件:[root@xuegod63 network-scripts]# vim ifcfg-br0 #创建ifcfg-br0 文件,并写入以下内容
DEVICE=”br0”NM_CONTROLLED=”yes”
ONBOOT=”yes” TYPE=”Bridge” BOOTPROTO=noneIPADDR=192.168.1.63
NETMASK=255.255.255.0
GATEWAY=192.168.1.1 DNS1=114.114.114.114注:TYPE=”Bridge”
[root@xuegod63 network-scripts]# service network restart
Restarting network (via systemctl): [ 确定 ]
测试br0:
root@xuegod63 network-scripts]# ifconfig
[root@xuegod63 network-scripts]# ping g.cn
PING g.cn (203.208.37.20) 56(84) bytes of data.
64 bytes from 203.208.37.20: icmp_seq=1 ttl=57 time=12.3 ms
9.1.3 使用pipework配置静态IP
方法1:直接下载pipework zip包
https://github.com/jpetazzo/pipework
把pipework-master.zip上传到Linux中
扩展:
方法2:使用git获得:
git下载链接:https://github.com/jpetazzo/pipework.git
[root@xuegod63 opt]# git clone https://github.com/jpetazzo/pipework.git
咱们使用方法1:
将 pipework-master.zip上传xuegod63上:
[root@xuegod63 ~]# unzip pipework-master.zip # 不需要编译,因为pipework 是一个shell脚本
查看:
[root@xuegod63 ~]# vim ./pipework-master/pipework
[root@xuegod63 ~]# cp /root/pipework-master/pipework /usr/local/bin/ #方便后期使用pipework命令
到此 pipework已经安装成功。
启动docker:
[root@xuegod63 ~]# systemctl start docker
把centos-lastest-docker-image.tar 镜像上传Linux上,并导入docker平台
[root@xuegod63 ~]# docker load -i centos-lastest-docker-image.tar
注:我的系统快照中已经有镜像,所以不需要再导入
9.1.4 使用静态IP启动一个docker实例
例:以none模式,使用—net=none 启动一个容器,并且开启docker特权模式。
[root@xuegod63 ~]# docker run -itd —net=none —privileged=true centos bash
e4698f625a56661edd2678269215ba42d4fa41c2da881768a741a72b4a3d0c60
扩展:
—privileged=true #允许开启特权功能
privileged [ˈprɪvəlɪdʒd] 有特权的在docker 0.6版以后,privileged被引入docker。使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部物理机的一个普通用户权限。
使用privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。不启用privileged,容器中root用户不能执行mount。
扩展: 测试privileged 特权功能 可以:1
- 未设置privileged启动的容器:
[root@localhost ~]# docker run -it centos:latest bash
[root@65acccbba42f /]# ls /dev #可以看到的设备文件比较少
console fd full fuse kcore null ptmx pts random shm stderr stdin stdout tty urandom zero
[root@00931099722f /]# mount -o bind /etc /opt/ #不可以挂载成功, mount命令执行失败
mount: permission denied
- 使用privileged启动的容器
[root@xuegod63 ~]# docker run -it —privileged centos:latest bash
[root@4a51d0fde3ce /]# ls /dev/ #可以看到很多设备文件
[root@4a51d0fde3ce /]# mount -o bind /etc /opt/ #可以挂载成功
[root@4a51d0fde3ce /]# mount /dev/sda1 /opt/ #可以挂载物理机上的sda1分区
[root@4a51d0fde3ce /]# ls /opt/
[root@4a51d0fde3ce /]# init 0 #不能使用init 0关机不行,还是使用exit退出docker
Couldn’t find an alternative telinit implementation to spawn.
[root@4a51d0fde3ce /]# exit
对开特权模式的docker实例有了解:1 没有:2
课上直接吸收:80%的技术! 拿个本记一下,纸质的笔记只记关键词,是帮你记! 向课程上要效率!扩展结束,接着给容器配置表态IP地址
[root@xuegod63 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e4698f625a56 centos “bash” 30 seconds ago Up 27 seconds suspicious_colden 可以看到容器启动的ID ,比如是e4698f625a56给此容器配置地址
pipework语法:pipework 网桥名 容器实例ID 分配给容器的IP/掩码@网关
[root@xuegod63 ~]# pipework br0 e4698f625a56 192.168.1.71/24@192.168.1.1
注:容器的DNS地址,会直接使用物理机的dns
测试IP:
[root@xuegod63 ~]# ping 192.168.1.71 #可以看到docker实例的IP已经可以使用
PING 192.168.1.71 (192.168.1.71) 56(84) bytes of data.
64 bytes from 192.168.1.71: icmp_seq=1 ttl=64 time=0.639 ms
[root@xuegod63 ~]# docker inspect 容器实例ID #查看容器的详细情况
进入容器,测试网络:
[root@xuegod63 ~]# docker exec -it e4698f625a56 /bin/bash #进入容器
[root@6e38ee3f9672 /]# cat /etc/resolv.conf
Generated by NetworkManager
search xuegod63.cn
nameserver 114.114.114.114
[root@e4698f625a56 /]# yum install -y net-tools #安装ifconfig命令
[root@e4698f625a56 /]# ifconfig
eth1: flags=4163
inet<font style="color:#FF0000;"> 192.168.1.71</font> netmask 255.255.255.0 broadcast 192.168.1.255
[root@e4698f625a56 /]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
到此,docker实例配置静态IP成功。
实战1: 使用静态IP启动的docker实例运行,一个web服务器
[root@1e1db6c6c17c ~]# yum install httpd -y #安装
[root@1e1db6c6c17c ~]# systemctl start httpd #这个方式,无法启动
Failed to get D-Bus connection: Operation not permitted
[root@1e1db6c6c17c ~]# /usr/sbin/httpd -DFOREGROUND & #直接运行 httpd命令
AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using fe80::a0be:f1ff:feeb:484. Set the ‘ServerName’ directive globally to suppress this message
[root@1e1db6c6c17c ~]# netstat -antup | grep 80 #发现80已经监听
[root@1e1db6c6c17c ~]# cd /var/www/html/ #
[root@1e1db6c6c17c ~]# echo aaaaa > index.html
查看
扩展:非正常方法关闭docker 实例
[root@xuegod63 ~]# docker inspect 2d41d959ae01 | grep Pid #查看docker的pid
"Pid": 5306,
[root@xuegod63 ~]# kill -9 5306 #找到docker的pid,直接kill掉,也可以关闭docker。注:从而大家可以看出docker的实例就是一个进程。所以运行docker实例时,就像运行本地的一个程序,所以docker效率高。
步骤总结:
1、创建一个br0桥接设备
2、下载pipework 包并安装
3、安装并运行docker
4、导入centos docker 镜像
5、启动一个docker实例 注意加参数: —net=none —privileged=true
6、使用pipework 给docker实例配置IP
9.2 创建docker私有化仓库
9.2.1 私有仓库介绍
有时候使用Docker Hub这样的公共仓库可能不方便(有时候无法访问),用户可以创建一个本地仓库供私人使用,这里使用官方提供的工具docker-registry来配置私有库
1、使用官方提供的工具来配置
docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。
registry [ˈredʒɪstri] 记录,登记私有仓库好处:
1、节约带宽
2、可以自己定制系统
搭建私有仓库的思路: 老的思路:下载源码tar/yum安装 -》 安装-》修改配置文件-》启动服务 使用docker思路:直接下载并使用registry镜像启动docker实例,这样仓库就搭建成功了。 理解:1 不理解:2有了docker以后,所有软件不再以office.exe 或lrzsz.rpm形式发布,而以docker镜像发布。你只需要下载docker镜像并运行一个docker实例。有了docker以后,再也不用为安装linux服务而发愁!
实验环境:
docker私有仓库地址:192.168.1.63
docker服务器地址 : 192.168.1.64 ,xuegod64会使用xuegod63上docker私有仓库来pull/push镜像
实验拓扑图:
9.2.2 配置xuegod63为docker私有仓库
- 关闭防火墙
[root@xuegod63 ~]# systemctl stop firewalld && systemctl disable firewalld
[root@xuegod63 ~]# systemctl restart docker #要重启一下docker的
[root@xuegod63 ~]# iptables -L -n #查看规则时,发现即使关了firewalld,docker服务也会调用Netfilter内核模块,新增加防火墙转发规则。
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)target prot opt source destination
DOCKER-ISOLATION all — 0.0.0.0/0 0.0.0.0/0
DOCKER all — 0.0.0.0/0 0.0.0.0/0
ACCEPT all — 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all — 0.0.0.0/0 0.0.0.0/0
ACCEPT all — 0.0.0.0/0 0.0.0.0/0
- 关闭selinux
[root@xuegod63 ~]# vim /etc/sysconfig/selinux
改:SELINUX = enforcing
为:SELINUX=disabled
[root@xuegod63 ~]#reboot
[root@xuegod63 ~]# getenforce
Disabled
9.2.3 配置xuegod63为docker私有仓库服务端
1.启动docker
[root@xuegod63 ~]# systemctl start docker
2.拉取registry 镜像。 registry镜像中包括搭建本地私有仓库的软件:
registry [ˈredʒɪstri] 记录,登记 ; pull 拉 ; push 推把registry.tar上传到Linux上
方法一:导入本地镜像:
[root@xuegod63 ~]# docker load -i registry.tar
方法二: 在线导入镜像,比较慢
[root@xuegod63 ~]# docker pull registry
Using default tag: latest
Trying to pull repository docker.io/library/registry …
latest: Pulling from docker.io/library/registry
。。。
acf34ba23c50: Waiting
error pulling image configuration: Get https://dseasb33srnrn.cloudfront.net/registry-v2/docker/registry/v2/blobs/sha256/13/136c8b16df203ef26b2f39e24bd3f403b63be67610ec99a5b5af0cceac5c1b51/data?Expires=1491661458&Signature=VpBWJnckUbRqJol8EWTw2ZswQ-xOjrbqDfUstwjJwA55NoaOlESDpUC2AOloQXQRXx~F7-DGwaOY4bjJpdymnVhyv5ylO2ZB1tlkgANsNYhyoKOSyT8IycW94Cee~GaXqdcwkdECsLqWbRW1S297k4jK2GXTtaZqUsBrrmx3oAQ_&Key-Pair-Id=APKAJECH5M7VWIS5YZ6Q: EOF 注: 这是因为访问不了国外的网址导致的。 下载registry镜像时,有时会访问不到国外网站,导致下载失败 解决:多再试试几次, 终于一次,你不会被墙,可以访问成功的。或者直接换个局域网下载。或者使用学神的云主机进行下载。 3. 查看registry镜像 [root@xuegod63 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry latest 047218491f8c 3 weeks ago 33.17 MB 扩展:.io域名 .io 是[british indian ocean territory] 英属印度洋领地的简写 4. 实战:使用registry镜像搭建一个私有仓库使用registry镜像搭建一个私有仓库。 registry镜像中已经把搭建私有库程序安装好了,我只需要使用registry镜像运行一个docker实例就可以了。
默认情况下,Registry程序的存放镜像信息的目录是/var/lib/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地物理机一个目录如/opt/registry挂载到容器的/var/lib/registry下。使用-v参数,指定本地持久的路径。
registry服务监听到端口号,默认是5000
docker run -d -p 5000:5000 -v /opt/registry:/var/lib/registry registry:latest
e4698f625a56661edd2678269215ba42d4fa41c2da881768a741a72b4a3d0c60
[root@xuegod63 ~]# ls /opt/registry # 这个目录会自动创建
[root@xuegod63 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e4698f625a56 registry “/entrypoint.sh /etc/“ 7 minutes ago Up 6 minutes 0.0.0.0:5000->5000/tcp suspicious_colden
[root@xuegod63 ~]# netstat -antup | grep 5000
tcp6 0 0 :::5000 :::* LISTEN 4032/docker-proxy
说明,私有库已经启动成功。 查看私有仓库中的镜像列表:http://192.168.1.63:5000/v2/_catalog #发现,现在还是空的,后期上传了本地docker镜像到私有仓库中,就有数据了。
- 在xuegod64上搭建docker服务并使用私有仓库
9.2.4 配置docker使用私有仓库
开启CENTOS7.4-64-64虚拟机:
- 在线安装docker
安装docker环境依赖
[root@xuegod64 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
配置国内docker的yum源(阿里云)
[root@xuegod64 ~]# yum-config-manager —add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker-ce
[root@xuegod64 ~]# yum install docker-ce docker-ce-cli containerd.io -y
[root@xuegod64 ~]# systemctl start docker && systemctl enable docker
- 修改docker配置文件,指定docker镜像加速结点为:私有仓库的地址
[root@xuegod64 ~]# vim /etc/docker/daemon.json #创建这个daemon.json文件,写入以下内容:
{ “insecure-registries”: [ “192.168.1.63:5000” ] }注:添加红色标记文字。 —insecure-registry不安全的注册。这里的不安全指的是走http协议,要想安全传输镜像,需要使用https协议。我们的私有仓库一般是局域中使用,所以直接使用http协议就可以了。
[root@xuegod64 ~]# systemctl restart docker #启动docker服务
9.2.5 实战-上传本地镜像到私有仓库
- 从Docker HUB 上拉取一个测试镜像,名字: busybox
方法一:本地导入
上传busybox.tar镜像到Linux系统上,作为测试镜像。
[root@xuegod64 ~]# docker load -i busybox.tar
[root@xuegod64 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 00f017a8c2a6 2 weeks ago 1.11 MB 方法二:在线安装 [root@xuegod64 opt]# docker pull busybox Using default tag: latest Trying to pull repository docker.io/library/busybox … latest: Pulling from docker.io/library/busybox 注: BusyBox 概述: BusyBox是一个集成了一百多个最常用Linux命令和工具的软件。BusyBox 包含了BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的shell。 瑞士军刀见过:1 没有:2官网: www.busybox.net
实验拓扑图:
在xuegod64上,上传busybox镜像到xuegod63的docker私有仓库中。
- 创建镜像链接或为基础镜像打个标签(复制一个镜像并起一个名字)
执行:
docker tag busybox:latest 192.168.1.63:5000/busybox:latest
注: 不写镜像标签,默认是:latest
[root@xuegod64 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.1.63:5000/busybox latest 00f017a8c2a6 2 weeks ago 1.11 MB 3. 将刚新打好标签的192.168.1.63:5000/busybox镜像,push到本地私有仓库中。 [root@xuegod64 ~]# docker push 192.168.1.63:5000/busybox 4.登录xuegod63上,查看镜像的存储目录和文件[root@xuegod63 ~]# rpm -ivh /mnt/Packages/tree-1.6.0-9.el7.x86_64.rpm
[root@xuegod63 ~]# tree /opt/registry/docker/registry/v2/repositories/
/opt/registry/docker/registry/v2/repositories/
└── busybox #可以看到上传的镜像
访问http://192.168.1.63:5000/v2/_catalog 可以查看私有仓库中的镜像列表,如下图:
9.2.6 实战-使用私有仓库中的镜像创建服务
删除镜像:
语法: docker rmi 镜像名:标签
[root@xuegod64 ~]# docker rmi 192.168.1.63:5000/busybox #删除镜像
[root@xuegod64 ~]# docker pull 192.168.1.63:5000/busybox #下载镜像
[root@xuegod64 ~]# docker images #查看导入的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.1.63:5000/busybox latest 00f017a8c2a6 2 weeks ago 1.11 MB 使用新导入的镜像,运行一个新docker实例: [root@xuegod64 ~]# docker run 192.168.1.63:5000/busybox:latest echo “hello”hello 运行成功。 总结 搭建私有仓库步骤:
1、把registry镜像导入docker
2、基于registry镜像运行一个docker实例,registry默认监听5000端口
导入镜像到私有仓库步骤:1、安装docker服务
2、修改docker 服务 镜像源,改成私有仓库地址: “insecure-registries”: [ “192.168.1.63:5000” ]
3、把要导入的镜像打个标签如: 192.168.1.63:5000/busybox:latest
4、上传打了标签的镜像到私有仓库: docker push 192.168.1.63:5000/busybox:latest
私有仓库的使用:1、修改docker 服务 镜像源,改成私有仓库地址: “insecure-registries”: [ “192.168.1.63:5000” ]
2、下载刚才上传的镜像 : docker pull 192.168.1.63:5000/busybox:latest
3、查看私有仓库中的镜像列表:http://192.168.1.63:5000/v2/_catalog
9.2.7 实战-使用 harbor 搭建Docker私有仓库
harbor介绍
Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
官网地址:https://github.com/goharbor/harbor
harbor [‘hɑ:bə] 海湾
实验环境:使用高配版虚拟机
将原来的xuegod63机器关了, 开一个高配版虚拟机
注:安装harbor,系统根分区的可用空间需要大于6G,否则安装时会报空间不足。内存2G以上
- 安装docker服务
关闭防火墙
[root@xuegod63 ~]# systemctl stop firewalld && systemctl disable firewalld
安装docker环境依赖
[root@xuegod63 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
配置国内docker的yum源(阿里云)
[root@xuegod63 ~]# yum-config-manager —add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker-ce
[root@xuegod63 ~]# yum install docker-ce docker-ce-cli containerd.io -y
[root@xuegod63 ~]# systemctl start docker && systemctl enable docker
安装docker-compose
在线安装:
[root@xuegod63 ~]# curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s-
uname -m` > /usr/local/bin/docker-compose
添加执行权限
[root@xuegod63 ~]# chmod +x /usr/local/bin/docker-compose
离线安装:
github地址:https://github.com/docker/compose/releases/
下载二进制文件上传至linux(课程资料已提供docker-compose二进制文件可直接上传)
[root@xuegod63 ~]# rz
[root@xuegod63 ~]# mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
添加执行权限
[root@xuegod63 ~]# chmod +x /usr/local/bin/docker-compose
注: docker-compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Docker-Compose的工程配置文件默认为docker-compose.yml,Docker-Compose运行目录下的必要有一个docker-compose.yml。docker-compose可以管理多个docker实例。
- 安装Harbor私有仓库
下载Harbor安装文件
wget http://harbor.orientsoft.cn/harbor-v1.5.0/harbor-offline-installer-v1.5.0.tgz
注:此文件有800M左右大小,建议大家提前下载好后,上传到linux系统上。
[root@xuegod63 ~]# tar zxvf harbor-offline-installer-v1.5.0.tgz -C /opt
配置Harbor
[root@xuegod63 ~]# vim /opt/harbor/harbor.cfg #查看配置文件中的基本信息
hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost
改: 7 hostname = reg.mydomain.com
为: 7 hostname = 192.168.1.63
启动Harbor后,管理员UI登录的密码,默认是Harbor12345,改为123456
改:68 harbor_admin_password = Harbor12345
为:68 harbor_admin_password = 123456
以下3处,默认就可以了
访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
11 ui_url_protocol = http
27 secretkey_path = /data # 这是密钥存储路径,需要稍后手动创建这个目录
mysql数据库root用户默认密码root123,实际使用时修改下
133 db_password = root123
建存储数据的目录:
[root@xuegod63 ~]# mkdir /data
注:后期的私有库中的镜像存放路径是:/data/registry/
- 部署启动 Harbor
[root@xuegod63 ~]# cd /opt/harbor
[root@xuegod63 harbor]# ./prepare #初始化安装环境
注:配置文件已准备好,请使用Docker Compose启动服务。
[root@xuegod63 harbor]# ls /data/ #这是密钥
secretkey
安装harbor
[root@xuegod63 harbor]# ./install.sh #执行./install.sh,Harbor服务就会根据当期目录下的/opt/harbor/docker-compose.yml 开始下载依赖的镜像,检测并按照顺序依次启动各个服务。最终弹出以下画面,说明安装成功了。
查看Harbor依赖的镜像及启动服务如下:
查看镜像:
- 使用harbor管理镜像
登录 http://192.168.1.63/harbor/sign-in 用户:admin 密码:123456
- 新建一个创库项目
我们新建一个名称为xuegod-web的项目,设置公开。注意:当项目设为公开后,任何人都有此项目下镜像的读权限。命令行用户不需要“docker login”就可以拉取此项目下的镜像。
- 修改本地docker服务使用http协议和私有仓库通信
在daemon.json中添加以下参数
[root@xuegod63 ~]# vim /etc/docker/daemon.json #创建此文件,并写入以下内容
{ “insecure-registries”: [ “192.168.1.63” ] }如图:
注:出现这问题的原因是:Docker自从1.3.X之后docker registry交互默认使用的是HTTPS,但是搭建私有镜像默认使用的是HTTP服务,所以需要加上这一行。 不然docker没有办法往私有仓库中上传镜像。
重启docker服务:
[root@xuegod63 harbor]# systemctl daemon-reload && systemctl restart docker
- 将harbor启动
之前重启docker服务时,把harhor服务也关了,所以需要再启动一下harbor。
你可以使用docker-compose来启动或关闭Harbor服务。但必须在与docker-compose.yml相同的目录中运行。 compose [kəmˈpəʊz] 组成
[root@xuegod63 ~]# cd /opt/harbor/
[root@xuegod63 harbor]# docker-compose stop # 停止harbor
[root@xuegod63 harbor]# docker-compose start
登录私有仓库:
[root@xuegod63 harbor]# docker login 192.168.1.63
Username: admin
Password: 123456
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@xuegod63 harbor]# docker images #将本地的vmware/redis-photon 镜像,上传到私有仓库。默认已经有这个镜像,我就直接使用这个镜像,不上传了。
REPOSITORY TAG IMAGE ID CREATED SIZE
vmware/redis-photon v1.5.0 7c03076402d9 9 months ago 207 MB admin登录 [root@xuegod63 harbor]# docker login 192.168.1.63 Username: adminPassword: Login Succeeded 给镜像打tag tag的名称,可以在web界面这里查看到。


https://cr.console.aliyun.com/cn-hangzhou/repositories ,在此页面中点击“创建命名空间”: bbsxuegod1
创建一个命名空间:配置一个访问私有仓库的密码,用户名是你登录网站的用户名。
创建镜像链接或为基础镜像打个标签
[root@xuegod63 ~]# docker login —username=446423587@qq.com registry.cn-hangzhou.aliyuncs.com # 先登录到阿里云registry Password: xuegod123 Login Succeeded 查看本地镜像名或ID[root@xuegod63 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 。。。 vmware/nginx-photon v1.5.0 e100456182fc 18 months ago 135MB [root@xuegod63 ~]# docker tag e100456182fc registry.cn-hangzhou.aliyuncs.com/bbsxuegod11/nginx-photon:v1 [root@xuegod63 ~]# docker push registry.cn-hangzhou.aliyuncs.com/bbsxuegod11/nginx-photon:v1 在阿里云上查看:
下载一个镜像:
[root@xuegod63 ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/bbsxuegod11/nginx-photon:v1 #删除镜像
[root@xuegod63 ~]# docker images #查看已经删除镜像
[root@xuegod63 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/bbsxuegod11/nginx-photon:v1 #下载镜像
[root@xuegod63 ~]# docker images
总结:
9.1 创建docker静态化IP 9.2 创建docker私有化仓库 9.3 实战-使用阿里云私有仓库存储自己的docker镜像