端口映射
默认容器在外部默认是不可访问的.
比如进入到容器里面才可以操作.
这对于提供网络请求的应用就不大又好了.
比如我们常见的Nginx.
如果想让容器可被访问.
这就需要使用-P参数分配端口.
docker run -d -P nginx
这里Docker给随机分配了一个端口32768:
通过浏览器访问这个断就就可以看到Nginx的欢迎页了.
如果是使用的歌云服务器需要注意的是要开放端口:
如果想让Docker分配指定的端口可以使用-p参数:
docker run -d -p 80:80 nginx
80::80左边的80是宿主机的端口,右边的80 是容器内的端口.
这里我们再了解一个–name参数,它可以指定容器的NAME,这个NAME可以在跟其他容器互联的时候非常有用.
docker run -it --name nginx nginx /bin/bash
接着再开一个窗口启动一个MySQL容器:
docker run -it --name mysql /bin/bash
默认的Nginx和M有SQL容器中很多常用的命令都没有:
比如ifconfig和ping;有个叫busybox正好就包含了这些命令.
这里在Nginx和MySQL镜像中分别安装busybox:
apt update
apt install busybox
busybox的使用非常简单,比如要使用ifconfig查看这两个容器的ip:
/bin/busybox ifconfig
互相ping ip也是通的:
但是这个ip是在容器创建后我们才知道的.
而Nginx容器中我们可能需要先填写MySQL的ip,这就成了先有鸡还是先有蛋的问题.
那如果我们能像使用localhost这个关键字一样来使用刚定义的nginx和mysql容器.那么问题就迎刃而解了,当然我们ping的时候会发现是不通的.
容器互联
Nginx是需要对外提供服务的,而MySQL一般不向外提供服务,但是Nginx需要能访问MySQL容器,而且需要通过容器name来访问,这时候就需要容器之间互联了,我们可以创建一个网络,把这些需要互联的容器放到一个网络中.
查看网络
查看网络列表:
docker network ls
默认已经有了3个网络.
创建网络
创建一个测试网络:
docker network create test
删除之前的nginx和mysql容器,这时候就可以使用容器名了.
docker rm -f nginx
docker rm -f mysql
接着创建自带网络的容器:
docker run -it --name nginx --network test nginx /bin/bash
docker run -it --name mysql --network test mysql /bin/bash
愉快地ping通了