默认容器在外部默认是不可访问的;
比如进入到容器里面才可以操作;
这对于提供网络请求的应用就不友好了;
比如说我们常见的 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 mysql /bin/bash
默认的 Nginx 和 MySQL 容器中很多常用的命令都没有;
比如说 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 通了;
本文为白俊遥原创文章,转载无需和我联系,但请注明来自白俊遥博客https://baijunyao.com 欢迎捐赠赞赏加入组织创建QQ群及捐赠渠道
最新评论