1. 首页
  2. 技术知识

Docker容器服务编排利器详解

目录

    一、使用Docker Compose必要性及定义二、Docker Compose应用参考资料三、Docker Compose应用最佳实践步骤

      3.1 概念3.2 步骤

    四、Docker Compose安装五、Docker Compose应用案例

      5.1 网站文件准备5.2 Dockerfile文件准备5.3 Compose文件准备5.4 使用docker-compose up启动容器5.5 访问

一、使用Docker Compose必要性及定义

用容器运行一个服务,需要使用docker run命令。但如果我要运行多个服务呢?

假设我要运行一个web服务,还要运行一个db服务,那么是用一个容器运行,还是用多个容器运行呢?

一个容器运行多个服务会造成镜像的复杂度提高,
docker倾向于一个容器运行一个应用

那么复杂的架构就会需要很多的容器,并且需要它们之间有关联(容器之间的依赖和连接)就更复杂了。

这个复杂的问题需要解决,这就涉及到了**容器编排**的问题了。

    Compose编排

      是对多个容器进行启动和管理的方法例如:LNMT,先启动MySQL,再启动Tomcat,最后启动Nginx

    服务架构的演进单体服务架构分布式服务架构微服务架构超微服务架构容器编排工具docker machine在虚拟机中部署docker容器引擎的工具docker compose是一个用于定义和运行多容器Docker的应用程序工具docker swarm是Docker Host主机批量管理及资源调度管理工具mesos+marathonmesos 对计算机计算资源进行管理和调度marathon 服务发现及负载均衡的功能kubernetesgoogle开源的容器编排工具


二、Docker Compose应用参考资料

网址 https://docs.docker.com/compose/

    yaml格式

https://yaml.org/

三、Docker Compose应用最佳实践步骤


3.1 概念

    工程(project)服务 (Service)容器 (Container)


3.2 步骤

1.定义应用的Dockerfile文件,为了anywhere进行构建。

2.使用docker-compose.yaml定义一套服务,这套服务可以一起在一个隔离环境中运行。

3.使用docker-compose up就可以启动整套服务。

四、Docker Compose安装

  1. # wget https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64

复制代码

  1. # mv docker-compose-linux-x86_64 /usr/bin/docker-compose

复制代码

  1. # chmod +x /usr/bin/docker-compose

复制代码

  1. # docker-compose version
  2. Docker Compose version v2.2.3

复制代码
五、Docker Compose应用案例

运行Python语言开发的网站


5.1 网站文件准备

  1. # mkdir flaskproject
  2. [root@localhost ~]# cd flaskproject/
  3. [root@localhost flaskproject]#

复制代码

  1. [root@localhost flaskproject]# vim APP.py
  2. [root@localhost flaskproject]# cat app.py
  3. import time
  4. import redis
  5. from flask import Flask
  6. app = Flask(__name__)
  7. cache = redis.Redis(host=’redis’, port=6379)
  8. def get_hit_count():
  9.     retries = 5
  10.     while True:
  11.         try:
  12.             return cache.incr(‘hits’)
  13.         except redis.exceptions.ConnectionError as exc:
  14.             if retries == 0:
  15.                 raise exc
  16.             retries -= 1
  17.             time.sleep(0.5)
  18. @app.route(‘/’)
  19. def hello():
  20.     count = get_hit_count()
  21.     return ‘Hello World! I have been seen {} times.\n’.format(count)

复制代码

  1. [root@localhost flaskproject]# vim requirements.txt
  2. [root@localhost flaskproject]# cat requirements.txt
  3. flask
  4. redis

复制代码
5.2 Dockerfile文件准备

  1. [root@localhost flaskproject]# vim Dockerfile
  2. [root@localhost flaskproject]# cat Dockerfile
  3. FROM python:3.7-alpine
  4. WORKDIR /code
  5. ENV FLASK_APP app.py
  6. ENV FLASK_RUN_HOST 0.0.0.0
  7. RUN apk add –no-cache gcc musl-dev linux-headers
  8. COPY requirements.txt requirements.txt
  9. RUN pip install -r requirements.txt
  10. COPY . .
  11. CMD [“flask”, “run”]

复制代码
5.3 Compose文件准备

  1. [root@localhost flaskproject]# vim docker-compose.yaml
  2. [root@localhost flaskproject]# cat docker-compose.yaml
  3. version: ‘3’
  4. services:
  5.   web:
  6.     build: .
  7.     ports:
  8.       – “5000:5000”
  9.   redis:
  10.     image: “redis:alpine”

复制代码
5.4 使用docker-compose up启动容器

  1. [root@localhost flaskproject]# ls
  2. app.py  docker-compose.yaml  Dockerfile  requirements.txt

