Linux云计算架构-docker容器配置静态IP地址、配置registry私有仓库、配置harbor私有仓库、使用aliyun的容器镜像服务

Linux云计算架构-docker容器配置静态IP地址、配置registry私有仓库、配置harbor私有仓库、使用aliyun的容器镜像服务

1. 配置docker容器静态IP地址

Docker的网络模式:

Docker网络模式用法及备注
host模式--net=host
container模式--net=container:NAME_OR_ID
none模式--net-none
bridge模式--net=bridge,默认选择桥接模式,容器启动后通过DHCP获取一个动态IP地址。相当于VMware中的NAT模式。
pipework脚本分配固定IP相当于VMware中的桥接模式。容器重启后IP设置会自动消失,需重新设置。

例1:启动一个docker实例,网络模式为none,开启docker特权模式

# 开启特权,则容器内的root用户拥有root权限。未开启特权,容器内的root用户仅拥有普通用户的权限。
# 若要执行mount操作,必须开启特权
# --privileged=true

[root@server ~]# docker run -itd --net=none --name docker1 --privileged=true centos:latest /bin/bash
daf14e2544b1001523fd7dc08e3e324d2f698d5f970947fc9540ec176d9d1989
[root@server ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
daf14e2544b1        centos:latest       "/bin/bash"         24 seconds ago      Up 23 seconds                           docker1
[root@server ~]# docker exec -it daf14e2544b1 /bin/bash
[root@daf14e2544b1 /]# mount -o bind /etc /opt
[root@daf14e2544b1 /]# ls /opt   # 可以看到/opt目录下的文件就是/etc下的文件,即将/etc目录挂载到/opt目录下
BUILDTIME		 inputrc		   rc.d
GREP_COLORS		 iproute2		   rc.local
NetworkManager		 issue			   rc0.d
X11			 issue.net		   rc1.d

# 可以对目标目录取消挂载
[root@daf14e2544b1 /]# umount /opt        
[root@daf14e2544b1 /]# ls /opt
[root@daf14e2544b1 /]# mount -o bind /etc /opt
[root@daf14e2544b1 /]# ls /opt
BUILDTIME		 inputrc		   rc.d
GREP_COLORS		 iproute2		   rc.local
NetworkManager		 issue			   rc0.d
X11			 issue.net		   rc1.d

配置网桥并使用pipework脚本配置静态IP地址:

# 下载bridge-utils工具搭建网桥
[root@server ~]# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/bridge-utils-1.5-9.el7.x86_64.rpm
[root@server ~]# ll bridge-utils-1.5-9.el7.x86_64.rpm 
-rw-r--r-- 1 root root 32480 7月   4 2014 bridge-utils-1.5-9.el7.x86_64.rpm
[root@server ~]# rpm -ivh bridge-utils-1.5-9.el7.x86_64.rpm 

# 备份本地网卡ens32,然后修改ens32网卡配置文件使用br0网桥上网
[root@server ~]# cd /etc/sysconfig/network-scripts/
[root@server network-scripts]# cp ifcfg-ens32 /opt/
[root@server network-scripts]# ll /opt/ifcfg-ens32
-rw-r--r-- 1 root root 321 10月 11 22:27 /opt/ifcfg-ens32
# 编辑网卡配置文件,注释IP地址、子网掩码、网关地址、DNS地址
# 最后一行加上BRIDGE=br0
[root@server network-scripts]# vim ifcfg-ens32 
BOOTPROTO=none
BRIDGE=br0

# 创建网卡配置文件ifcfg-br0【br0网桥】
[root@server network-scripts]# vim ifcfg-br0
DEVICE="br0"
NM_CONTROLLED="yes" 
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=none
IPADDR=192.168.43.10    # 192.168.43.网段的IP地址
NETMASK=255.255.255.0
GATEWAY=192.168.43.1
DNS1=114.114.114.114

# 重启网络,并查看网卡情况
[root@server network-scripts]# systemctl restart network
[root@server network-scripts]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.43.10  netmask 255.255.255.0  broadcast 192.168.43.255
        inet6 fe80::20c:29ff:feeb:d724  prefixlen 64  scopeid 0x20<link>
        inet6 2408:84f3:c43:e4a3:20c:29ff:feeb:d724  prefixlen 64  scopeid 0x0<global>
        ether 00:0c:29:eb:d7:24  txqueuelen 1000  (Ethernet)
        RX packets 16  bytes 1541 (1.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 50  bytes 6344 (6.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@server network-scripts]# ping -c 2 www.baidu.com    # 可以看到网卡设备br0已经通过网桥ens32连接外网了。
PING www.a.shifen.com (163.177.151.109) 56(84) bytes of data.
64 bytes from 163.177.151.109 (163.177.151.109): icmp_seq=1 ttl=53 time=50.8 ms
64 bytes from 163.177.151.109 (163.177.151.109): icmp_seq=2 ttl=53 time=57.8 ms

--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1004ms
rtt min/avg/max/mdev = 50.828/54.319/57.810/3.491 ms

# 下载并配置pipework脚本
下载地址:https://github.com/jpetazzo/pipework/archive/master.zip
[root@server ~]# wget https://github.com/jpetazzo/pipework/archive/master.zip
[root@server ~]# ll master.zip 
-rw-r--r-- 1 root root 19668 10月 11 22:45 master.zip
[root@server ~]# unzip master.zip
[root@server ~]# ll /root/pipework-master/pipework
-rwxr-xr-x 1 root root 15675 10月 11 22:46 /root/pipework-master/pipework
[root@server ~]# cp /root/pipework-master/pipework /usr/local/bin/    # 复制到该目录下方便使用。

# pipework语法:pipework 网桥名 容器实例ID 分配给容器的静态IP/掩码@网关
# DNS地址和docker服务器的DNS地址是一样的,故无需指定。
# 该容器是之前创建的,具有特殊权限【--privileged=true】
# 为该容器指定静态IP地址
[root@server ~]# pipework br0 daf14e2544b1 192.168.43.11/24@192.168.43.1
[root@server ~]# ping -c 2 192.168.43.11
PING 192.168.43.11 (192.168.43.11) 56(84) bytes of data.
64 bytes from 192.168.43.11: icmp_seq=1 ttl=64 time=2.60 ms
64 bytes from 192.168.43.11: icmp_seq=2 ttl=64 time=0.130 ms

--- 192.168.43.11 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.130/1.366/2.602/1.236 ms

# 进入容器并查看IP地址
[root@server ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
daf14e2544b1        centos:latest       "/bin/bash"         48 minutes ago      Up 48 minutes                           docker1
[root@server ~]# docker exec -it daf14e2544b1 /bin/bash
[root@daf14e2544b1 /]# ifconfig
bash: ifconfig: command not found
[root@daf14e2544b1 /]# yum install net-tools -y
[root@daf14e2544b1 /]# ifconfig
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.43.11  netmask 255.255.255.0  broadcast 192.168.43.255
        ether 42:b9:53:08:43:cc  txqueuelen 1000  (Ethernet)
        RX packets 4966  bytes 9105161 (8.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3220  bytes 221698 (216.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 安装httpd服务,并配置index.html,启动并加入开机自启动
[root@daf14e2544b1 /]# yum install httpd -y
[root@daf14e2544b1 /]# vi /etc/httpd/conf/httpd.conf 
     98 ServerName localhost:80
[root@daf14e2544b1 /]# /usr/sbin/httpd 
[root@daf14e2544b1 /]# netstat -antup |grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      136/httpd  
[root@daf14e2544b1 /]# echo "image httpd" >> /var/www/html/index.html
[root@daf14e2544b1 /]# exit
exit

# 浏览器打开网页,看是否能够正常打开。
# 可以看到是可以直接访问容器中的apache的。
http://192.168.43.11/ 

在这里插入图片描述

2. 创建registry私有仓库

配置docker私有仓库,可以减少带宽,个性化定制系统。【Docker hub是一个公开的仓库。】

1. 关闭防火墙、关闭selinux
[root@registry ~]# systemctl stop firewalld
[root@registry ~]# systemctl disable firewalld
[root@registry ~]# vim /etc/selinux/config 
SELINUX=disabled
能重启服务器的可以重启服务器,不可以重启服务器的就临死设置selinux策略为Permissive。
[root@registry ~]# getenforce
Enforcing
[root@registry ~]# setenforce 0
[root@registry ~]# getenforce 
Permissive

2. 安装docker服务
# 不懂安装docker服务的可以看我另一篇博客。
# 若有如下报错,可以单独下载依赖包并安装。
错误:软件包:containerd.io-1.3.7-3.1.el7.x86_64 (docker-ce-stable)
          需要:container-selinux >= 2:2.74
[root@registry ~]# wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm
[root@registry ~]# rpm -ivh container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm 

3. 拉取registry镜像
本地导入:docker load -i registry.tar
在线拉取:docker pull registry
[root@registry ~]# docker search registry
NAME                                 DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
registry                             The Docker Registry 2.0 implementation for s…   3088                [OK]                
[root@registry ~]# docker pull registry

4. 查看registry镜像
[root@registry ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
registry            latest              2d4f4b5309b1        3 months ago        26.2MB

5. 使用registry镜像创建一个docker实例
[root@registry ~]# docker run -itd --name docker1 --restart=always -h registry_server -p 5000:5000 -v /opt/registry:/var/lib/registry registry:latest
f36ffb13f2f20ee7588d0a88a16051331e4499934a049e4690570a2a643ea660
[root@registry ~]# netstat -antup |grep 5000
tcp6       0      0 :::5000                 :::*                    LISTEN      10961/docker-proxy  
[root@registry ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
f36ffb13f2f2        registry:latest     "/entrypoint.sh /etc…"   23 seconds ago      Up 22 seconds       0.0.0.0:5000->5000/tcp   docker1
[root@registry ~]# ls /opt/registry/

6. 查看私有仓库的镜像列表,建议使用谷歌浏览器,IE浏览器打开默认会直接下载json文件。
http://192.168.43.76:5000/v2/_catalog
至此,docker私有仓库已经配置完毕。

首次打开如下,没有存放镜像。
在这里插入图片描述
为docker服务器配置镜像加速节点:

7. 为docker服务器配置docker私有仓库镜像加速节点
insecure-registries 不安全注册,通过http协议传输,一般在局域网中使用。如果需要安全传输镜像,需要使用https协议。【docker默认使用https协议】
[root@server ~]# vim /etc/docker/daemon.json
{
  "insecure-registries":["192.168.43.76:5000"]
}

8. 重启docker服务
[root@server ~]# systemctl daemon-reload
[root@server ~]# systemctl restart docker

registry程序存放镜像信息的目录是/var/lib/registry,假设已经存放了100个镜像,当这个容器被删除,那么这100个镜像也会被删除,这当然不是我们想看到的。故在使用registry镜像创建容器实例时可以使用-v参数做一个数据映射,将存放在容器的/var/lib/registry目录下的镜像都同步到指定本地目录,这样当容器被删除时,只需重新创建一个容器即可。
registry程序默认占用5000端口号。

测试push、pull、rmi、run等操作:

# 查询并拉取镜像busybox
[root@server ~]# docker search busybox
[root@server ~]# docker pull busybox

# 为镜像打标签,打上标签就可以push到私有仓库中
[root@server ~]# docker images
busybox             latest              6858809bf669        4 weeks ago         1.23MB
[root@server ~]# docker tag busybox:latest 192.168.43.76:5000/busybox:latest
[root@server ~]# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
192.168.43.76:5000/busybox   latest              6858809bf669        4 weeks ago         1.23MB
busybox                      latest              6858809bf669        4 weeks ago         1.23MB

# 推送镜像到私有仓库
[root@server ~]# docker push 192.168.43.76:5000/busybox:latest
The push refers to repository [192.168.43.76:5000/busybox]
be8b8b42328a: Pushed 
latest: digest: sha256:2ca5e69e244d2da7368f7088ea3ad0653c3ce7aaccd0b8823d11b0d5de956002 size: 527

可以看到已经有一个镜像在私有仓库了。
在这里插入图片描述
从私有仓库拉取镜像,并创建容器:

[root@server ~]# docker rmi 192.168.43.76:5000/busybox:latest 
Untagged: 192.168.43.76:5000/busybox:latest
Untagged: 192.168.43.76:5000/busybox@sha256:2ca5e69e244d2da7368f7088ea3ad0653c3ce7aaccd0b8823d11b0d5de956002
[root@server ~]# docker pull 192.168.43.76:5000/busybox:latest
latest: Pulling from busybox
Digest: sha256:2ca5e69e244d2da7368f7088ea3ad0653c3ce7aaccd0b8823d11b0d5de956002
Status: Downloaded newer image for 192.168.43.76:5000/busybox:latest
192.168.43.76:5000/busybox:latest
[root@server ~]# docker images
192.168.43.76:5000/busybox   latest              6858809bf669        4 weeks ago         1.23MB
[root@server ~]# docker run -it 192.168.43.76:5000/busybox:latest echo "haha"
haha

3. 创建Harbor私有仓库

Harbor项目是由VMWare公司开源的企业级的Docker Registry管理项目,它包括权限管理、LDAP、日志审核、管理界面、自我注册、镜像复制、支持中文等功能。

docker-compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。配置文件为docker-compose.yml,docker-compose运行目录下必须要有一个配置文件。可以管理多个docker容器实例。
官网地址https://github.com/goharbor/harbor

# 以下进入py3的虚拟环境中安装
1. 安装docker服务【同上】
[root@registry ~]# source /root/py3/bin/activate
(py3) [root@registry ~]# python -V
Python 3.9.0a1
(py3) [root@registry ~]# docker --version
Docker version 19.03.13, build 4484c46d9d

2. 安装docker-compose
# 下载python-pip慢的话,可以参考我的博客,有解决方法。
(py3) [root@registry ~]# yum install epel-release -y
(py3) [root@registry ~]# yum install python-pip -y
(py3) [root@registry ~]# pip install --upgrade pip       # 第一次升级失败,可以多试几次。
(py3) [root@registry ~]# pip --version
pip 20.2.3 from /root/py3/lib/python3.9/site-packages/pip (python 3.9)
# 安装docker-compose报错了可以参考我的博客,或留言评论。
(py3) [root@registry ~]# pip install -U -i https://pypi.tuna.tsinghua.edu.cn/simple docker-compose
(py3) [root@registry ~]# docker-compose -version
docker-compose version 1.27.4, build unknown

3. 下载harbor私有仓库
下载站点:https://github.com/goharbor/harbor/releases
下载地址:https://github.com/goharbor/harbor/releases/download/v2.1.0/harbor-offline-installer-v2.1.0.tgz

在这里插入图片描述

4. 上传harbor离线包到服务器,并配置安装harbor私有仓库
(py3) [root@registry ~]# ll harbor-offline-installer-v2.1.0.tgz 
-rw-r--r-- 1 root root 556130191 10月 14 21:12 harbor-offline-installer-v2.1.0.tgz
(py3) [root@registry ~]# tar xzf harbor-offline-installer-v2.1.0.tgz -C /opt
(py3) [root@registry ~]# cd /opt/harbor/
(py3) [root@registry harbor]# ll
总用量 545264
-rw-r--r-- 1 root root      3361 9月  16 10:48 common.sh
-rw-r--r-- 1 root root 558317240 9月  16 10:49 harbor.v2.1.0.tar.gz
-rw-r--r-- 1 root root      8136 9月  16 10:48 harbor.yml.tmpl
-rwxr-xr-x 1 root root      2523 9月  16 10:48 install.sh
-rw-r--r-- 1 root root     11347 9月  16 10:48 LICENSE
-rwxr-xr-x 1 root root      1881 9月  16 10:48 prepare
# 复制一份harbor.yml文件,并进行配置
(py3) [root@registry harbor]# cp harbor.yml.tmpl harbor.yml
(py3) [root@registry harbor]# vim harbor.yml
  5 hostname: 192.168.43.76           # 访问地址
  8 http:
  9   # port for http, default is 80. If https enabled, this port will redirect to     https port
 10  port: 80
 11 
 12 # https related config
 13 # https:       # 这里由于没有给nginx配置https协议安全传输,故直接使用http,要把https的相关信息注释掉
 14   # https port for harbor, default is 443
 15   # port: 443
 16   # The path of cert and key files for nginx
 17   # certificate: /your/certificate/path
 18   # private_key: /your/private/key/path
 34 harbor_admin_password: 123456      # harbor管理员登录UI界面的密码,这里修改为123456
 39   password: root123

# harbor准备
(py3) [root@registry ~]# cd /opt/harbor/
(py3) [root@registry harbor]# ./prepare 
(py3) [root@registry harbor]# ./install.sh

在这里插入图片描述
在这里插入图片描述
至此,harbor私有仓库就算安装成功了。
可以看到harbor依赖的镜像和运行的容器如下:
在这里插入图片描述
在这里插入图片描述
打开网址http://192.168.43.76/harbor/sign-in
在这里插入图片描述
默认账号密码为:admin/123456

5. 为docker服务器配置为私有仓库的镜像加速节点
[root@server ~]# vim /etc/docker/daemon.json
{
"insecure-registries":["192.168.43.76"]
}
[root@server ~]# systemctl daemon-reload && systemctl restart docker
# 如果docker服务器和harbor私有仓库配置在同一台主机上,在重启docker服务后,会关闭harbor服务,故还需重启harbor服务。【可以理解为停止harbor依赖的镜像,然后启动harbor依赖的镜像】
[root@registry ~]# source /root/py3/bin/activate
(py3) [root@registry ~]# cd /opt/harbor/
(py3) [root@registry harbor]# docker-compose stop
Stopping harbor-jobservice ... done
Stopping nginx             ... done
Stopping harbor-core       ... done
Stopping harbor-db         ... done
Stopping registryctl       ... done
Stopping redis             ... done
Stopping registry          ... done
Stopping harbor-portal     ... done
Stopping harbor-log        ... done
(py3) [root@registry harbor]# docker-compose start
Starting log         ... done
Starting registry    ... done
Starting registryctl ... done
Starting postgresql  ... done
Starting portal      ... done
Starting redis       ... done
Starting core        ... done
Starting jobservice  ... done
Starting proxy       ... done

创建项目:
在这里插入图片描述
在这里插入图片描述

登录私有仓库:
docker login
上传镜像到私有仓库

[root@server ~]# docker tag centos:latest 192.168.43.76/test/centos:latest
[root@server ~]# docker push 192.168.43.76/test/centos:latest
The push refers to repository [192.168.43.76/test/centos]
291f6e44771a: Pushed 
latest: digest: sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71 size: 529

在这里插入图片描述
从私有仓库下载镜像:

[root@server ~]# docker rmi 192.168.43.76/test/centos:latest
Untagged: 192.168.43.76/test/centos:latest
Untagged: 192.168.43.76/test/centos@sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71
[root@server ~]# docker pull 192.168.43.76/test/centos:latest
latest: Pulling from test/centos
Digest: sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71
Status: Downloaded newer image for 192.168.43.76/test/centos:latest
192.168.43.76/test/centos:latest
[root@server ~]# docker images 192.168.43.76/test/centos
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.43.76/test/centos   latest              0d120b6ccaa8        2 months ago        215MB

可以看到,下载次数变为1了。
在这里插入图片描述

4. 使用阿里云私有仓库

  1. 登录阿里云开发者服务平台,有一项容器镜像服务。
    https://developer.aliyun.com/service
    在这里插入图片描述
    在这里插入图片描述
    需要注册下:
    在这里插入图片描述
    注册好后,登录进去如下,设置下Registry登录密码:
    在这里插入图片描述
    2. 创建命名空间,并配置访问凭证
    创建命名空间:
    在这里插入图片描述
    在这里插入图片描述
    配置访问凭证:
    在这里插入图片描述
    3. 创建镜像仓库
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    点击镜像仓库名,会看到一份操作指南,有介绍如何登录镜像仓库拉取镜像推送镜像
    在这里插入图片描述

docker私有仓库的内容到此结束,后期有需要的话还会继续深入研究。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值