文章目录
Docker网络
docker 0 与容器之间是使用VETH对连通的,一组相互链接的虚拟接口,用于连接两个网络/名称空间,网络协议栈
同时docker 0 也是作为这个IP地址段的网关,可以定义访问规则以及内部服务使用的事宿主机的哪个端口
docker网络模式
共有四种网络模式:Host、container、 none、 bridge
host
- 与宿主机共享网络名称空间/网络协议栈
container
- 多个容器之间共享一个network namespaces
none
- 自闭空间
Bridge
默认模式 通过Veth对 连接容器与docker0 网桥,网桥分配给容器IP,同时docker 0 作为“局域网” 内容器的网关,最后和宿主机网卡进行通讯
自定义网络
查看网络列表
格式: docker network ls
[root@localhost ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
a12c12412395 bridge bridge local
c784c7ad8979 host host local
507a0eb41c8e none null local
注意:
使用docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:7 /bin/bash
这条命令会报错
[root@localhost ~]# docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:7 /bin/bash
94c32a96691e60897a8deea0a0a4731f842c701970eb6cc0218961f789b0dede
docker: Error response from daemon: user specified IP address is supported on user defined networks only.
自定义网络固定IP
[root@localhost ~]# docker network create --subnet=172.18.0.0/16 mynetwork
ad27314d488786db2d2a90a20bf3d10bc6e4e501077f7c0d9423ad3a95d5c564
[root@localhost ~]# docker run -itd --name test2 --net mynetwork --ip 172.18.0.100 centos:7 /bin/bash
19e57b81978a037ea695edfd08f6c9f66a8fb24c697f73aea599c593a536fc7e
[root@localhost ~]#
需要自行创建才能自定义网络,系统默认的IP地址段是一次分配的,不可自定义
暴露端口
随机端口
[root@localhost ~]# docker run -itd -P nginx:latest /bin/bash
ee49fe1756bedc10801fd52917643f614a0d00e55aa7ec03b1e81941a9923ab5
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee49fe1756be nginx:latest "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 0.0.0.0:49154->80/tcp, :::49154->80/tcp awesome_northcutt
[root@localhost ~]# curl 127.0.0.1:49154
curl: (56) Recv failure: Connection reset by peer
[root@localhost ~]# docker exec -it ee49fe1756be /bin/bash
root@ee49fe1756be:/# nginx
指定端口
[root@localhost ~]# docker run -itd -p 333:80 nginx:latest /bin/bash
38ed094e28b177822321da31eb772e88e5faf4bbc71c1c527cd1c07291f5c44b
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
38ed094e28b1 nginx:latest "/docker-entrypoint.…" 2 seconds ago Up 1 second 0.0.0.0:333->80/tcp, :::333->80/tcp angry_cohen
[root@localhost ~]# docker exec -it 38ed094e28b1 /bin/bash -c 'nginx'
进入容器内部没有systemctl命令
docker run -itd --name test3 --privileged=true centos:7 /sbin/init