Docker容器(五)——Docker静态化IP
(1).Docker的四种网络模式
Docker有以下四种模式,通过--net=[参数]选项(现在也可以使用--network [参数])指定:
host模式:使用宿主机的IP地址和端口。使用--net=host指定。
container模式:和一个指定容器共享IP和端口。使用--net=container:[容器实例名称或ID]指定。
none模式:关闭容器的网络功能。使用--net=none指定。
bridge模式:为容器分配IP,并将容器连接到docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置,实现与宿主机通信。默认模式,使用--net=bridge指定。
默认选择bridge的情况下,容器启动后会通过DHCP自动获取一个地址。在CentOS7系统上,docker环境下,如果想要给容器分配一个固定IP(可以和宿主机同网段),可以使用pipework脚本(网络模式选择none)。
注意1:docker默认dridge模式相当于VMware中NAT模式;pipework脚本给容器分配固定IP,相当于VMware中桥接模式。
注意2:当容器重启时,pipework设置的IP会自动消失,需要重新设置。
(2).为容器配置静态IP
1)配置桥接网络
[root@youxi1 ~]# yum -y install bridge-utils
[root@youxi1 ~]# cd /etc/sysconfig/network-scripts/
[root@youxi1 network-scripts]# cp ifcfg-ens33{,.bak}
[root@youxi1 network-scripts]# ls ifcfg-ens33*
ifcfg-ens33 ifcfg-ens33.bak
[root@youxi1 network-scripts]# vim ifcfg-ens33
#IPADDR="192.168.5.101" //注释掉IP、子网掩码、网卡、DNS
#PREFIX="24"
#GATEWAY="192.168.5.2"
#DNS1="192.168.5.2"
BRIDGE="br0" //添加桥接到br0
[root@youxi1 network-scripts]# vim ifcfg-br0 //新建br0配置文件
DEVICE="br0" //设备名称
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Bridge" //注意,B要大写
BOOTPROTO=none
IPADDR=192.168.5.101 //IP地址、子网掩码、网关、DNS要和上面注释掉的一样
NETMASK=255.255.255.0
GATEWAY=192.168.5.2
DNS1=192.168.5.2
[root@youxi1 network-scripts]# systemctl restart network //重启网络
[root@youxi1 network-scripts]# ip a sh
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether 00:0c:29:e6:d6:27 brd ff:ff:ff:ff:ff:ff
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:8b:ee:a5:51 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:e6:d6:27 brd ff:ff:ff:ff:ff:ff
inet 192.168.5.101/24 brd 192.168.5.255 scope global noprefixroute br0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fee6:d627/64 scope link
valid_lft forever preferred_lft forever
2)下载pipework
下载pipework地址:https://github.com/jpetazzo/pipework。可以在Windows上下载好后上传至CentOS放服务器,也可以使用命令git clone https://github.com/jpetazzo/pipework.git直接在CentOS服务器上下载。
[root@youxi1 network-scripts]# yum -y install unzip
[root@youxi1 network-scripts]# cd ~
[root@youxi1 ~]# unzip pipework-master.zip //解压
[root@youxi1 ~]# cp pipework-master/pipework /usr/local/bin/ //为了可以直接调用
3)为容器配置静态IP
[root@youxi1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos httpd 65f64a254fcc 6 days ago 346MB
centos latest 67fa590cfc1c 4 weeks ago 202MB
hub.c.163.com/library/tomcat latest 72d2be374029 2 years ago 292MB
[root@youxi1 ~]# docker run -itd --network none --privileged centos:latest bash
51c03944e31297272541cc035e235f326a8933d066021e945d8ea4caf8fd1c17
[root@youxi1 ~]# pipework br0 51c03944e312 192.168.5.102/24@192.168.5.2
[root@youxi1 ~]# ping 192.168.5.102
PING 192.168.5.102 (192.168.5.102) 56(84) bytes of data.
64 bytes from 192.168.5.102: icmp_seq=1 ttl=64 time=0.218 ms
64 bytes from 192.168.5.102: icmp_seq=2 ttl=64 time=0.085 ms
^C
--- 192.168.5.102 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.085/0.151/0.218/0.067 ms
[root@youxi1 ~]# systemctl stop firewalld.service //如果想ping域名以及安装net-tools,请关闭防火墙。
[root@youxi1 ~]# docker exec -it 51c03944e312 bash
[root@51c03944e312 /]# ping www.baidu.com
PING www.a.shifen.com (180.101.49.11) 56(84) bytes of data.
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=1 ttl=128 time=7.92 ms
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=2 ttl=128 time=7.99 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 7.922/7.960/7.999/0.097 ms
[root@51c03944e312 /]# yum -y install net-tools
[root@51c03944e312 /]# ifconfig
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.5.102 netmask 255.255.255.0 broadcast 192.168.5.255
ether b2:68:6f:3f:2d:dd txqueuelen 1000 (Ethernet)
RX packets 1532 bytes 8274432 (7.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1378 bytes 78622 (76.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 4 bytes 336 (336.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4 bytes 336 (336.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
注意:由于我不知道设置静态IP后需要添加什么端口,所以我将防火墙关闭了。
4)扩展
--privileged选项表示开启特权模式。在没有该选项的容器实例中,虽然显示的是root用户,其实只是宿主机(物理机)的一个普通用户,包含设备文件和部分命令在内都无法使用。如果使用了该选项就可以调用这部分内容,例如mount命令。
测试如下:
[root@youxi1 ~]# docker run -it centos:latest bash
[root@d1d63355d418 /]# ls /dev/
console fd mqueue ptmx random stderr stdout urandom
core full null pts shm stdin tty zero
[root@05b2b38259cf /]# exit
exit
[root@youxi1 ~]# docker run -it --privileged centos:latest bash
[root@08065470bd72 /]# ls /dev/ //可以看到差距相当大
agpgart mem snd tty27 tty50 usbmon1
autofs midi sr0 tty28 tty51 usbmon2
bsg mqueue stderr tty29 tty52 vcs
btrfs-control net stdin tty3 tty53 vcs1
bus network_latency stdout tty30 tty54 vcs2
console network_throughput tty tty31 tty55 vcs3
core null tty0 tty32 tty56 vcs4
cpu nvram tty1 tty33 tty57 vcs5
cpu_dma_latency oldmem tty10 tty34 tty58 vcs6
crash port tty11 tty35 tty59 vcsa
dm-0 ppp tty12 tty36 tty6 vcsa1
dm-1 ptmx tty13 tty37 tty60 vcsa2
dmmidi pts tty14 tty38 tty61 vcsa3
dri random tty15 tty39 tty62 vcsa4
fb0 raw tty16 tty4 tty63 vcsa5
fd rtc0 tty17 tty40 tty7 vcsa6
full sda tty18 tty41 tty8 vfio
fuse sda1 tty19 tty42 tty9 vga_arbiter
hidraw0 sda2 tty2 tty43 ttyS0 vhci
hpet sdb tty20 tty44 ttyS1 vhost-net
hwrng sdb1 tty21 tty45 ttyS2 vmci
input sg0 tty22 tty46 ttyS3 vsock
kmsg sg1 tty23 tty47 uhid zero
loop-control sg2 tty24 tty48 uinput
mapper shm tty25 tty49 urandom
mcelog snapshot tty26 tty5 usbmon0
参考:https://www.cnblogs.com/zuxing/articles/8780661.html
Docker容器(五)——Docker静态化IP的更多相关文章
- docker容器中布置静态网站
docker容器中布置静态网站(基于云服务器ubuntu系统) 服务器准备(ubuntu) docker nginx 静态网页制作 浏览器测试 服务器布置 这里推荐使用云服务器(阿里云.华为云.腾讯云 ...
- 创建docker静态化IP
配置桥接网络 桥接本地物理网络的目的,是为了局域网内用户方便访问 docker 实例中服务,不需要各种端口映射即可访问服务. 但是这样做,又违背了 docker 容器的安全隔离的原则,工作中辩证的选择 ...
- docker容器管理-含静态Ip(10)
docker run命令详解 docker run -t #表示分配一个伪终端 -i #表示让容器的标准输入打开,不跟这个参数容器启不来 -d #后台运行 -P #dockerfile中EXPOSE ...
- Docker(十五)-Docker的数据管理(volume/bind mount/tmpfs)
Docker提供了三种不同的方式用于将宿主的数据挂载到容器中:volumes,bind mounts,tmpfs volumes.当你不知道该选择哪种方式时,记住,volumes总是正确的选择. vo ...
- 进入正在运行的 docker 容器(docker container)
在使用 docker 容器的时候,我们总会想看看容器内部长什么样子:我们使用 docker exec 命令可以满足我们的期望: ➜ compose docker exec --help Usage: ...
- Docker容器技术-Docker架构
一.Docker系统架构 1.Docker基础架构 1)Docker守护进程 负责容器的创建.运行和监控,以及镜像的构建和存储. docker daemon 2)Docker客户端 通过HTTP与Do ...
- Docker 容器基本操作[Docker 系列-2]
Docker 入门及安装[Docker 系列-1] 镜像就像是一个安装程序,而容器则是程序运行时的一个状态. 查看容器 查看容器 启动 docker 后,使用 docker ps 命令可以查看当前正 ...
- docker容器挂载docker.sock,在容器内部直接与docker守护进程通信进行接口调用
一.docker container实现 1.docker容器启动时挂载docker.sock docker run -it -- 2.curl调用接口 curl -s --unix-socket / ...
- Docker容器管理——Docker容器常用命令
1.查看所有的容器 docker ps 2.查看运行的容器 docker ps -a 3.启动.停止.重启docker容器 docker start ... docker stop ... docke ...
随机推荐
- 评估预测函数(3)---Model selection(选择多项式的次数) and Train/validation/test sets
假设我们现在想要知道what degree of polynomial to fit to a data set 或者 应该选择什么features 或者 如何选择regularization par ...
- js判断一个数是不是正整数
js判断一个数是不是正整数 function isPositiveNum(s){//是否为正整数 var re = /^[0-9]*[1-9][0-9]*$/ ; return re.test(s) ...
- IOT设备通讯,MQTT物联网协议,MQTTnet
一.IOT设备的特性 硬件能力差(存储能力基本只有几MB,CPU频率低连使用HTTP请求都很奢侈) 系统千差万别(Brillo,mbedOS,RIOT等) 如使用电池供电,电量消耗敏感 如果是小设备, ...
- 行为型模式(一) 模板方法模式(Template Method)
一.动机(Motivate) "模板方法",就是有一个方法包含了一个模板,这个模板是一个算法.在我们的现实生活中有很多例子可以拿来说明这个模式,就拿吃饺子这个事情来说,要想吃到饺子 ...
- Nginx页面图片错误 ERR_CONTENT_LENGTH_MISMATCH
现场:nginx代理的网站有的虚拟目录的图片无法正常显示,提示 ERR_CONTENT_LENGTH_MISMATCH,不断刷新页面图片一条一条的显示出来. 解决方法:找到nginx的缓存文件目录,c ...
- 织梦cmsf表单提交到邮箱 织梦表单发送到邮箱 织梦自定义表单发邮箱
大家在做织梦做网站开发时会遇到一个问题:织梦的自定义表单是一个很鸡肋的功能,不仅在后台展示得奇丑,而且也没有提醒功能,使用起来很不方便.很多人用织梦自定义表单时,都想用户提交表单的时候可以发送到自己的 ...
- 【shell】2、判断表达式、if语句
文件类型判断 test -e filename:该文件名是否存在 test -f filename:该文件名是否存在且为文件(file) test -d filename:该文件名是否存在且为目录(d ...
- 洛谷 P2279 [HNOI2003]消防局的设立 题解
每日一题 day34 打卡 Analysis 这道题的正解本来是树形dp,但要设5个状态,太麻烦了.于是我就用贪心试图做出此题,没想到还真做出来了. 考虑当前深度最大的叶子结点,你肯定要有一个消防局去 ...
- Python中多层List展平为一层
小书匠python 使用Python脚本的过程中,偶尔需要使用list多层转一层,又总是忘记怎么写搜索关键词,所以总是找了很久,现在把各种方法记录下来,方便自己也方便大家. 方法很多,现在就简单写8种 ...
- 洛谷 P4377 [USACO18OPEN]Talent Show + 分数规划
分数规划 分数规划可以用来处理有关分数即比值的有关问题. 而分数规划一般不单独设题,而是用来和dp,图论,网络流等算法结合在一起. 而基础的做法一般是通过二分. 二分题目我们都知道,需要求什么的最小或 ...