#云原生征文# Docker网络与Docker Compose

网友投稿 257 2022-10-19

#云原生征文# Docker网络与Docker Compose

这一章我来总结docker网络,docker网络实质上是由 Docker 为应用程序所创造的虚拟环境的一部分,它能让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、IP 协议栈、端口套接字、IP 路由表、防火墙等与网络相关的模块。

-安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host

host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口(和宿主机共享网络)。 Container:创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围(局限很大·,不常用)。 None:该模式关闭了容器的网络功能(不配置网络)。 Bridge:此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信(默认)。

以上都是不用动手的,真正需要配置的是自定义网络。

docker0

但是这样也会有一个问题,如果这个容器挂掉了是不就意味着ip消失了,那这就对我们上线的服务很不利,我们上线的服务就很不健康,那是否可以让ping ip改为ping 域名呢,这样只要ping 域名了他就会自动去找该域名底下的ip这样就算这个域名服务中有个ip挂了那么依然会有另一个ip可以完成业务。

--link

容器互联,我们可以通过--link 命令来使的容器之间通过域名联通docker run -d -P --name 容器名 --link 需要联通的容器名 镜像名

这样容器就能直接ping需要联通的容器名,也就是说可以直接通过容器的名称进行通讯(通过域名访问),但是这样做很麻烦,所以不推荐使用这个方法。这里推荐自定义网络

自定义网络

我们可以通过docker network create --driver bridge --subnet 192.168.0.0/(16或24) --gateway 192.168.0.1 net0116和24,简单来说就是,16的话可以有255*255个ip地址能用,24的话可以有255个IP地址能用。这些知识不懂得可以去看看计算机网络。这里由于默认创建的模式就是bridge所以这里写不写都一样。

现在我们再来创建自定义网络下的容器,只需加 --net net01既可。docker run -d -P --net net01 --name 容器名 镜像名

所以推荐大家使用自定义网络。同时建议大家建不同集群时用不同的网络。像我这里,docker0是一个网络,net01也是一个网络。这样这两个网络就是互相隔离的安全网络。那么这两个网络之间怎么通信呢?在docker network 中有这样一个命令,我们通过docker network --help查看一下。

Docker Compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。大家应该也知道我们设计的一个系统肯定是涉及多个方面的,比如说你的系统中有nginx,有redis,有数据库服务等等,那这时我们要进行部署的话,是不得一个一个去run,如果服务少的话还好说,多了的话运维的忙死,所有就诞生了compose,他能很好的帮助我们实现一键多启。高效的运行多个容器。

安装

curl -SL -o /usr/local/bin/docker-compose但是上面这个下载速度有的慢,所以这里推荐使用下面这个curl -SL -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

import time import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) def get_hit_count(): retries = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.sleep(0.5) @app.route('/') def hello(): count = get_hit_count() return 'Hello World! I have been seen {} times.\n'.format(count)

flask redis

构建镜像Dockerfile

# 下载最基础的镜像 FROM python:3.7-alpine # 设置工作路径为/code,后续方便卷挂载 WORKDIR /code # 环境配置 ENV FLASK_APP=app.py ENV FLASK_RUN_HOST=0.0.0.0 # 将本地的该txt文件复制到docker引擎中并名为requirements.txt COPY requirements.txt requirements.txt # 下载里面所需的库或文件 RUN pip install -r requirements.txt # 暴露端口为5000 EXPOSE 5000 # 将当前目录复制到镜像的workdir .目录下 COPY . . # 运行flask CMD ["flask", "run"]

创建docker-compose

version: "3.9" services: web: # 构建,记住后面那个点不能少 build: . # 设置本机端口8000映射至5000 ports: - "8000:5000" redis: # 找redis的镜像 image: "redis:alpine"

启动

启动composedocker-compose up

version: "3.9" services: web: # 构建,记住后面那个点不能少 build: . # 设置本机端口8000映射至5000 ports: - "8000:5000" # 挂载这样我们就能在不重启镜像的情况下修改文件 volumes: - .:/code # 设置环境,它告诉flask run在开发模式下运行并在更改时重新加载代码。这种模式应该只在开发中使用。 environment: FLASK_ENV: development redis: # 找redis的镜像 image: "redis:alpine"

.:/code中间不能空开

我们试着去修改一个app.py文件看看能不能动态修改。去到目录底下

vim app.py

最后

【本文正在参加云原生有奖征文活动】,活动链接:https://ost./posts/12598

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:docker-compose.yml 示例
下一篇:SpringBoot整合Spring Boot Admin实现服务监控的方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~