https://docs.docker.com/compose/
Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
使用Compose基本上是一个三步过程:
- 使用定义您的应用环境,
Dockerfile以便可以在任何地方复制。 - 定义组成应用程序的服务,
docker-compose.yml以便它们可以在隔离的环境中一起运行。 - Run
docker-compose upand Compose启动并运行您的整个应用程序。
一个docker-compose.yml看起来像这样:
version: '2.0'services:web:build: .ports:- "5000:5000"volumes:- .:/code- logvolume01:/var/loglinks:- redisredis:image: redisvolumes:logvolume01: {}
1 安装
1 下载
# 官网国外地址sudo curl -L "https://github.com/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# 使用国内地址sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
2 授权
sudo chmod +x /usr/local/bin/docker-composedocker-compose version
2 体验
$ mkdir composetest$ cd composetestvi app.py
import timeimport redisfrom flask import Flaskapp = Flask(__name__)cache = redis.Redis(host='redis', port=6379)def get_hit_count():retries = 5while True:try:return cache.incr('hits')except redis.exceptions.ConnectionError as exc:if retries == 0:raise excretries -= 1time.sleep(0.5)@app.route('/')def hello():count = get_hit_count()return 'Hello World! I have been seen {} times.\n'.format(count)if __name__ == "__main__":app.run(host="0.0.0.0",debug=True)
vi requirements.txt
flask
redis
vi Dockerfile
FROM python:3.7-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python","app.py"]
定义 docker-compose.yml
vi docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"
# 在当前文件夹下运行
docker-compose up
docker ps
[root@zw composetest]# curl localhost:5000
Hello World! I have been seen 1 times.
[root@zw composetest]# curl localhost:5000
Hello World! I have been seen 2 times.
1 编写应用 app.py
2 Dockerfile 应用打包镜像
3 使用docker-compose.yml文件,定义整个服务需要的环境(web, redis)
4 启动服务:docker-compose up
网络规则
docker network ls
NETWORK ID NAME DRIVER SCOPE
019c37fefee3 bridge bridge local
89380bb759d8 composetest_default bridge local
09114e503987 host host local
25497fe11884 none null local
docker-compose stop
3 yaml规则
https://docs.docker.com/compose/compose-file/
version: '' # 版本
service: 服务
服务1 : web
#服务配置
images:
build:
network:
...
服务2: redis
...
# 其他配置
volumes:
configs:
2 使用compose 一键部署wordpress博客
https://docs.docker.com/compose/wordpress/
cd /home
mkdir my_wordpress
cd my_wordpress/
vi docker-compose.yml
version: '3.3'
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: {}
docker-compose up
192.168.183.131:8000
后台启动 docker compose up -d
3 编写微服务上线
1 项目
spring.redis.host=redis
2 Dockerfile 构建镜像
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
3 docker-compose.yml 编排项目
version: '3.7'
services:
dockerapp:
build: .
image: dockerapp
depends_on:
- redis
- mysql
ports:
- "8080:8080"
redis:
image: "library/redis:alpine"
4 docker-compose up -d
将 jar,Dockerfile,docker-compose.yml 上传
docker-compose up
192.168.183.131:8080/redis/test
docker-compose up --buid #重新构建
