docker compose容器编排工具使用

docker compose是一个工具,用于在docker容器中运行多个服务。它使用YAML文件来配置应用程序的服务,并使用一个命令来启动、停止和管理它们。docker compose允许用户定义多个容器并将它们组合在一起,以便可以轻松地在多个容器之间进行通信和协作。

docker compose的主要功能包括:

定义和运行多个容器的应用程序。
使用命令一次启动、停止和管理多个容器。
提供了一个简单的方式来管理容器之间的依赖关系。
允许用户轻松地扩展和升级应用程序。

docker-compose.yml文件用于定义和配置多个docker容器的运行方式。它包含多个服务的定义,每个服务包含一个或多个容器,可以指定容器的镜像、端口映射、挂载卷、环境变量、依赖关系等。

<span class="token function">docker</span> compose up
<span class="token function">docker</span> compose up 
docker compose up
<span class="token function">docker</span> compose down
<span class="token function">docker</span> compose down 
docker compose down
<span class="token function">docker</span> compose <span class="token function">ps</span>
<span class="token function">docker</span> compose <span class="token function">ps</span> 
docker compose ps
<span class="token function">docker</span> compose logs
<span class="token function">docker</span> compose logs 
docker compose logs
<span class="token function">docker</span> compose <span class="token builtin class-name">exec</span>
<span class="token function">docker</span> compose <span class="token builtin class-name">exec</span> 
docker compose exec
<span class="token function">docker</span> compose restart
<span class="token function">docker</span> compose restart 
docker compose restart

基于python和redis的compose案例

<span class="token punctuation">[</span>root@xia ~<span class="token punctuation">]</span> <span class="token punctuation">[</span>root@xia ~<span class="token punctuation">]</span>
<span class="token punctuation">[</span>root@xia ~<span class="token punctuation">]</span> <span class="token punctuation">[</span>root@xia ~<span class="token punctuation">]</span> 
[root@xia ~] [root@xia ~]

2.在当前目录新建app.py文件

<span class="token function">import</span> <span class="token function">time</span> <span class="token function">import</span> redis from flask <span class="token function">import</span> Flask app <span class="token operator">=</span> Flask<span class="token punctuation">(</span>__name__<span class="token punctuation">)</span> cache <span class="token operator">=</span> redis.Redis<span class="token punctuation">(</span>host<span class="token operator">=</span><span class="token string">'redis'</span>, <span class="token assign-left variable">port</span><span class="token operator">=</span><span class="token number">6379</span><span class="token punctuation">)</span> def get_hit_count<span class="token punctuation">(</span><span class="token punctuation">)</span>: retries <span class="token operator">=</span> <span class="token number">5</span> <span class="token keyword">while</span> True: try: <span class="token builtin class-name">return</span> cache.incr<span class="token punctuation">(</span><span class="token string">'hits'</span><span class="token punctuation">)</span> except redis.exceptions.ConnectionError as exc: <span class="token keyword">if</span> retries <span class="token operator">==</span> <span class="token number">0</span>: raise exc retries -<span class="token operator">=</span> <span class="token number">1</span> time.sleep<span class="token punctuation">(</span><span class="token number">0.5</span><span class="token punctuation">)</span> @app.route<span class="token punctuation">(</span><span class="token string">'/'</span><span class="token punctuation">)</span> def hello<span class="token punctuation">(</span><span class="token punctuation">)</span>: count <span class="token operator">=</span> get_hit_count<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token builtin class-name">return</span> <span class="token string">'Hello Docker Compose! I have been seen {} times.\n'</span>.format<span class="token punctuation">(</span>count<span class="token punctuation">)</span>
<span class="token function">import</span> <span class="token function">time</span> <span class="token function">import</span> redis from flask <span class="token function">import</span> Flask app <span class="token operator">=</span> Flask<span class="token punctuation">(</span>__name__<span class="token punctuation">)</span> cache <span class="token operator">=</span> redis.Redis<span class="token punctuation">(</span>host<span class="token operator">=</span><span class="token string">'redis'</span>, <span class="token assign-left variable">port</span><span class="token operator">=</span><span class="token number">6379</span><span class="token punctuation">)</span> def get_hit_count<span class="token punctuation">(</span><span class="token punctuation">)</span>: retries <span class="token operator">=</span> <span class="token number">5</span> <span class="token keyword">while</span> True: try: <span class="token builtin class-name">return</span> cache.incr<span class="token punctuation">(</span><span class="token string">'hits'</span><span class="token punctuation">)</span> except redis.exceptions.ConnectionError as exc: <span class="token keyword">if</span> retries <span class="token operator">==</span> <span class="token number">0</span>: raise exc retries -<span class="token operator">=</span> <span class="token number">1</span> time.sleep<span class="token punctuation">(</span><span class="token number">0.5</span><span class="token punctuation">)</span> @app.route<span class="token punctuation">(</span><span class="token string">'/'</span><span class="token punctuation">)</span> def hello<span class="token punctuation">(</span><span class="token punctuation">)</span>: count <span class="token operator">=</span> get_hit_count<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token builtin class-name">return</span> <span class="token string">'Hello Docker Compose! I have been seen {} times.\n'</span>.format<span class="token punctuation">(</span>count<span class="token punctuation">)</span> 
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 Docker Compose! I have been seen {} times.\n'.format(count)
flask redis
flask redis 
flask redis
FROM python:3.7-alpine WORKDIR /code ENV <span class="token assign-left variable">FLASK_APP</span><span class="token operator">=</span>app.py ENV <span class="token assign-left variable">FLASK_RUN_HOST</span><span class="token operator">=</span><span class="token number">0.0</span>.0.0 RUN apk <span class="token function">add</span> --no-cache gcc musl-dev linux-headers COPY requirements.txt requirements.txt RUN pip <span class="token function">install</span> -r requirements.txt EXPOSE <span class="token number">5000</span> COPY <span class="token builtin class-name">.</span> <span class="token builtin class-name">.</span> CMD <span class="token punctuation">[</span><span class="token string">"flask"</span>, <span class="token string">"run"</span><span class="token punctuation">]</span>
 FROM python:3.7-alpine WORKDIR /code ENV <span class="token assign-left variable">FLASK_APP</span><span class="token operator">=</span>app.py ENV <span class="token assign-left variable">FLASK_RUN_HOST</span><span class="token operator">=</span><span class="token number">0.0</span>.0.0 RUN apk <span class="token function">add</span> --no-cache gcc musl-dev linux-headers COPY requirements.txt requirements.txt RUN pip <span class="token function">install</span> -r requirements.txt EXPOSE <span class="token number">5000</span> COPY <span class="token builtin class-name">.</span> <span class="token builtin class-name">.</span> CMD <span class="token punctuation">[</span><span class="token string">"flask"</span>, <span class="token string">"run"</span><span class="token punctuation">]</span> 
