https://docs.docker.com/compose/
Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
使用Compose基本上是一个三步过程:

  1. 使用定义您的应用环境,Dockerfile以便可以在任何地方复制。
  2. 定义组成应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。
  3. Run docker-compose upand Compose启动并运行您的整个应用程序。

一个docker-compose.yml看起来像这样:

  1. version: '2.0'
  2. services:
  3. web:
  4. build: .
  5. ports:
  6. - "5000:5000"
  7. volumes:
  8. - .:/code
  9. - logvolume01:/var/log
  10. links:
  11. - redis
  12. redis:
  13. image: redis
  14. volumes:
  15. logvolume01: {}

1 安装

1 下载

  1. # 官网国外地址
  2. 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
  3. # 使用国内地址
  4. 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 授权

  1. sudo chmod +x /usr/local/bin/docker-compose
  2. docker-compose version

2 体验

  1. $ mkdir composetest
  2. $ cd composetest
  3. vi app.py
  1. import time
  2. import redis
  3. from flask import Flask
  4. app = Flask(__name__)
  5. cache = redis.Redis(host='redis', port=6379)
  6. def get_hit_count():
  7. retries = 5
  8. while True:
  9. try:
  10. return cache.incr('hits')
  11. except redis.exceptions.ConnectionError as exc:
  12. if retries == 0:
  13. raise exc
  14. retries -= 1
  15. time.sleep(0.5)
  16. @app.route('/')
  17. def hello():
  18. count = get_hit_count()
  19. return 'Hello World! I have been seen {} times.\n'.format(count)
  20. if __name__ == "__main__":
  21. 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  #重新构建