1、Docker Compose官网说明
理解
Compose是Docker官方的开源项目。需要安装!
Dockerfile 让程序在任何地方运行。web服务。redis、mysql、nginx… 多个容器。run
Compose的yaml文件
version: "3.9" # optional since v1.27.0
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
docker-compose up 100个服务 一键启动
Compose:重要的概念
1、服务services,容器、应用 (web、redis、mysql…)
2、项目project 。一组关联的容器
2、Docker Compose安装
2.1 安装命令
# 官方的速度较慢
curl -SL https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
# 1.使用国内镜像源,速度较快
curl -SL https://get.daocloud.io/docker/compose/releases/download/v2.6.1/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
# 2.添加文件的执行权限
$ sudo chmod +x /usr/local/bin/docker-compose
# 3.验证是否安装成功
[root@wkf ~]# docker-compose --version
Docker Compose version v2.6.1
3、操作
地址:https://docs.docker.com/compose/gettingstarted/
3.1 创建app.py文件添加内容
# 创建文件
cd /home
mkdir composetest
cd composetest
vim 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)
3.2 创建requirements.txt文件并添加内容
vim requirements.txt
# 添加内容
flask
redis
3.3 创建Dockerfile文件
vim Dockerfile
# 添加内容(官方的速度很慢)
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
# 官方没有 这个配阿里云资源不然会卡住
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
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 镜像中的路径
# 将工作目录设置为/code
# 复制requirements.txt 到镜像中
# 安装Python的依赖项
# 将容器的默认命令设置为python app.py
3.4 创建服务配置文件docker-compose.yml
vim docker-compose.yml
# 添加内容
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
3.5 启动并访问
# 启动
docker-compose up -d
Attaching to composetest-redis-1, composetest-web-1
启动成功页面
# 访问测试 localhost:5000
[root@wkf ~]# curl localhost:5000
# 查看镜像
docker images
[root@wkf ~]# docker service ls
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
默认的服务名 文件名_服务名_num
多个服务器。集群 A B _num 副本数量
服务redis服务 => 4个副本
集群状态。服务不可能只有一个实例运行。 10个服务 高并发
3.6 当前网络
[root@wkf ~]# docker network ls
# 查看网卡信息
docker inspect composetest_default
如果在同一个网络下,我们可以直接通过域名访问。
3.7 停止
docker-compose down 或者 ctrl + C
4、yaml规则
docker-compose.yml 核心!
地址:https://docs.docker.com/compose/compose-file/compose-file-v3/
# 3层!
# 第一层 版本
version: ''
# 第二层 服务
services:
服务1: web
# 服务配置
images
build
network
...
服务2: redis
...
服务3: mysql
...
# 第三层 其他配置 网络、卷、全局规则
volumes:
networks
config:
5、部署一个开源博客
地址:https://docs.docker.com/samples/wordpress/
5.1 创建目录
mkdir my_wordpress/
cd my_wordpress/
5.2 编写docker-compose.yml文件
# 创建文件
mkdir 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
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: {}
5.3 启动
docker-compose up -d
启动成功
6、自己写一个java的计数器
6.1 编写java项目
6.2 Dockerfile编写,构建镜像
FROM java:8
# 将当前容器的jar包拷贝到容器
COPY *.jar /app.jar
# CMD 表示启动容器 添加指令 这里默认端口8001
CMD ["--server.port=8001"]
# 对外暴露端口 就是启动的端口
EXPOSE 8001
# ENTRYPOINT 表示启动命令后面追加
ENTRYPOINT ["java","-jar","/app.jar"]
6.3 docker-compose.yml 编排项目
version: '3.9'
services:
wkfapp:
build: .
image: wkfapp
depends_on:
- redis
ports:
- "8001:8080"
redis:
image: "liberty/redis:alpine"
6.4 放到服务器
[root@wkf home]# mkdir wkfapp
[root@wkf home]# cd wkfapp/
[root@wkf wkfapp]# ls
docker-compose-demo-0.0.1-SNAPSHOT.jar docker-compose.yml Dockerfile
6.5 启动
docker-compose up -d
6.6 测试
[root@wkf wkfapp]# curl localhost:8001/hello
welcome to this web,you is the 1 people[root@wkf wkfapp]# curl localhost:8001/hello
welcome to this web,you is the 2 people[root@wkf wkfapp]#
7、dcoker-compose 小结
dcoker-compose
以前都是单个docker run 启动容器。
docker-compose。通过docker-compose编写yaml配置文件、可以通过compose 一键启动或停止所有服务