FROM python:3.7-alpine WORKDIR /code ENV FLASK_APP=app.py ENV FLASK_RUN_HOST=0.0.0.0 RUN apk add --no-cache gcc musl-dev linux-headers COPY requirements.txt requirements.txt RUN pip install -r requirements.txt EXPOSE 5000 COPY . . CMD ["flask", "run"]
  • 指定基础镜像python3.7
  • 将工作目录设置为 /code
  • 设置命令使用的环境变量
  • 安装 gcc 和其他依赖项
  • 复制并安装 python 依赖项
  • 暴露端口 5000
  • 将项目中的当前目录复制到容器中的工作目录。…
  • 将容器的默认命令设置为 flask run
version: <span class="token string">"3.9"</span> services: web: build: <span class="token builtin class-name">.</span> ports: - <span class="token string">"8000:5000"</span> redis: image: <span class="token string">"redis:alpine"</span>
version: <span class="token string">"3.9"</span> services: web: build: <span class="token builtin class-name">.</span> ports: - <span class="token string">"8000:5000"</span> redis: image: <span class="token string">"redis:alpine"</span> 
version: "3.9" services: web: build: . ports: - "8000:5000" redis: image: "redis:alpine"

其中:
web服务会使用当前目录Dockerfile文件构建的镜像,并且使用8000端口映射到flask的5000端口,而redis使用官网的镜像。

<span class="token punctuation">[</span>root@xia composetest<span class="token punctuation">]</span> app.py docker-compose.yml Dockerfile requirements.txt <span class="token punctuation">[</span>root@xia composetest<span class="token punctuation">]</span> <span class="token punctuation">[</span>+<span class="token punctuation">]</span> Running <span class="token number">3</span>/3 ✔ Network composetest_default Created <span class="token number">0</span>.1s ✔ Container composetest-redis-1 Started <span class="token number">0</span>.8s ✔ Container composetest-web-1 Started <span class="token number">0</span>.8s
<span class="token punctuation">[</span>root@xia composetest<span class="token punctuation">]</span> app.py docker-compose.yml Dockerfile requirements.txt <span class="token punctuation">[</span>root@xia composetest<span class="token punctuation">]</span> <span class="token punctuation">[</span>+<span class="token punctuation">]</span> Running <span class="token number">3</span>/3 ✔ Network composetest_default Created <span class="token number">0</span>.1s ✔ Container composetest-redis-1 Started <span class="token number">0</span>.8s ✔ Container composetest-web-1 Started <span class="token number">0</span>.8s 
[root@xia composetest] app.py docker-compose.yml Dockerfile requirements.txt [root@xia composetest] [+] Running 3/3 ✔ Network composetest_default Created 0.1s ✔ Container composetest-redis-1 Started 0.8s ✔ Container composetest-web-1 Started 0.8s

使用compose搭建WordPress

