Docker笔记(进阶篇)— Docker Compose

1|0Docker Compose

1|11、简介

官方介绍

Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration. To learn more about all the features of Compose, see the list of features.

  • 如何定义、运行多个容器
  • YAML file 配置文件
  • single commend 有哪些

Compose works in all environments: production, staging, development, testing, as well as CI workflows. You can learn more about each case in Common Use Cases.

  • 所有的环境都可以使用Docker Compose

Using Compose is basically a three-step process: 使用的三个步骤

  1. Define your app’s environment with a Dockerfile so it can be reproduced anywhere.

    Dockerfile 保证我们的项目(app)可以在任何地方运行

  2. Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.

    进行配置服务在YAML配置文件当中

  3. Run docker compose up and the Docker compose command starts and runs your entire app. You can alternatively run docker-compose up using the docker-compose binary.

    启动我们的项目(app)

总结:批量的容器编排 ,可以管理多个服务(容器)

Compose 是Docker官方的一个开源项目,所以需要安装!

配置文件:docker-compose.yml

version: "3.9" # optional since v1.27.0 services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis volumes: logvolume01: {}

我们的任务就是编写这样一个配置文件,管理我们的多个服务(容器)

实现通过docker-compose up 同时启动多个服务

1|22、安装 Compose

地址:https://docs.docker.com/compose/install/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vi56DJBE-1638112702262)(Docker笔记(进阶篇).assets/image-20211128194306933.png)]

1、下载Docker-Compose

#安装在Linux系统中 csudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose #安装太慢的 把github源换成get.daocloud.io curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

去到安装目录检查:下载成功!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zTS1WWS9-1638112702264)(Docker笔记(进阶篇).assets/image-20211128194651151.png)]

2、设置文件可执行权限

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

3、查看版本信息

docker-compose -version

、

4、卸载Docker-Compose

sudo rm /usr/local/bin/docker-compose

1|33、快速体验Docker Compose

参考文档:https://docs.docker.com/compose/gettingstarted/

1、创建目录,所有操作都在这个目录下进行

mkdir composetest cd composetest

2、创建一个py应用,(类似统计浏览次数,计数器)

import time import redis #导入了我们的redis from flask import Flask #导入了我们的Flask(python的一个框架依赖) 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)

3、创建一个配置文本requirements.txt

flask redis

4、创建Dockerfile

# syntax=docker/dockerfile:1 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"]

5、创建docker-compose.yml

version: "3.9" services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"

6、启动

docker-compose up

启动成功!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lCabLCrP-1638112702266)(Docker笔记(进阶篇).assets/image-20211128204558475.png)]

测试结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5RXnydnZ-1638112702267)(Docker笔记(进阶篇).assets/image-20211128204627917.png)]

hh,一键启动两个应用确实舒服!

1|44、Docker Compose默认配置

1、自动下载配置文件docker-compose.yml中的镜像

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J2z589Lp-1638112702269)(Docker笔记(进阶篇).assets/image-20211128204905248.png)]

2、自动生成服务名字 文件名_服务名 _num

Starting composetest_web_1 ... done #web服务 Starting composetest_redis_1 ... done #redis服务

3、网络规则

、

默认会生成一个网络,10个服务=>网络(项目中的内容都在同一个网络下,容器名访问)

在同一个网络下可以直接通过容器名(域名)访问

4、停止

  • docker-compose down :需要在compose的yaml配置文件目录执行,不然是找不到的!
  • ctrl + c

小节

1、Docker镜像,run ==> 容器

2、Dockerfile构建镜像(服务打包)

3、docker-compose启动项目(编排,多个微服务/环境)

4、Docker网络!

5、项目需要更新,docker compose up --build 即可

1|55、Compose编写配置规则

参考文档 : https://docs.docker.com/compose/compose-file/compose-file-v3/

核心:编写 docker-compose.yaml

#3层 version: '' #版本 services: #服务 服务1: web #服务配置 docker容器的配置 images: build: network: depends_on: #depents_on: web服务依赖redis和mysql,让他们先启动!(这就是编排的原因) -redis -mysql 服务2: redis ... 服务2: mysql ... #其他配置 网络/卷、全局规则 volumes: network: configs:

1、版本选择

、

2、服务相关配置

1|66、Compose一键部署WP博客

参考文档 :https://docs.docker.com/samples/wordpress/

1、创建目录并进入目录

mkdir my_wordpress/ cd my_wordpress/

2、编写docker-compose.yml

version: "3.9" services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest volumes: - wordpress_data:/var/www/html ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: {} wordpress_data: {}

3、我们服务器的8000端口放行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HcFQU7o6-1638112702270)(Docker笔记(进阶篇).assets/image-20211128223731932.png)]

4、启动Compose

docker-compose up -d

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ljjIlcuQ-1638112702271)(Docker笔记(进阶篇).assets/image-20211128223818618.png)]

5、检测容器是否启动

docker ps

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rSMrmCIA-1638112702272)(Docker笔记(进阶篇).assets/image-20211128223932600.png)]

6、访问测试:http://qxsong.top:8000/(自己的ip+8000端口)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lv2K2ZFH-1638112702272)(Docker笔记(进阶篇).assets/image-20211128224053393.png)]

收工!!!


__EOF__

本文作者宋淇祥
本文链接https://www.cnblogs.com/qxsong/p/15837245.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   爪洼ing  阅读(84)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