我一直都认为docker的网络管理是docker中最复杂,特别是容器间通信的问题困扰了我很久。
首先我们来看看docker中关于网络的几个命令:
docker networker list
docker network inspect brige
man -k docker
如果上边的命令执行后未看到相应的文档,则执行下面的命令:
mandb
然后再次执行查看指令
docker network create mynetwork -d brige --subnet=10.0.0.0/24
docker run --network=mynetwork --name=web2 nginx
docker network delete mynetwork
容器间通信是docker学习中的难点,主要是因为牵扯到多层网络架构和进程通信问题。
端口映射主要使用过-p
指令完成的,使用方法如下:
docker run -p 80 --name=web2 nginx
上面的指令执行完后,docker会从宿主机中随机寻找一个未使用的端口作为外部端口,与容器内的80端口映射,其他地方访问该容器只需要访问宿主机的映射端口即可。
但是上诉方法映射的端口随机性太强,不方便使用,所以-p
指令也可以指定具体端口,如:
docker run -p 80:80 --name=web2 nginx
冒号前为宿主机端口,冒号后为容器中的端口。访问宿主机的80端口就可以访问到容器的80端口了。
--link
选项docker run --link
可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量。
--link
的格式:
--link <name or id>:alias
其中,name和id是源容器的name和id,alias是源容器在link下的别名。
例如:
# 创建mysql容器
docker run -dit --restart=always --name=db -v /db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=blog hub.c.163.com/libarary/mysql
# 创建wordpress容器,并使用--link连接mysql容器
docker run -dit --restart=always --name=blog -v /web:/var/www.html -p 80:80 --link db:mysql hub.c.163.com/library/wordpress
直接访问宿主机的80端口,即可打开wordpress的配置页面,不需要设置数据库链接地址等。
全部评论