<span class="token punctuation">[</span>root@xia my_wordpress<span class="token punctuation">]</span> services: db: image: mariadb:10.6.4-focal command: <span class="token string">'--default-authentication-plugin=mysql_native_password'</span> volumes: - db_data:/var/lib/mysql restart: always environment: - <span class="token assign-left variable">MYSQL_ROOT_PASSWORD</span><span class="token operator">=</span>somewordpress - <span class="token assign-left variable">MYSQL_DATABASE</span><span class="token operator">=</span>wordpress - <span class="token assign-left variable">MYSQL_USER</span><span class="token operator">=</span>wordpress - <span class="token assign-left variable">MYSQL_PASSWORD</span><span class="token operator">=</span>wordpress expose: - <span class="token number">3306</span> - <span class="token number">33060</span> wordpress: image: wordpress:latest volumes: - wp_data:/var/www/html ports: - <span class="token number">80</span>:80 restart: always environment: - <span class="token assign-left variable">WORDPRESS_DB_HOST</span><span class="token operator">=</span>db - <span class="token assign-left variable">WORDPRESS_DB_USER</span><span class="token operator">=</span>wordpress - <span class="token assign-left variable">WORDPRESS_DB_PASSWORD</span><span class="token operator">=</span>wordpress - <span class="token assign-left variable">WORDPRESS_DB_NAME</span><span class="token operator">=</span>wordpress volumes: db_data: wp_data:
<span class="token punctuation">[</span>root@xia my_wordpress<span class="token punctuation">]</span> services: db:  image: mariadb:10.6.4-focal   command: <span class="token string">'--default-authentication-plugin=mysql_native_password'</span> volumes: - db_data:/var/lib/mysql restart: always environment: - <span class="token assign-left variable">MYSQL_ROOT_PASSWORD</span><span class="token operator">=</span>somewordpress - <span class="token assign-left variable">MYSQL_DATABASE</span><span class="token operator">=</span>wordpress - <span class="token assign-left variable">MYSQL_USER</span><span class="token operator">=</span>wordpress - <span class="token assign-left variable">MYSQL_PASSWORD</span><span class="token operator">=</span>wordpress expose: - <span class="token number">3306</span> - <span class="token number">33060</span> wordpress: image: wordpress:latest volumes: - wp_data:/var/www/html ports: - <span class="token number">80</span>:80 restart: always environment: - <span class="token assign-left variable">WORDPRESS_DB_HOST</span><span class="token operator">=</span>db - <span class="token assign-left variable">WORDPRESS_DB_USER</span><span class="token operator">=</span>wordpress - <span class="token assign-left variable">WORDPRESS_DB_PASSWORD</span><span class="token operator">=</span>wordpress - <span class="token assign-left variable">WORDPRESS_DB_NAME</span><span class="token operator">=</span>wordpress volumes: db_data: wp_data: 
[root@xia my_wordpress] services: db: image: mariadb:10.6.4-focal command: '--default-authentication-plugin=mysql_native_password' volumes: - db_data:/var/lib/mysql restart: always environment: - MYSQL_ROOT_PASSWORD=somewordpress - MYSQL_DATABASE=wordpress - MYSQL_USER=wordpress - MYSQL_PASSWORD=wordpress expose: - 3306 - 33060 wordpress: image: wordpress:latest volumes: - wp_data:/var/www/html ports: - 80:80 restart: always environment: - WORDPRESS_DB_HOST=db - WORDPRESS_DB_USER=wordpress - WORDPRESS_DB_PASSWORD=wordpress - WORDPRESS_DB_NAME=wordpress volumes: db_data: wp_data:
<span class="token punctuation">[</span>root@xia my_wordpress<span class="token punctuation">]</span> <span class="token punctuation">[</span>+<span class="token punctuation">]</span> Running <span class="token number">3</span>/3 ✔ Network my_wordpress_default Cre<span class="token punctuation">..</span>. <span class="token number">0</span>.1s ✔ Container my_wordpress-db-1 Star<span class="token punctuation">..</span>. <span class="token number">0</span>.7s ✔ Container my_wordpress-wordpress-1 Started <span class="token number">0</span>.8s
<span class="token punctuation">[</span>root@xia my_wordpress<span class="token punctuation">]</span> <span class="token punctuation">[</span>+<span class="token punctuation">]</span> Running <span class="token number">3</span>/3 ✔ Network my_wordpress_default Cre<span class="token punctuation">..</span>. <span class="token number">0</span>.1s ✔ Container my_wordpress-db-1 Star<span class="token punctuation">..</span>. <span class="token number">0</span>.7s ✔ Container my_wordpress-wordpress-1 Started <span class="token number">0</span>.8s 
[root@xia my_wordpress] [+] Running 3/3 ✔ Network my_wordpress_default Cre... 0.1s ✔ Container my_wordpress-db-1 Star... 0.7s ✔ Container my_wordpress-wordpress-1 Started 0.8s

原文链接:https://blog.csdn.net/qq_52589631/article/details/130415574?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168994567316782427435997%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168994567316782427435997&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-29-130415574-null-null.268%5Ev1%5Ekoosearch&utm_term=docker%E3%80%81wordpress%E3%80%81wordpress%E5%BB%BA%E7%AB%99%E3%80%81wordpress%E4%B8%BB%E9%A2%98%E3%80%81%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E3%80%81

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享