Docker 入门教程(六)网络 Network

端口映射

默认容器在外部默认是不可访问的;
比如进入到容器里面才可以操作;
这对于提供网络请求的应用就不友好了;
比如说我们常见的 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 容器中很多常用的命令都没有;
比如说 ifconfigping
有个叫 busybox 正好就包含了这些命令;
这里在 Nginx 和 MySQL 镜像中分别安装 busybox

apt update
apt install busybox

busybox 的使用也非常简单;
比如说要使用 ifconfig 查看这两个容器的 ip ;

/bin/busybox ifconfig


互相 ping ip 也是通的;

但是这个 ip 是在容器创建后我们才知道的;
而 Nginx 容器中我们可能需要先填写 MySQL 的 ip ;
这就成了先有鸡还是先有蛋的问题;
那如果我们能像使用 localhost 这个关键词一样来使用刚定义的 nginxmysql 容器;
那问题就迎刃而解了;
然而当我们 ping 的时候会发现是不通的;

容器互联

Nginx 是需要对外提供服务的;
而 MySQL 一般不向外提供服务;
但是 Nginx 需要能访问 MySQL 容器;
而且需要通过容器 name 来访问;
这时候就需要容器之间互联了;
我们可以创建一个网络;
把这些需要互联的容器放到一个网络中;

查看网络

查看网络列表;

docker network ls


默认已经有了 3 个网络;

创建网络

创建一个测试网络;

docker network create test

删除之前的 nginxmysql 容器;
这时候就可以使用容器名了;

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 通了;

白俊遥博客
请先登录后发表评论
  • latest comments
  • 总共0条评论