复制代码

  1. [root@localhost flaskproject]# docker-compose up

复制代码

  1. 输出:
  2. [+] Running 7/7
  3. ⠿ redis Pulled                                                                         15.8s
  4.    ⠿ 59bf1c3509f3 Pull complete                                                          2.9s
  5.    ⠿ 719adce26c52 Pull complete                                                          3.0s
  6.    ⠿ b8f35e378c31 Pull complete                                                          5.8s
  7.    ⠿ d034517f789c Pull complete                                                          6.5s
  8.    ⠿ 3772d4d76753 Pull complete                                                          6.6s
  9.    ⠿ 211a7f52febb Pull complete                                                          6.8s
  10. Sending build context to Docker daemon     714B
  11. Step 1/9 : FROM python:3.7-alpine
  12. 3.7-alpine: Pulling from library/python
  13. 59bf1c3509f3: Already exists
  14. 07a400e93df3: Already exists
  15. bdabb07397e1: Already exists
  16. cd0af01c7b70: Already exists
  17. d0f18e022200: Already exists
  18. Digest: sha256:5a776e3b5336827faf7a1c3a191b73b5b2eef4cdcfe8b94f59b79cb749a2b5d8
  19. Status: Downloaded newer image for python:3.7-alpine
  20. —> e72b511ad78e
  21. Step 2/9 : WORKDIR /code
  22. —> Running in 2b9d07bef719
  23. Removing intermediate container 2b9d07bef719
  24. —> 7d39e96fadf1
  25. Step 3/9 : ENV FLASK_APP app.py
  26. —> Running in 9bcb28bd632a
  27. Removing intermediate container 9bcb28bd632a
  28. —> 79f656a616d5
  29. Step 4/9 : ENV FLASK_RUN_HOST 0.0.0.0
  30. —> Running in 8470c2dbd6c2
  31. Removing intermediate container 8470c2dbd6c2
  32. —> e212ba688fcd
  33. Step 5/9 : RUN apk add –no-cache gcc musl-dev linux-headers
  34. —> Running in 6e9ca0766bc8
  35. fetch https://dl-cdn.alpinelinux.org/alpine/v3.15/main/x86_64/APKINDEX.tar.gz
  36. fetch https://dl-cdn.alpinelinux.org/alpine/v3.15/community/x86_64/APKINDEX.tar.gz
  37. (1/13) Installing libgcc (10.3.1_git20221027-r0)
  38. (2/13) Installing libstdc++ (10.3.1_git20221027-r0)
  39. (3/13) Installing binutils (2.37-r3)
  40. (4/13) Installing libgomp (10.3.1_git20221027-r0)
  41. (5/13) Installing libatomic (10.3.1_git20221027-r0)
  42. (6/13) Installing libgphobos (10.3.1_git20221027-r0)
  43. (7/13) Installing gmp (6.2.1-r1)
  44. (8/13) Installing isl22 (0.22-r0)
  45. (9/13) Installing mpfr4 (4.1.0-r0)
  46. (10/13) Installing mpc1 (1.2.1-r0)
  47. (11/13) Installing gcc (10.3.1_git20221027-r0)
  48. (12/13) Installing linux-headers (5.10.41-r0)
  49. (13/13) Installing musl-dev (1.2.2-r7)
  50. Executing busybox-1.34.1-r3.trigger
  51. OK: 143 MiB in 49 packages
  52. Removing intermediate container 6e9ca0766bc8
  53. —> 273d4f04dfbc
  54. Step 6/9 : COPY requirements.txt requirements.txt
  55. —> daf51c54e8ba
  56. Step 7/9 : RUN pip install -r requirements.txt
  57. —> Running in 2aa2d30c5311
  58. Collecting flask
  59.   Downloading Flask-2.0.3-py3-none-any.whl (95 kB)
  60. Collecting redis
  61.   Downloading redis-4.1.3-py3-none-any.whl (173 kB)
  62. Collecting Jinja2>=3.0
  63.   Downloading Jinja2-3.0.3-py3-none-any.whl (133 kB)
  64. Collecting itsdangerous>=2.0
  65.   Downloading itsdangerous-2.0.1-py3-none-any.whl (18 kB)
  66. Collecting click>=7.1.2
  67.   Downloading click-8.0.3-py3-none-any.whl (97 kB)
  68. Collecting Werkzeug>=2.0
  69.   Downloading Werkzeug-2.0.3-py3-none-any.whl (289 kB)
  70. Collecting deprecated>=1.2.3
  71.   Downloading Deprecated-1.2.13-py2.py3-none-any.whl (9.6 kB)
  72. Collecting packaging>=20.4
  73.   Downloading packaging-21.3-py3-none-any.whl (40 kB)
  74. Collecting importlib-metadata>=1.0
  75.   Downloading importlib_metadata-4.11.1-py3-none-any.whl (17 kB)
  76. Collecting wrapt<2,>=1.10
  77.   Downloading wrapt-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl (78 kB)
  78. Collecting typing-extensions>=3.6.4
  79.   Downloading typing_extensions-4.1.1-py3-none-any.whl (26 kB)
  80. Collecting zipp>=0.5
  81.   Downloading zipp-3.7.0-py3-none-any.whl (5.3 kB)
  82. Collecting MarkupSafe>=2.0
  83.   Downloading MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl (30 kB)
  84. Collecting pyparsing!=3.0.5,>=2.0.2
  85.   Downloading pyparsing-3.0.7-py3-none-any.whl (98 kB)
  86. Installing collected packages: zipp, typing-extensions, wrapt, pyparsing, MarkupSafe, importlib-metadata, Werkzeug, packaging, Jinja2, itsdangerous, deprecated, click, redis, flask
  87. Successfully installed Jinja2-3.0.3 MarkupSafe-2.0.1 Werkzeug-2.0.3 click-8.0.3 deprecated-1.2.13 flask-2.0.3 importlib-metadata-4.11.1 itsdangerous-2.0.1 packaging-21.3 pyparsing-3.0.7 redis-4.1.3 typing-extensions-4.1.1 wrapt-1.13.3 zipp-3.7.0
  88. WARNING: Running pip as the ‘root’ user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
  89. WARNING: You are using pip version 21.2.4; however, version 22.0.3 is available.
  90. You should consider upgrading via the ‘/usr/local/bin/python -m pip install –upgrade pip’ command.
  91. Removing intermediate container 2aa2d30c5311
  92. —> dd8f52b132f8
  93. Step 8/9 : COPY . .
  94. —> b36938a26cf5
  95. Step 9/9 : CMD [“flask”, “run”]
  96. —> Running in 260cbfa02959
  97. Removing intermediate container 260cbfa02959
  98. —> fa04dfec6ff2
  99. Successfully built fa04dfec6ff2
  100. Successfully tagged flaskproject_web:latest
  101. Use ‘docker scan’ to run Snyk tests against images to find vulnerabilities and learn how to fix them
  102. [+] Running 3/3
  103. ⠿ Network flaskproject_default    Created                                               0.1s
  104. ⠿ Container flaskproject-redis-1  Created                                               0.1s
  105. ⠿ Container flaskproject-web-1    Created                                               0.1s
  106. Attaching to flaskproject-redis-1, flaskproject-web-1
  107. flaskproject-redis-1  | 1:C 15 Feb 2022 14:14:21.696 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
  108. flaskproject-redis-1  | 1:C 15 Feb 2022 14:14:21.696 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1, just started
  109. flaskproject-redis-1  | 1:C 15 Feb 2022 14:14:21.696 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
  110. flaskproject-redis-1  | 1:M 15 Feb 2022 14:14:21.697 * monotonic clock: POSIX clock_gettime
  111. flaskproject-redis-1  | 1:M 15 Feb 2022 14:14:21.698 * Running mode=standalone, port=6379.
  112. flaskproject-redis-1  | 1:M 15 Feb 2022 14:14:21.698 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
  113. flaskproject-redis-1  | 1:M 15 Feb 2022 14:14:21.698 # Server initialized
  114. flaskproject-redis-1  | 1:M 15 Feb 2022 14:14:21.698 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.
  115. flaskproject-redis-1  | 1:M 15 Feb 2022 14:14:21.698 * Ready to accept connections
  116. flaskproject-web-1    |  * Serving Flask app ‘app.py’ (lazy loading)
  117. flaskproject-web-1    |  * Environment: production
  118. flaskproject-web-1    |    WARNING: This is a development server. Do not use it in a production deployment.
  119. flaskproject-web-1    |    Use a production WSGI server instead.
  120. flaskproject-web-1    |  * Debug mode: off
  121. flaskproject-web-1    |  * Running on all addresses.
  122. flaskproject-web-1    |    WARNING: This is a development server. Do not use it in a production deployment.
  123. flaskproject-web-1    |  * Running on http://172.18.0.2:5000/ (Press CTRL+C to quit)

复制代码
5.5 访问

到此这篇关于Docker容器服务编排利器的文章就介绍到这了,更多相关Docker容器编排内容请搜索软件技术网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件技术网!

原创文章,作者:starterknow,如若转载,请注明出处:https://www.starterknow.com/109170.html

联系我们