Docker+K8S+DevOps微服务架构师

学神IT教育:从零基础到实战,从入门到精通!

版权声明:

  1. 本系列文档为《学神IT教育》内部使用教材和教案,只允许VIP学员个人使用,禁止私自传播。否则将取消其VIP资格,追究其法律责任,请知晓!
免责声明: 本课程设计目的只用于教学,切勿使用课程中的技术进行违法活动,学员利用课程中的技术进行违法活动,造成的后果与讲师本人及讲师所属机构无关。倡导维护网络安全人人有责,共同维护网络文明和谐。

联系方式:

学神IT教育官方网站: http://www.xuegod.cn

学神K8S精英学习11群QQ群: 957231097

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图1 3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图2 3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图3

学习顾问:小语老师 学习顾问:边边老师 学神微信公众号

微信扫码添加学习顾问微信,同时扫码关注学神公众号了解最新行业动态,获取更多学习资料及答疑就业服务!

第九章 配置docker静态IP地址-配置docker私有仓库

本节所讲内容:

9.1 创建docker静态化IP 9.2 创建docker私有化仓库 9.3 实战-使用阿里云私有仓库存储自己的docker镜像

实验环境: 一个还原到之前安装了docker的虚拟机快照:

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图4

9.1 创建docker静态化IP

9.1.1 Docker的4种网络模式

  1. 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=none

IPADDR=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

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图5

把pipework-master.zip上传到Linux中

扩展:

方法2:使用git获得:

git下载链接:https://github.com/jpetazzo/pipework.git

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图6

[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

  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

  1. 使用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%的技术! 拿个本记一下,纸质的笔记只记关键词,是帮你记! 向课程上要效率!

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图7

扩展结束,接着给容器配置表态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 mtu 1500

  1. 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

查看

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图8

扩展:非正常方法关闭docker 实例

[root@xuegod63 ~]# docker inspect 2d41d959ae01 | grep Pid #查看docker的pid

  1. "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镜像

实验拓扑图:

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图9

9.2.2 配置xuegod63为docker私有仓库

  1. 关闭防火墙

[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

  1. 关闭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镜像到私有仓库中,就有数据了。

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图10

  1. 在xuegod64上搭建docker服务并使用私有仓库

9.2.4 配置docker使用私有仓库

开启CENTOS7.4-64-64虚拟机:

  1. 在线安装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

  1. 修改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 实战-上传本地镜像到私有仓库

  1. 从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

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图11

官网: www.busybox.net

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图12

实验拓扑图:

在xuegod64上,上传busybox镜像到xuegod63的docker私有仓库中。

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图13

  1. 创建镜像链接或为基础镜像打个标签(复制一个镜像并起一个名字)
语法: docker tag 原镜像名:标签 私有仓库地址/新镜像名:标签

执行:

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 可以查看私有仓库中的镜像列表,如下图:

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图14

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

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图15

harbor [‘hɑ:bə] 海湾

实验环境:使用高配版虚拟机

将原来的xuegod63机器关了, 开一个高配版虚拟机

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图16

注:安装harbor,系统根分区的可用空间需要大于6G,否则安装时会报空间不足。内存2G以上

  1. 安装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/

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图17

下载二进制文件上传至linux(课程资料已提供docker-compose二进制文件可直接上传)

[root@xuegod63 ~]# rz

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图18

[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实例。

  1. 安装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/

  1. 部署启动 Harbor

[root@xuegod63 ~]# cd /opt/harbor

[root@xuegod63 harbor]# ./prepare #初始化安装环境

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图19注:配置文件已准备好,请使用Docker Compose启动服务。

[root@xuegod63 harbor]# ls /data/ #这是密钥

secretkey

安装harbor

[root@xuegod63 harbor]# ./install.sh #执行./install.sh,Harbor服务就会根据当期目录下的/opt/harbor/docker-compose.yml 开始下载依赖的镜像,检测并按照顺序依次启动各个服务。最终弹出以下画面,说明安装成功了。

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图20

查看Harbor依赖的镜像及启动服务如下:

查看镜像:

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图21

  1. 使用harbor管理镜像

登录 http://192.168.1.63/harbor/sign-in 用户:admin 密码:123456

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图22

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图23

  1. 新建一个创库项目

我们新建一个名称为xuegod-web的项目,设置公开。注意:当项目设为公开后,任何人都有此项目下镜像的读权限。命令行用户不需要“docker login”就可以拉取此项目下的镜像。

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图24

  1. 修改本地docker服务使用http协议和私有仓库通信

在daemon.json中添加以下参数

[root@xuegod63 ~]# vim /etc/docker/daemon.json #创建此文件,并写入以下内容

{ “insecure-registries”: [ “192.168.1.63” ] }

如图:

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图25

注:出现这问题的原因是:Docker自从1.3.X之后docker registry交互默认使用的是HTTPS,但是搭建私有镜像默认使用的是HTTP服务,所以需要加上这一行。 不然docker没有办法往私有仓库中上传镜像。

重启docker服务:

[root@xuegod63 harbor]# systemctl daemon-reload && systemctl restart docker

  1. 将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

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图26

[root@xuegod63 harbor]# docker-compose start

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图27

登录私有仓库:

[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

  1. 上传镜像到私有仓库中:

    [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: admin
Password: Login Succeeded 给镜像打tag tag的名称,可以在web界面这里查看到。 3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图28 格式:docker tag SOURCE_IMAGE[:TAG] 192.168.1.63/xuegod-web/IMAGE[:TAG] [root@xuegod63 harbor]# docker tag vmware/redis-photon:v1.5.0 192.168.1.63/xuegod-web/vmware/redis-photon:v1.5.0 push到仓库 [root@xuegod63 harbor]# docker push 192.168.1.63/xuegod-web/vmware/redis-photon:v1.5.0 在web界面查看上传到仓库中的镜像: 3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图29 从私有仓库pull镜像 首先删除本地镜像: [root@xuegod63 ~]# docker rmi 192.168.1.63/xuegod-web/redis-photon:v1.5.0 pull私有仓库中的镜像: [root@xuegod63 ~]# docker pull 192.168.1.63/xuegod-web/redis-photon:v1.5.0 ## 9.3 使用阿里云私有仓库存储自己的docker镜像 登录阿里云开者平台 https://developer.aliyun.com/service 并登录自己的帐号,没有帐号自己注册一下。

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图30

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图31

https://cr.console.aliyun.com/cn-hangzhou/repositories ,在此页面中点击“创建命名空间”: bbsxuegod1

创建一个命名空间:

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图32

配置一个访问私有仓库的密码,用户名是你登录网站的用户名。

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图33

创建镜像仓库:

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图34

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图35

仓库名称是:nginx-photon

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图36

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图37

点管理,查看使用方法:

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图38

点开管理页面,查看操作指南:

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图39

开始使用阿里云私有仓库 登录阿里云docker registry: [root@xuegod64 ~]# docker login —username=446423587@qq.com registry.cn-hangzhou.aliyuncs.com 登录registry的用户名是您的阿里云账号全名,密码是您开通服务时设置的密码。 我的密码是: xuegod123 ,你别使用我的密码,你使用自己的密码。 登录xuegod63将本地镜像vmware/nginx-photon推送到阿里云registry:

创建镜像链接或为基础镜像打个标签

[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 在阿里云上查看:

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图40

3-配置docker静态IP地址-配置docker私有仓库-笔记-v7 - 图41

下载一个镜像:

[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镜像