docker

您所在的位置:网站首页 使用docker部署项目的优缺点是什么 docker

docker

2024-07-10 03:53| 来源: 网络整理| 查看: 265

本例中,访问localhost:80可验证是否成功部署。

 docker-compose [-f ...] [--profile ...] [options] [--] [COMMAND] [ARGS...]   有option,command, args, 注意位置。

    -f:   filename

    -p:  project name

     docker-compose -p docker-apisix up

     docker-compose -p docker-apisix down

网桥模式

      最后我们来探究容器集合的网络连接, 这也是容器比较复杂的部分。

 docker引擎刚建立的时候,会新建一个docker0网桥(driver= bridge), 新加入的容器默认都会接入这个网桥。

  当执行docker-compose  up时,会创建新的网桥设备,集合内所有容器都通过该网桥交流:

① 创建名为 {project}_default 的网桥

②  以服务名app加入 {project}_default 网络; 以服务名nginx加入 {project}_default 网络

     每一个容器现在可使用 “app” /  “nginx”  服务名作为主机名相互访问

为啥可以通过 服务名访问 容器?   

是因为利用了 Docker引擎内置的DNS, 查询服务名----》 查询DNS(每个服务名: 对应容器IP) 

     所以在nginx.conf 文件中我们给 【upstream app_servers】配置 app:80 能正确转发请求:

 

  docker-compose.yml文件中【extra_hosts】的用法:

     当前程序架构中使用的是宿主机的Redis服务,在app 容器内不能再使用localhost:6379引用redis服务, 因为容器内localhost 指向的是容器自身。

     【extra_hosts】指令用于主机名映射,定义宿主机在容器内别名。,可通过docker inspect [network_id] 查看宿主机在网桥上的映射IP:

[root@search-referer1 nginx]# docker inspect 0b576abb7ead [ { "Name": "eqidmanager_default", "Id": "0b576abb7ead9041a4aa0fe786c3e448f0ca93abe2559560e75f491bea326754", "Created": "2019-04-30T00:53:31.047534813+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] }, "Internal": false, "Attachable": true, "Ingress": false, "Containers": { "f0b08e0e54e7e9293211bba0eb92f55749c3de4b31dc8011c3f803c02a69000a": { "Name": "eqidmanager_proxy_1", "EndpointID": "1311f2b21b2a0ecec205e6a8902d298eece8a782f7f7ab785ded6561b8ff7c5e", "MacAddress": "02:42:ac:12:00:03", "IPv4Address": "172.18.0.3/16", "IPv6Address": "" }, "f57f5f1f69351245932885c2de271d387df0055b1c51a17242c8bc1e941ed32b": { "Name": "eqidmanager_app_1", "EndpointID": "b89d144948ee58870e07b9d1cfc5fd42f1bfe0a4b15e4fc2905d13136acb0a7e", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" } }, "Options": {}, "Labels": { "com.docker.compose.network": "default", "com.docker.compose.project": "eqidmanager", "com.docker.compose.version": "1.24.0" } } ] View Code

      本实例中docker-compose 新建的eqidmanager_default网桥网关是 172.18.0.1,在docker-compose.yml 文件中配置了上述【extra_hosts】,在对应的app容器内我们cat  /etc/hosts 会发现新增的映射记录:

 

 相应的连接字符串是 :

"connectionstrings": {    ”sqlite": "Data Source=EqidManager.db",     "redis": "dockerhost:6379,password=****@1,connectTimeout=10000,writeBuffer=40960" },

tip: 这里假定每次执行docker-compose up/down命令,网关/子网都不变, 实际上很有可能变动, 最好使用自定义网桥。 

       由网桥而来的流量不经过宿主机的本地回环,因此需要将宿主机上的应用(MySQL,Redis等)配置为监听0.0.0.0。

 

 That‘s all, 编写一个企业级docker-compose.yml 文件需要对项目业务流程和部署流程有全盘了解,同时必须要具备完备的计算机操作原理和网络原理知识;

     当然,当你编写完一个企业级docker-compose.yml文件并成功运行,这也印证了你已经全盘熟悉项目架构同时也重温了计算机操作原理和网络原理,

      心中窃喜, docker-compose是个好东西,越用越香,

      希望本文对初涉容器平台的同学能有一个抛砖引玉的效果。

 

+ https://www.cnblogs.com/JulianHuang/p/11636825.html

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3