host模式,使用docker run時使用--net=host指定
docker使用的網絡實際上和宿主機同樣,在容器內看到的網卡ip是宿主機ipnginx
container模式,使用--net=container:container_id/container_name
多個容器使用共同的網絡,看到的ip是同樣的git
none模式,使用--net=none指定
這種模式下,不會配置任何網絡github
bridge模式,使用--net=bridge指定默認模式
不用指定默認就是這種網絡模式。這種模式會爲每一個容器分配一個獨立的Network Namespace。相似於vmware的nat網絡模式。同一個宿主機上的全部容器會在同一個網段下,相互之間是能夠通訊的。docker
一、從外部訪問容器
首先使用centos鏡像新建一個容器,而後在該容器中安裝httpd服務,並啓動vim
###啓動鏡像centos
docker run -itd centos docker ps docker exec -it 1ce0ec25afeb bash
###安裝nginxbash
yum install -y epel-release yum install -y nginx
###再把該容器導成一個新的鏡像(centos-httpd),而後再使用新鏡像建立容器,並指定端口映射docker commit -m "install nginx" -a "test" 1ce0ec25afeb centos_nginx
網絡
docker run -itd -p 5123:80 centos-nginx bash
-p 能夠指定端口映射,本例中將容器的80端口映射爲本地的5123端口curl
出現問題
新建的容器,啓動nginx或者httpd服務的時候會報錯
Failed to get D-Bus connection: Operation not permitted
這是由於dbus-daemon沒有啓動,解決該問題能夠這樣作
啓動容器時,要加上--privileged -e "container=docker" ,而且最後面的命令改成/usr/sbin/init
docker run -itd --privileged -e "container=docker" -p 5123:80 centos_nginx /usr/sbin/initide
###進入容器
docker exec -it fcc985ebf0fc bash
###啓動nginx
systemctl start nginx
退出該容器:exit
測試: curl 127.0.0.1:5123
二、配置橋接網絡
爲了使本地網絡中的機器和Docker容器更方便的通訊,咱們常常會有將Docker容器配置到和主機同一網段的需求。
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-br0
vim ifcfg-ens33 //增長BRIDGE=br0,
###刪除IPADDR,NETMASK,GATEWAY,DNS1
vi ifcfg-br0
###修改DEVICE爲br0,Type爲Bridge,把eth0的網絡設置設置到這裏來
systemctl restart network
安裝pipwork
git clone https://github.com/jpetazzo/pipework
cp pipework/pipework /usr/local/bin/
開啓一個容器
docker run -itd --net=none --name test centos_with_nettool bash
pipework br0 test 172.7.15.201/24@172.7.15.3 #201爲容器的ip,@後面的ip爲網關ip
docker exec -it test bash
#進去後ifconfig查看就能夠看到新添加的ip