Docker使用docker compose创建Nginx代理其他Docker容器;指定Docker网络并固定容器内部IP地址;实现在同一个Docker网络下容器之间的互相通信

实现Nginx容器内部代理其他容器,我们以Nginx代理Tomcat为例

第一步:创建Docker网络

网络名称指定为:my_net
网段指定为:172.30.1.xxx
网关指定为:172.30.1.1

docker network create --driver bridge --subnet 172.30.1.0/24 --gateway 172.30.1.1 my_net

第二步:在docker compose中添加网络

services同级指定:

networks:
  my_net:
    external: true

容器下指定:

    networks:
      my_net:
          ipv4_address: 172.30.1.xxx

第三步:创建 docker compose 以及nginx.conf
Tomcat:
version: "3"
services:
  tomcat:
    image: tomcat:9.0
    container_name: tomcat
    stdin_open: true
    tty: true
    restart: always
    privileged: true
    networks:
      my_net:
          ipv4_address: 172.30.1.8
networks:
  my_net:
    external: true

由于是单纯作为演示,tomcat就不做过多的配置了
值得注意的是,我们的tomcat容器的内部并没有做端口的映射,只是指定了IP地址为:172.30.1.8


Nginx:
version: "3"
services:
  nginx:
    image: nginx
    container_name: nginx
    stdin_open: true
    tty: true
    restart: always
    ports:
      - 80:80
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    privileged: true
    networks:
      my_net:
          ipv4_address: 172.30.1.3
networks:
  my_net:
    external: true

nginx.conf:

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    client_max_body_size 50m;

        server{
                listen       80;
                server_name  com.wind;

                location / {
                proxy_pass http://172.30.1.8:8080/;
                }
        }
}

在nginx容器中,我们映射了80端口
172.30.1.8是我们tomcat容器内部的IP,所以配置文件中,我们把80端口映射到这个地址:http://172.30.1.8:8080/
当然,我们也可以使用容器的名称:http://tomcat:8080/


第四步:防火墙设置

我们把tomcat的8080端口关闭,把Nginx的80端口打开

firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
第五步:测试

浏览器中输入:http://IP地址:80/index.html
看到这个结果就表示,我们nginx在内部已经通过Docker的网络访问到了Tomcat容器,已经完成了容器之间的通讯

Docker使用docker compose创建Nginx代理其他Docker容器;指定Docker网络并固定容器内部IP地址;实现在同一个Docker网络下容器之间的互相通信_第1张图片

你可能感兴趣的:(Docker,docker,nginx,容器)