端口映射

docker nginx 端口映射无法访问 dockerfile端口映射_微服务架构

客户端访问容器的时候,不能直接访问 ,只能跟宿机绑定端口后才能访问

绑定端口

  • -p 宿主机端口:容器端口
docker run -d --name cat3 -p 8001:8080 tomcat

访问测试 : 192.168.64.150:8001


部署一个 Hell world web应用

首先知道容器的部署路径

docker nginx 端口映射无法访问 dockerfile端口映射_docker_02


宿主机中创建目录 并且里面写 jsp 代码

mkdir /opt/web
cat <<EOF >/opt/web/index.jsp
<h1>Hello world!</h1>
<h1>Hello <%=request.getParameter("name")%>!</h1>
EOF

创建 命名是cat4 的容器 端口绑定,挂载目录

docker run -d --name cat4 \
-p 8088:8080 \
-v /opt/web:/usr/local/tomcat/webapps/ROOT \
tomcat

浏览器访问服务器映射的 8088 端口

http://192.168.64.150:8088 http://192.168.64.150:8088/?name=zhangsan

docker nginx 端口映射无法访问 dockerfile端口映射_微服务架构_03


容器互联

创建虚拟网路

创建前 保证没有相似的虚拟网路 做个删除操作

docker network rm my-net
1 - 创建虚拟网路 my-net
docker network create my-net
2 - 查看虚拟网路
docker network ls

docker nginx 端口映射无法访问 dockerfile端口映射_docker_04

docker inspect my-net

docker nginx 端口映射无法访问 dockerfile端口映射_微服务_05

3 - 宿主机上会新建虚拟网卡,连接虚拟网络
ifconfig

虚拟网路:br-xxxxxxx

docker nginx 端口映射无法访问 dockerfile端口映射_tomcat_06


链接容器

1 - 启动容器连接到 my-net 网络

如果没设置虚拟ip的话,自动分批虚拟ip

docker run -d --name cat5 \
--net my-net \
tomcat

两个容器链接到 1 个虚拟网路

docker run -d --name cat6 \
--net my-net \
tomcat
2 - 查看容器的ip
docker inspect cat5
docker inspect cat6

docker nginx 端口映射无法访问 dockerfile端口映射_linux_07

3 - 从宿主机ping两个容器的ip
ping 172.18.0.2
ping 172.18.0.3

docker nginx 端口映射无法访问 dockerfile端口映射_docker_08

4 - 进入 cat5 容器,ping宿主机和cat6
docker exec -it cat5 ping 172.18.0.1
docker exec -it cat5 ping 172.18.0.3
docker exec -it cat5 ping cat6

docker nginx 端口映射无法访问 dockerfile端口映射_docker_09


DockerFile

是配置镜像构建的流程 ———— 相当于是装机过程,配置的是一个装机的流程

如果我不想从官网上下载镜像,而且自己做一个镜像 那么使用此方法

构建tomcat镜像:

  • 选择一个基础镜像(可以是一个空操作系统镜像)
  • 添加 jdk 文件和 tomcat 文件
  • 配置环境变量
  • 设置默认的启动命令

1 - 准备

  • centos:7镜像
  • jdk压缩包 jdk-8u212-linux-x64.tar.gz
  • tomcat7压缩包 apache-tomcat-7.0.96.tar.gz

2 - 配置Dockerfile文件

  1. Dockerfile 名字固定的不能改
  2. Dockerfile 文件中不能注释,不能写汉字
vm Dockerfile
FROM centos:7
ADD jdk-8u212-linux-x64.tar.gz /opt/
ADD apache-tomcat-7.0.96.tar.gz /usr/
RUN mv /usr/apache-tomcat-7.0.96 /usr/tomcat
ENV JAVA_HOME=/opt/jdk1.8.0_212 \
    CATALINA_HOME=/usr/tomcat \
    PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin
EXPOSE 8080
ENTRYPOINT /usr/tomcat/bin/startup.sh && tail -F /usr/tomcat/logs/catalina.out

配置里面包含 :

  • 导入了空的 centos7 镜像
  • 导入jdk 和 tomcat 压缩包
  • 名字长 改了名字
  • 配置了 环境变量
  • 暴露了端口
  • 生成镜像

3 - 使用 Dockerfile 构建镜像

docker build -t tomcat:7 /root/tomcat7/

docker build -t 镜像名:标签 文件夹路径

4- 启动容器

docker run -d --name cat7 \
-p 80:8080 \
-v /opt/web:/usr/tomcat/webapps/ROOT \
tomcat:7

把我们做的镜像 启动 里面的 端口 给了 80 容器和宿机 挂载

http://192.168.64.150