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)配置桥接网络

[[email protected] ~]# yum -y install bridge-utils
[[email protected] ~]# cd /etc/sysconfig/network-scripts/
[[email protected] network-scripts]# cp ifcfg-ens33{,.bak}
[[email protected] network-scripts]# ls ifcfg-ens33*
ifcfg-ens33  ifcfg-ens33.bak
[[email protected] 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
[[email protected] 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
[[email protected] network-scripts]# systemctl restart network  //重启网络
[[email protected] 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服务器上下载。

[[email protected] network-scripts]# yum -y install unzip
[[email protected] network-scripts]# cd ~
[[email protected] ~]# unzip pipework-master.zip  //解压
[[email protected] ~]# cp pipework-master/pipework /usr/local/bin/  //为了可以直接调用

 3)为容器配置静态IP

[[email protected] ~]# 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
[[email protected] ~]# docker run -itd --network none --privileged centos:latest bash
51c03944e31297272541cc035e235f326a8933d066021e945d8ea4caf8fd1c17
[[email protected] ~]# pipework br0 51c03944e312 192.168.5.102/[email protected]
[[email protected] ~]# 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
[[email protected] ~]# systemctl stop firewalld.service  //如果想ping域名以及安装net-tools,请关闭防火墙。
[[email protected] ~]# docker exec -it 51c03944e312 bash
[[email protected] /]# 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
[[email protected] /]# yum -y install net-tools
[[email protected] /]# 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命令。

  测试如下:

[[email protected] ~]# docker run -it centos:latest bash
[[email protected] /]# ls /dev/
console  fd    mqueue  ptmx  random  stderr  stdout  urandom
core     full  null    pts   shm     stdin   tty     zero
[[email protected] /]# exit
exit
[[email protected] ~]# docker run -it --privileged centos:latest bash
[[email protected] /]# 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

原文地址:https://www.cnblogs.com/diantong/p/11535696.html

时间: 2024-08-29 22:59:56

Docker容器(五)——Docker静态化IP的相关文章

Docker02 Docker初识:第一个Docker容器和Docker镜像

目录 [TOC] 一.第一个Docker容器 使用docker run 命令时,如果在本地没有改镜像,那么会直接重Docker Hub(一个官方的镜像库)中拉取镜像. docker run --rm hello-world # 运行结果展示 Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 9bb5a5d4561a: Pulling fs layer docker:

Docker学习笔记(4-3)Docker容器内部署静态网站

设置容器的端口映射 如何访问容器的80端口<--设置端口映射 -P 为所有端口映射 -p 指定映射端口 docker run -p 80 -i -t ubuntu /bin/bash docker run -p 8080:80 -i -t ubuntu /bin/bash docker run -p 0.0.0.0:80 -i -t ubuntu /bin/bash docker run -p 0.0.0.0:8080:80 -i -t ubuntu /bin/bash #创建映射80端口的交互

在Docker容器中部署静态网页的方法教程

步骤:1.创建映射端口的交互式容器docker run -p 80 --name web -i -t daocloud.io/ubuntu /bin/bash2.安装Nginxapt-get install -y nginx 3.安装文本编辑器vimapt-get install -y vim4.创建静态页面 mkdir -p /var/www/html cd /var/www/html vim index.html 使用i切换到插入模式 在index.html中写入以下内容: <html>

Docker 容器部署Apache静态网站

容器中部署静态网站1.先了解容器端口映射(1). 设置容器的端口映射run [-P] [-p]-P, --publish-all=true | false 默认为false (对容器所有暴露的端口进行映射)docker run -P -i -t centos /bin/bash -p ,--publish=[] (指定容器的端口)containerPort (只指定容器的端口)docker run -p 80 -i -t centos /bin/bashhostPort:containerPor

Docker容器内网通过独立IP直接访问的方法

Docker官方推荐我们通过端口映射的方式把Docker容器的服务提供给宿主机或者局域网其他容器使用.一般过程是: 1.Docker进程通过监听宿主机的某个端口,将该端口的数据包发送给Docker容器 2.宿主机可以打开防火墙让局域网其他设备通过访问宿主机的端口进而访问docker的端口 但在实际使用中并不是很方便. 以下在win10环境中队DockerDocker容器通过独立IP暴露给局域网的方法进行记录. Docker的默认启动方式中,会产生一块虚拟网卡,然后容器内自行分配单独的网卡和IP.

进入正在运行的 docker 容器(docker container)

在使用 docker 容器的时候,我们总会想看看容器内部长什么样子:我们使用 docker exec 命令可以满足我们的期望: ? compose docker exec --help Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] Run a command in a running container Options: -d, --detach Detached mode: run command in the backgrou

Docker 容器基本操作[Docker 系列-2]

?Docker 入门及安装[Docker 系列-1] 镜像就像是一个安装程序,而容器则是程序运行时的一个状态. 查看容器 查看容器 启动 docker 后,使用 docker ps 命令可以查看当前正在运行的容器: 查看所有容器 上面这条命令是查看当前正在运行的容器,如果需要查看所有容器,则可以通过 docker ps-a 命令查看: 在查看容器时,涉及到几个查看参数,含义分别如下: CONTAINER ID:CONTAINER ID是指容器的id,是一个唯一标识符,这是一个64位的十六进制整数

docker容器从入门到精通

第1章 docker容器 1.1 什么是容器? 容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁.隔离的环境拥有自己的系统文件,ip地址,主机名等 1.2 容器和KVM虚拟化的区别 kvm虚拟化: 需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程) linux开机启动流程: bios开机硬件自检 根据bios设置的优先启动项 网卡 硬盘 u盘 光驱 读取mbr引导 UEFI(gpt分区) mbr硬盘分区信息,内核加载路径 加载内核 启动第一个进程i

Docker容器的跨主机连接

Docker容器的跨主机连接 使用网桥实现跨主机容器连接 网络拓扑 网络连接使用的是Bridge 操作 修改/etc/network/interfaces文件,分配静态IP地址 1.auto br02.iface br0 inet static3.address 10.211.55.34.netmask 255.255.255.05.gateway 10.211.55.16.bridge_ports eth0 修改/etc/default/docker文件,限定分配IP地址段,防止冲突 1.-b