4-10-配置docker静态IP地址-配置docker私有仓库

 

 本节所讲内容:

创建docker静态化IP

创建docker私有化仓库

 

 

 实验环境: 一个全新的RHEL7.2系统

一、创建docker静态化IP

1、Docker有以下4种网络模式:host模式,使用--net=host指定。container模式,使用--net=container:NAME_or_ID指定。none模式,使用--net=none指定。

bridge模式,使用--net=bridge指定,默认设置。

默认选择bridge的情况下,容器启动后会通过DHCP获取一个地址,这可能不是我们想要的,在RHEL7系统上,docker环境下可以使用pipework脚本对容器分配固定IP(这个IP可以是和物理机同网段IP)。

注: docker 默认是bridge(--net=bridge)模式,相当于VMware中NAT模式。

docker环境下可以使用pipework脚本对容器分配固定IP,相当于VMware中桥接模式。

注:Pipework有个缺陷,容器重启后IP设置会自动消失,需要重新设置。

 

 

 实战1:安装docker并配置桥接网络

一、安装docker服务器

把docker-rpm.tar.gz 上传到RHEL7.2-63 上:

[root@xuegod63 ~]#tar zxvf docker-rpm.tar.gz

[root@xuegod63 ~]# vim /etc/yum.repos.d/docker.repo

[docker]

name=docker

baseurl=file:///root/docker-rpm

enabled=1

gpgcheck=0

安装:

[root@xuegod63 ~]# yum install docker

 

 

 方法2:在线安装

在阿里云主机,安装好centos7.2系统,直接执行:

yum  install docker#阿里云中的centos7.2系统的yum源可以支持安装docker。安装时,把软件包停留下来,做成yum源,方便后期使用。

配置yum源:

[root@xuegod63 ~]# vim /etc/yum.repos.d/extras.repo#插入以下内容

[extras]

name=CentOS-$releasever -Extras

baseurl= http://mirrors.aliyun.com/centos/7.3.1611/extras/x86_64/Packages/

gpgcheck=0

enabled=1

gpgcheck=0

安装:

yum  install docker

 

2.配置桥接网络:

桥接本地物理网络的目的,是为了局域网内用户方便访问docker实例中服务,不要需要各种端口映射即可访问服务。但是这样做,又违背了docker容器的安全隔离的原则,工作中辩证的选择.

创建桥设备:

安装包:

[root@xuegod63 ~]# rpm -ivh /mnt/Packages/bridge-utils-1.2-9.el6.x86_64.rpm

eth0绑到br0桥设备上:

[root@xuegod63 ~]# cd /etc/sysconfig/network-scripts/

[root@xuegod63 network-scripts]# cp ifcfg-eno16777736 /opt/     #备份一下eth0

[root@xuegod63 network-scripts]# vim ifcfg-eno16777736        #编辑配置文件为以下内容

[root@xuegod63 network-scripts]# vim ifcfg-eno16777736

TYPE="Ethernet"

BOOTPROTO="none"

DEFROUTE="yes"

IPV4_FAILURE_FATAL="no"

IPV6INIT="yes"

IPV6_AUTOCONF="yes"

IPV6_DEFROUTE="yes"

IPV6_FAILURE_FATAL="no"

NAME="eno16777736"

UUID="7a556ff6-f865-4549-b08f-9e526c9bb638"

DEVICE="eno16777736"

ONBOOT="yes"

IPADDR="192.168.1.63"   #删除这些IP地址相关内容

PREFIX="24"

GATEWAY="192.168.1.1"

DNS1="8.8.8.8"

IPV6_PEERDNS="yes"

IPV6_PEERROUTES="yes"

IPV6_PRIVACY="no"

BRIDGE="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",B要大写。不大写也可以。

 

