前言
通过前面的学习我们学会了操作镜像、容器以及提交镜像到远程仓库等方面的知识,在实际开发中经常会遇到多个服务组件容器共同协作的情况,比如容器内端口与宿主机端口映射问题,还有就是容器之间仅仅通过容器名进行互联访问的问题,下面将简单演示两者的使用。
端口映射
在我们启动容器的时候必须指定容器启动的端口号,否则容器外无法通过网络访问容器内部的服务。一般的我们都会使用 -p 来指定容器内外访问的端口号,使用 -P 来随机指定一个容器外端口。例如我们随机启动一个 nginx:
## 启动容器
[root@VM-0-10-centos ~]# docker run -d --name my-nginx -P nginx
59d33e01a6cc2d9c77600292d52a42889d58861b1d7f3202da154c06f735a3ec
[root@VM-0-10-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
59d33e01a6cc nginx "/docker-entrypoint.…" 4 seconds ago Up 4 seconds 0.0.0.0:49162->80/tcp, :::49162->80/tcp my-nginx
通过上面查看docker进程可以看到容器外端口启用 49162来映射 nginx的 80 端口,关于应用启动日志则可以通过 docker logs 命令查看应用的信息:
查看容器启用的端口号:
使用 docker port 命令可以查看映射的端口配置,也可以查看绑定的地址:
[root@VM-0-10-centos ~]# docker port my-nginx
80/tcp -> 0.0.0.0:49162
80/tcp -> :::49162
容器互联机制
容器通过互联机制可以通过指定的容器名称进行访问,这有点类似Linux下通过 host 访问机制即:无须访问指定的ip,只需访问其域名即可。
定义容器名称:
可以在容器启动时候对容器命名,使用 –name 可以对容器命名,例如启动nginx镜像命名为 my-nginx:
[root@VM-0-10-centos ~]# docker run -d --name my-nginx -P nginx
59d33e01a6cc2d9c77600292d52a42889d58861b1d7f3202da154c06f735a3ec
使用–link
在Docker中可以使用 –link指令建立起两个容器的链接,下面则新建一个 tomcat 容器并在之前创建的 my-nginx
中配置tomcat的访问方式:
- 运行tomcat
docker run -d --name nginx -P --link tomcat:my-tomcat nginx
我们进入到nginx的容器后同样查看 /etc/hosts 下内容如下所示:
进入到 tomcat容器内将 webapps.dist 的内容拷贝到 webapps
目录下:
root@7aa32e216e75:/usr/local/tomcat# cp -r webapps.dist/* ./webapps
查看当前 /etc/hosts 内容如下:
需要指出的是 –link 第一个名称为要链接的容器名称,第二个名称为容器别名,所以上面指定 nginx 连接 tomcat 容器,最后使用 crtl + p + q 退出容器并查看当前容器中的应用如下:
我们通过上图还可以发现两个容器下的hosts文件中都建立了彼此链接,而且都会有默认的一个彼此的容器id 与相应ip绑定的映射。我们还可以通过 env 指令查询当前容器环境变量,可以清晰看到两个容器绑定的变量:
验证在nginx容器访问tomcat
如果需要在nginx映射tomcat的访问路径,需现在nginx容器中安装 vim指令,nginx容器为Debain
系统,所以我们需要借助 apt 指令进行软件的安装。
- 测试容器互联
进入 nginx 容器中测试 tomcat容器是否可以访问:
我们发现在nginx容器中是可以访问tomcat服务器的。