首页 > 其他分享 >二级域名以及 Docker 容器互相访问

二级域名以及 Docker 容器互相访问

时间:2022-11-03 09:55:17浏览次数:47  
标签:容器 二级域名 redis header proxy portainer Docker docker

二级域名

起因

由于在一台服务器上部署了多个不同的应用/服务,之前是使用域名+端口号的方式来区分应用。但是这种方式在应用或服务多了以后,就不好使了,对于个人来说,需要记上应用或服务对应的端口号以及服务的域名后缀。
于是就有了这篇文章记录。

在 Nginx 配置子域名

  • 在 Nginx 中配置需要的子域名(我习惯将每一个子域名的配置分开来,一个子域名对应一个字配置文件)
    • 在 Nginx 默认配置文件 http 节点下配置:include /path/to/config/*.conf
  • Portainer 配置:

# portainer.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  docker.noexception.cn;

    location / {
        proxy_redirect off;
        proxy_set_header host $host;
        proxy_set_header x-real-ip $remote_addr;
        proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
        proxy_pass http://portainer:9000/;
    }
}

  • 定时任务配置:

# tasks.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  tasks.noexception.cn;

    location ^~ /xxl-job-admin {
        proxy_redirect off;
        proxy_set_header host $host;
        proxy_set_header x-real-ip $remote_addr;
        proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
        proxy_pass http://xxl-job-admin:7397/xxl-job-admin/;
    }

    location / {
        proxy_redirect off;
        proxy_set_header host $host;
        proxy_set_header x-real-ip $remote_addr;
        proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
        proxy_pass http://xxl-job-admin:7397/xxl-job-admin/;
    }
}

配置域名解析

5QXZP.png

  • 在域名管理界面中,添加一条解析记录:
    • 记录类型为A
    • 主机记录为: 子域名(如:docker),
    • 记录值为服务器的IP地址,
    • 提交保存。

总结

  • 整个配置过程并不复杂,概况来说就是三步:
    1. 部署应用;
    2. 添加 Nginx 配置(如 portainer.conf);
    3. 在域名解析页面中,添加子域名的解析记录。

补充:

1. 关于在 Docker 中,配置好子域名后,发现无法访问的情况。

  • 原因: 是因为 docker 的网络策略默认情况下,容器与容器之间是无法相互访问的,在启动容器的时候,得给她们指定好网络组。
  • 又因为容器重启,IP 会随之变化,所以我们需要利用 docker 网络,通过容器 name 在容器中互相访问。

Docker 网络

1. 创建自定义网络

  • 指令: docker network create domain
  • 默认使用的是 bridge 驱动
  • 不在同一个 docker network 中的容器,不能互相访问,他们不在同一个网段上

2. 创建容器时,指定 docker network

  • 启动第一个容器,指令: docker run -it --name portainer --network domain -p 9000:9000 portainer/portainer

  • --network 参数指定容器使用的网络

  • 启动第二个容器,指令: docker run -p 6379:6379 --network domain --name redis -v /docker/data/redis/redis.conf:/etc/redis/redis.conf -v /docker/data/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

  • 启动一个 redis 服务容器,通过在 redis 容器访问 portainer 容器,使用 curl 工具来协助我们验证

验证:

  1. 使用docker exec进入 redis 容器中
# docker exec -it redis bash
[root@noexception ~]# docker exec -it redis bash
root@a01af1db7118:/data#

  1. 使用 curl 工具进行验证:
# curl http://portainer:9000
# ping http://portainer:9000

  1. 使用 docker network inspect domain 来查看 docker network 信息,检查两个容器是否链接到了同一个网络下:
[
    {
        "Name": "domain",
        "Id": "17a05973b0e8805b372e143d3a7ce591a076e98e3d7cb357444ed2ee1338e009",
        "Created": "2022-04-08T15:13:19.017550444+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "11ccb85d3c61b0a5826d311965929b1dad07aec2013778bc7d4fbf46dbaace7c": {
                "Name": "nginx",
                "EndpointID": "d0d611461ff9a3849e53c05c27fdf26ca39bea739d24de613b013b86cb8a43ff",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            },
            "7f2e31026a6249577632239f6cd69a6781718a6e4b436db5747fece6599b05ae": {
                "Name": "zookeeper",
                "EndpointID": "38cbc10011c3e68ccbcf7f7c7b69948df0fd6a72834d10258752139e149efa0d",
                "MacAddress": "02:42:ac:12:00:05",
                "IPv4Address": "172.18.0.5/16",
                "IPv6Address": ""
            },
            "8e37d220283e84af7382a4481baea5f8dca61b30166922bd8bc03adfd2dbb322": {
                "Name": "portainer",
                "EndpointID": "0f51d369c1fe824b0d3941d8a3dce868a88581a17733d4a685515401ea6b08a6",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            },
            "a01af1db711844c4547d2b64e53021f5bb6967fb7e83120592d5c913872f4cd9": {
                "Name": "redis",
                "EndpointID": "1754b57297a8a7ea0933fcab19727b045c1948551ff1bdab449c2b4c525cda11",
                "MacAddress": "02:42:ac:12:00:04",
                "IPv4Address": "172.18.0.4/16",
                "IPv6Address": ""
            },
            "dc550ff519c39f9f9800e3ba5dc25ae4c435550d1259425caba426601a4dc358": {
                "Name": "xxl-job-admin",
                "EndpointID": "6373e88cc3ce52fefbcbcb99fdccdd74df16c64c805a071e82cf07985675b8e7",
                "MacAddress": "02:42:ac:12:00:06",
                "IPv4Address": "172.18.0.6/16",
                "IPv6Address": ""
            },
            "f7762c952a1c21cbc230fe8c65c705bacafd57c9655744b2cc43af658dd945d7": {
                "Name": "kafka",
                "EndpointID": "52ca42e07513833630f4906b34590641bbb743d9586eba9da08e9796a56fd147",
                "MacAddress": "02:42:ac:12:00:07",
                "IPv4Address": "172.18.0.7/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

标签:容器,二级域名,redis,header,proxy,portainer,Docker,docker
From: https://www.cnblogs.com/lancediarmuid/p/16853428.html

相关文章

  • vue 部署docker容器
    1、修改vue.config.js配置文件若没有这个配置文件,就在项目根目录新建一个,增加以下配置:module.exports={#生产环境是否要生成sourceMapproductionSourceM......
  • Docker安装Oracle(简单,好用)
    Docker安装Oracle(以Oracle_11g为例)拉取oracle_11g镜像:dockerpullregistry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g运行容器1dockerrun-d-p1521:1521-......
  • Docker 常用命令
    参考地址查看docker网络$dockernetworklsNETWORKIDNAMEDRIVERSCOPE7fca4eb8c647bridgebridge......
  • PyCharm配置远程Docker环境
    1.docker配置使用-p参数暴露一个端口用于ssh连接。dockerrun-itd--namewangchao_paddle--gpusall-p8899:8888-p8822:22-v/data:/root/dataregistry.bai......
  • 关于继承自stl容器的派生类
    我在一篇知乎上看到说继承后,由于stl的实现没有虚析构函数,所以会产生泄露。更有甚者说继承是UB。但是我在cppreference上看到如下内容:structsame:std::binary_function......
  • docker-compose 一些有用的新功能
    docker-compose可以方便我们进行多容器环境的管理,通过也提供了一些比较有意思的功能,比如extends,以及profilesextends的场景比如我们需要使用一些模版进行服务的扩展,就......
  • Doker学习01-Docker的基本概念
    Doker学习01-Docker的基本概念Docker概述Docker出现的原因一款产品有两个环境:开发(开发环境)和上线(运维环境)。环境配置和切换过于麻烦,每一台机器都要部署环境(集群Redis,E......
  • Ubuntu安装Docker及镜像加速器
    一、安装Dockersudoapt-getupdate&&sudoapt-getinstall-yapt-transport-httpsca-certificatescurlsoftware-properties-common&&curl-fsSLhttps://downloa......
  • docker
    一、概念docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布......
  • 容器安全体现在四个方面
     容器环境,或者叫容器云,其本质是云计算的一种实现方式,容器技术是云原生体系的底层,因而容器安全也是云原生安全的基石。随着容器技术越来越多地被认可,容器安全也逐渐得到了......