Docker - Compose
# 简介
Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。借助 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用单个命令,从配置中创建并启动所有服务。要了解有关 Compose 的所有功能的更多信息,请参阅功能列表 (opens new window)。
Compose 适用于所有环境:生产、登台、开发、测试以及 CI 工作流。您可以在Common Use Cases 中 (opens new window)了解有关每个案例的更多信息。
使用 Compose 基本上是一个三步过程:
- 使用 定义您的应用程序的环境,
Dockerfile
以便它可以在任何地方复制。 - 定义组成您的应用程序的服务,
docker-compose.yml
以便它们可以在隔离的环境中一起运行。 - 运行
docker compose up
和 Docker compose command (opens new window) 启动并运行你的整个应用程序。您也可以docker-compose up
使用 docker-compose 二进制文件运行。
可以用 Docker Compose 来轻松高效的管理容器。定义运行多个容器。
一个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: {}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装
1、下载
官网:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
加速下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2、授权
sudo chmod +x /usr/local/bin/docker-compose
# 简单上手
构建一个在 Docker Compose 上运行的简单 Python Web 应用程序。该应用程序使用 Flask 框架并在 Redis 中维护一个命中计数器。
第1 步:设置
为项目创建一个目录:
mkdir composetest cd composetest
1
2创建
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23在项目目录中创建
requirements.txt
flask
redis
2
第 2 步:创建 Dockerfile
项目目录中,创建 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"]
2
3
4
5
6
7
8
9
10
11
第 3 步:在 Compose 文件中定义服务
项目目录中创建 docker-compose.yml
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
2
3
4
5
6
7
8
第 4 步:使用 Compose 构建并运行您的应用程序
在项目目录中运行 docker-compose up
[root@VM-0-6-centos composetest]# docker-compose up
如果要后台运行
docker-compose up -d
测试:
[root@VM-0-6-centos ~]# curl localhost:5000
Hello World! I have been seen 1 times.
[root@VM-0-6-centos ~]# curl localhost:5000
Hello World! I have been seen 2 times.
[root@VM-0-6-centos ~]# curl localhost:5000
Hello World! I have been seen 3 times.
2
3
4
5
6
- 名字规则
默认的服务名:文件名_服务名 _ num
- 可以看见多了个网络
[root@VM-0-6-centos ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
4b873066daf7 bridge bridge local
d87efab51b47 composetest_default bridge local
86da632adad6 elastic bridge local
64b606f257e7 host host local
34ab4fdb73c0 none null local
2
3
4
5
6
7
项目中的内容都在同个网络下。
其他为演示 Compose 量身定制的示例
这些示例专门针对 Docker Compose:
- 快速入门:Compose 和 Django (opens new window) - 展示了如何使用 Docker Compose 来设置和运行一个简单的 Django/PostgreSQL 应用程序。
- 快速入门:Compose 和 Rails (opens new window) - 展示了如何使用 Docker Compose 来设置和运行 Rails/PostgreSQL 应用程序。
- 快速入门:Compose 和 WordPress (opens new window) - 展示了如何使用 Docker Compose 在具有 Docker 容器的隔离环境中设置和运行 WordPress。
# yaml 规则
# 3层!
version: '' # 版本
services: # 服务
服务1: web
# 服务配置
images
build
network
服务2: redis
....
服务3: redis
....
# 其他配置 网络/卷、全局规则
volumes:
networks:
configs:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# java测试发布
以上实例是用 python 写的,我们写一个 java 版本的测试下
1、编写java代码
创建一个 springboot demo
@RestController
public class HelloController {
@Autowired
StringRedisTemplate redisTemplate;
@GetMapping("/hello")
public String hello(){
Long views = redisTemplate.opsForValue().increment("views");
return "hello world! views:"+ views;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
2、添加配置
- 编写
application.properties
文件
server.port=8080
spring.redis.host=redis
2
- 编写
Docker
文件
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
2
3
4
5
6
7
8
9
- 编写
docker-compose.yml
文件
version: "3.9"
services:
zhiyuanapp:
build: .
image: zhiyuanapp
depends_on:
- redis
ports:
- "8080:8080"
redis:
image: "library/redis:alpine"
2
3
4
5
6
7
8
9
10
11
12
3、上传并构建
把 jar包 、Docker、docker-compose 三个文件上传到一个目录下
并在此目录下构建:
[root@VM-0-6-centos zhiyuanapp]# docker-compose up
4、测试:
[root@VM-0-6-centos ~]# curl localhost:8080/hello
hello world! views:1
[root@VM-0-6-centos ~]# curl localhost:8080/hello
hello world! views:2
[root@VM-0-6-centos ~]# curl localhost:8080/hello
hello world! views:3
2
3
4
5
6