[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

 

3、下载pipework

方法1:直接下载pipeworkzip

https://github.com/jpetazzo/pipework

 

 

pipework-master.zip上传到Linux

 

扩展:

方法2:使用git获得:

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

 

 

 

下载pipework工具:https://github.com/jpetazzo/pipework.git

[root@xuegod63 ~]# rpm -qf `which git`

git-1.8.3.1-5.el7.x86_64

[root@xuegod63 ~]# cd /opt/

[root@xuegod63 opt]# git clone https://github.com/jpetazzo/pipework.git

正克隆到 'pipework'...

remote: Counting objects: 497, done.

remote: Total 497 (delta 0), reused 1 (delta 0), pack-reused 496

接收对象中: 100% (497/497), 171.82 KiB | 103.00 KiB/s, done.

处理 delta : 100% (262/262), done.

 

咱们使用方法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

[root@xuegod63 ~]# ifconfig #查看网络,会发现多了一个docker0桥接设备

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 192.168.1.63 netmask 255.255.255.0 broadcast 192.168.1.255

inet6 fe80::20c:29ff:fe06:26a6 prefixlen 64 scopeid 0x20<link>

 

ether 00:0c:29:06:26:a6 txqueuelen 0 (Ethernet)

RX packets 466 bytes 237639 (232.0 KiB)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 265 bytes 23394 (22.8 KiB)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500

 

inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0

ether 02:42:85:5f:8d:8c txqueuelen 0 (Ethernet)

RX packets 0 bytes 0 (0.0 B)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 0 bytes 0 (0.0 B)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

 

eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

 

例:以none模式,使用--net=none启动一个容器,并且开启docker特权模式。

[root@xuegod63 ~]# docker run -itd --net=none --privileged=true  centos bash

e4698f625a56661edd2678269215ba42d4fa41c2da881768a741a72b4a3d0c60

扩展:

--privileged=true#允许开启特权功能

大约在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: permission denied

而在物理机是可以挂载成功的:

[root@xuegod63 ~]# mount -o bind /etc /opt/

[root@00931099722f /]# exit

 

2、使用privileged启动的容器

[root@xuegod63 ~]# docker run -it --privileged centos:latest bash

[root@4a51d0fde3ce /]# ls /dev/#可以看到很多设备文件

[root@4a51d0fde3ce /]# mount -o bind /etc/opt/#可以挂载成功

[root@4a51d0fde3ce /]# ls /opt/

[root@4a51d0fde3ce /]# init 0 #不行,还是使用exit退出docker

Couldn't find an alternative telinit implementation to spawn.

[root@4a51d0fde3ce /]# exit

 

扩展结束,接着给容器配置地址

[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 c88c4c7f01f9 192.168.1.71/24@192.168.1.1

测试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 exec -it 87fadc0249a9 /bin/bash#进入容器

[root@6e38ee3f9672 /]# cat /etc/resolv.conf

# Generated by NetworkManager

search xuegod63.cn

nameserver8.8.8.8

 

[root@e4698f625a56 /]# yum install -y net-tools#安装ifconfig命令

[root@e4698f625a56 /]# ifconfig

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet192.168.1.71netmask 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、创建一个br0桥接设备

2、下载pipework包并安装

3、安装并运行docker

4、导入centos docker 镜像

5、启动一个docker实例注意加参数:--net=none --privileged=true

6、使用pipeworkdocker实例配置IP

 

 

实战2:配置docker私有仓库

实验环境:重新还原快照到一个全新的RHEL7.2系统

有时候使用Docker Hub这样的公共仓库可能不方便(有时候无法访问),用户可以创建一个本地仓库供私人使用,这里使用官方提供的工具docker-registry来配置私有库

 

1、使用官方提供的工具来配置

docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。

 

私有仓库好处:

1、节约带宽

2、可以自己定制系统

docker-registry这个工具是一个镜像,直接下载并安装registry镜像就可以了。

有了docker以后,所有软件不再以office.exe lrzsz.rpm 形式发布,而以docker镜像发布。当安装软件并运行,就是指:下载docker镜像并运行一个docker实例。

 

实验环境:

docker私有仓库地址:192.168.1.63

docker服务器地址:192.168.1.64  ,xuegod64会使用xuegod63docker私有仓库来pull/push镜像

实验拓扑图:

 

 

 

一、配置xuegod63为docker私有仓库

1、#不能关闭防火墙,因为docker后期端口转发,需要使用firewalld

[root@xuegod63 ~]#  systemctl startfirewalld.service#必需开启防火墙,因为后面要使用5000端口进行通信

 

2、关闭selinux

[root@xuegod63 ~]#vim/etc/sysconfig/selinux

改:SELINUX=enforcing

为:SELINUX=disabled

[root@xuegod63 ~]#reboot

[root@xuegod63 ~]# getenforce

Disabled

 

3、安装docker服务器,前面做docker静态IP时,已经安装过docker服务器,这样只列出命令,不再执行。
把docker-rpm.tar.gz 上传到RHEL7.2-63 上:

[root@xuegod63 ~]#tar zxvf docker-rpm.tar.gz

[root@xuegod63 ~]# vim /etc/yum.repos.d/docker.repo

[docker]

name=docker

baseurl=file:///root/docker-rpm

enabled=1

gpgcheck=0

安装:

[root@xuegod63 ~]# yum install docker

 

二、配置docker私有仓库服务端

1.启动docker

[root@xuegod63 ~]# systemctl start docker

[root@xuegod63 ~]# vim  /etc/sysconfig/network-scripts/ifcfg-eno16777736#修改DNS地址,因为使用8.8.8.8,有时解析不docker hub地址

改:DNS1="8.8.8.8"

为:DNS1="114.114.114.114"

[root@xuegod63 ~]# systemctl restart NetworkManager

[root@xuegod63 ~]# cat /etc/resolv.conf

# Generated by NetworkManager

search xuegod63.cn

nameserver 114.114.114.114

 

2.拉取registry镜像。registry镜像中包括搭建本地私有仓库的软件:

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

709515475419: Downloading 195.8 kB/2.313 MB

df6e278d8f96: Retrying in 5 seconds

4b0b08c1b8f7: Downloading 195.7 kB/6.203 MB

80119f43a01e: Waiting

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镜像时,有时会访问不到国外网站,导致下载失败

解决:使用MK给你的镜像直接导入:

[root@xuegod63 ~]# docker save -o registry.tar docker.io/registry:latest#导出镜像

例:使用导入本地镜像:

[root@xuegod63 ~]# docker load -i  registry.tar

 

3.查看registry镜像

[root@xuegod63 ~]# docker images

REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE

docker.io/registry   latest  047218491f8c        3 weeks ago         33.17 MB

扩展:.io域名

.io 是[british indian ocean territory] 英属印度洋领地的简写

 

4.从Docker HUB 上拉取一个镜像测试

方法一:本地导入

上传busybox.tar镜像到Linux系统上,作为测试镜像。

[root@xuegod63 ~]# docker load -i  busybox.tar

[root@xuegod63 ~]# docker images

REPOSITORY           TAG    IMAGE ID            CREATED             SIZE

docker.io/busybox    latest  00f017a8c2a6        2 weeks ago         1.11 MB

docker.io/registry   latest              047218491f8c        3 weeks ago         33.17 MB

注:

BusyBox 概述:BusyBox是一个集成了一百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将BusyBox 称为Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了Linux 的许多工具和命令,也包含了Android 系统的自带的shell。

官网:www.busybox.net

 

 

 

方法二:在线安装

[root@xuegod63 opt]# docker pull busybox

Using default tag: latest

Trying to pull repository docker.io/library/busybox ...

latest: Pulling from docker.io/library/busybox

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

语法:dockertag镜像名:标签私有仓库地址/镜像名:标签

[root@xuegod63~]# docker tag docker.io/busybox 192.168.1.63:5000/busybox:latest

注:不写镜像标签,默认是:latest

[root@xuegod63 ~]# docker images

REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE

192.168.1.63:5000/busybox   latest     00f017a8c2a6        2 weeks ago         1.11 MB

docker.io/busybox           latest              00f017a8c2a6        2 weeks ago         1.11 MB

docker.io/registry          latest              047218491f8c        3 weeks ago         33.17 MB

也可以这样:

[root@xuegod63 ~]#  docker tag docker.io/busybox192.168.1.63:5000/busybox:v1

 

6.修改docker配置文件,指定私有仓库url

docker 配置需要安装docker-common-1.12.6-11.el7.centos.x86_64这个包,不然没有配置文件。默认我已经安装了。

[root@xuegod63 ~]# rpm -qf  /etc/sysconfig/docker

docker-common-1.12.6-11.el7.centos.x86_64

[root@xuegod63 ~]# vim /etc/sysconfig/docker

改:4 OPTIONS='--selinux-enabled --log-driver=journald--signature-verification=false'

为:OPTIONS='--selinux-enabled --log-driver=journald--signature-verification=false--insecure-registry 192.168.1.63:5000'

注:在原文件后,追加红色标记文字。--insecure-registry不安全的注册。即通信使用http协议

[root@xuegod63 ~]# systemctl restart docker#启动时需要等待时间长一些

到此,所有准备工作已经完成。

 

7.使用registry镜像搭建一个私有仓库。registry镜像中已经把搭建私有库程序安装好了,我只需要使用registry镜像运行一个docker实例就可以了。

默认情况下,Registry程序的存放镜像信息的目录是/var/lib/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地物理机一个目录挂载到容器的/opt/registry下,这样两个目录下都有!

注:registry运行的实例的默认存储路径是/var/lib/registry,只是个临时目录,一段时间之后就会消失。所以使用-v参数,指定本地持久的路径。

[root@xuegod63 ~]# docker run -d -p 5000:5000 -v /opt/registry:/var/lib/registry registry

e4698f625a56661edd2678269215ba42d4fa41c2da881768a741a72b4a3d0c60

[root@xuegod63 ~]# ls/opt/registry# 这个目录会自动创建

[root@xuegod63 ~]# docker ps

CONTAINER ID        IMAGE                COMMAND                  CREATED   STATUS              PORTS                    NAMES

e4698f625a56        docker.io/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

说明,私有库已经启动成功。

 

8、将刚新打好标签的192.168.1.63:5000/busybox镜像,push到本地私有仓库中。

[root@xuegod63 ~]#  docker push 192.168.1.63:5000/busybox

The push refers to a repository [192.168.1.63:5000/busybox]

c0de73ac9968: Pushed

latest: digest: sha256:68effe31a4ae8312e47f54bec52d1fc925908009ce7e6f734e1b54a4169081c5 size: 527

 

 

 

实战2:测试私有库是否可用

在另外一台RHEL7.2-64-64系统测试pull功能

开启RHEL7.2-64-64虚拟机:

 

 

1.安装docker

[root@xuegod63 ~]# scp -r docker-rpm 192.168.1.64:/root/  

[root@xuegod63 ~]# scp /etc/yum.repos.d/docker.repo 192.168.1.64:/etc/yum.repos.d/

安装:

[root@xuegod64 ~]# yum install docker -y

 

2.修改docker配置文件,指定私有仓库url

[root@xuegod64~]#vim /etc/sysconfig/docker修改此行

改:4 OPTIONS='--selinux-enabled --log-driver=journald--signature-verification=false'

为:OPTIONS='--selinux-enabled --log-driver=journald--signature-verification=false--insecure-registry 192.168.1.63:5000'

注:添加红色标记文字。--insecure-registry不安全的注册

[root@xuegod64~]# systemctl restart docker#启动docker服务

 

3.测试,下载刚才上传的镜像

[root@xuegod64 ~]# docker pull 192.168.1.63:5000/busybox

Using default tag: latest

Trying to pull repository 192.168.1.63:5000/busybox ...

latest: Pulling from 192.168.1.63:5000/busybox

04176c8b224a: Pull complete

Digest: sha256:68effe31a4ae8312e47f54bec52d1fc925908009ce7e6f734e1b54a4169081c5

[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

运行成功。

创建镜像链接并命名:

[root@xuegod64 ~]# docker tag 192.168.1.63:5000/busybox busybox:v1

[root@xuegod64 ~]# docker images

REPOSITORYTAG        IMAGE ID            CREATED             SIZE

192.168.1.63:5000/busybox   latest     00f017a8c2a6        5 months ago   1.11 MB

busybox                     v1 00f017a8c2a6        5 months ago        1.11 MB

删除镜像:

语法:docker rmi  镜像名:标签

[root@xuegod64 ~]# docker rmi 192.168.1.63:5000/busybox:latest#删除镜像

Untagged: 192.168.1.63:5000/busybox:latest

Untagged: 192.168.1.63:5000/busybox@sha256:68effe31a4ae8312e47f54bec52d1fc925908009ce7e6f734e1b54a4169081c5

[root@xuegod64 ~]# docker images #查看镜像

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

busybox             v1                  00f017a8c2a6        5 months ago    1.11 MB

[root@xuegod64 ~]# docker run -it busybox:v1  echo aaaaaa#使用新命名的镜像运行实例

aaaaaa

posted @ 2017-09-24 21:51  北极之光的博客  阅读(34)  评论(0编辑  收藏  举报