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 ...
随机推荐
- RCNN,Fast RCNN,Faster RCNN 的前生今世:(3) SPP - Net
SPP-Net是出自2015年发表在IEEE上的论文-<Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Reco ...
- arp和rarp协议
ARP与RARP详细解析 原创zlnnjit 发布于2016-04-03 15:12:15 阅读数 9544 收藏 展开 地址解析协议 ARP和逆地址解析协议RARP 1.基本关系: 2.地址解析 ...
- Java中装箱和拆箱的代码
建议使用1.5或以上的jdk运行, //装箱 值类型到引用类型 int i = 10; Object object =i; System.out.println(object); / ...
- Linux下的Memcache安装 和 安装Memcache的PHP扩展
一.首先安装服务端memcached 1.下载libevent与memcache软件包. 下载memcached: wget http://memcached.org/latestwget http: ...
- phpize是干嘛的
安装php(fastcgi模式)的时候,常常有这样一句命令:/usr/local/webserver/php/bin/phpize一.phpize是干嘛的?phpize是什么东西呢?php官方的说明: ...
- luogu 1714
前缀和 + rmq #include <bits/stdc++.h> const int N = 5e5 + 10; int Pow[30], Log[N]; int n, m; int ...
- Bzoj 2875: [Noi2012]随机数生成器(矩阵乘法)
2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2052 Solved: 1118 Description ...
- AtCoder Grand Contest 038 题解
传送门 这场表现的宛如一个\(zz\) \(A\) 先直接把前\(b\)行全写成\(1\),再把前\(a\)列取反就行 const int N=1005; char mp[N][N];int n,m, ...
- 【一起来烧脑】一步学会TypeScript入门
[外链图片转存失败(img-rmJXMGFs-1563388353181)(https://upload-images.jianshu.io/upload_images/11158618-dd813e ...
- [ThinkPHP6.*安装 (草稿先发布,再维护)
ThinkPHP6.0的安装,官方文档中有详细的说明,不过在安装之前,大家还是要做一些准备的,就是PHP本地开发环境 的搭建. 官方手册地址:https://www.kancloud.cn/manua ...