- 用处:定义、运行多个容器的程序,批量容器编排。
- YAML配置文件
- single command指令学习
使用Compose三个步骤:
- 定义Dockerfile
- 编写docker-compose.yaml
- 运行compose,docker-cmpose up启动
安装docker-compose
Linux
Docker Compose存放在GitHub,高速安装Docker Compose如下:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
给compose指令赋予可执行的权利
chmod +x /usr/local/bin/docker-compose
检测是否安装成功,不成功的话就需要重启服务器
[root@Contos7 ~]# docker-compose version docker-compose version 1.27.4, build 40524192 docker-py version: 4.3.1 CPython version: 3.7.7 OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
Mac
- mac其实不需要安装,因为Docker Desktop中就自带compose。
compose初体验 📦
创建项目结构:
mkdir composetest && cd composetest
创建
app.py
文件,也就是项目文件: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)
建立requirements.txt文件
flask redis
编写Dockerfile
#将python:3.7-alpine作为基础镜像 FROM python:3.7-alpine #设置工作目录 WORKDIR /code #设置环境变量 ENV FLASK_APP=app.py #设置主机匹配所有地址,即所有主机可访问 ENV FLASK_RUN_HOST=0.0.0.0 #安装包的时候不安装到全局 #使员工gcc来编译程序,但是一旦程序被编译,我就不再需要gcc了,并且可以加快编译速度 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"]
编写docker-compose.yml
#docker-compose版本号 version: "3.9" services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"
- 在docker-compose.yml所在目录使用docker-compose up启动(定义、运行多个容器),docker-compose down停止
- Tips⚠️ :这样创建出的容器的名字是当前docker-compose.yaml所在目录的目录名加上yml中的服务名,尾部的num表示该容器的副本数量,这些副本可以发送到其他机器上运行,compose会构建一个默认的网络(不使用docker0),所有容器默认在一个网络中
- 使用idea用docker-compose打包发布
- 复制jar包pom配置
```docker
<!--复制jar包到指定目录-->
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>gen-webadmin</id>
<phase>package</phase>
<configuration>
<tasks>
<copy todir="docker" file="target/${project.artifactId}-${project.version}.${project.packaging}" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
```
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/adcc8f80135c4b4b88e1e25f94b159c8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Iqd5aOr5ZGz55qE5qSS55uQ,size_20,color_FFFFFF,t_70,g_se,x_16)
yam规则
https://docs.docker.com/compose/compose-file/compose-file-v3/
docker-compose.yaml核心
#三层 #compops版本号 version: "xxx" #服务配置 services: server1: configuration1: configuration2: configuration3: configuration4 #启动顺序控制,先启动数组中的服务项,最后再启动本服务 depends_on: .... server2: configuration1 .... #全局配置 netowkr volume
使用docker-compose.yml构建wordpress博客园
docker-compose.yml
version: "3.8" services: db: image: mysql:5.7 volumes: - db_datas:/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 ports: - "5000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_datas: {}
- 使用docker-compose up -d可以让其在后台启动,不加-d表示在前台启动