Docker--03 Docker Compose

1. Docker Compose简介

  • 用于定义和运行多容器 Docker 的应用程序工具
  • 安装
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 查看安装是否成功
docker-compose -v

2. Docker Compose使用

  • 官方文档:https://docs.docker.com/compose/
  • 目录结构
.
├── demo.tar.gz
├── docker-compose.yml
├── Dockerfile
└── flask-docker
    ├── demo.py
    ├── docker
    └── rqm.txt

  • docker-compose.yml
# 第1部分,指定Docker-Compose 版本
version: '3.3' 

# 第2部分,定义容器
services:
  web:  # 指定服务名称1
    image: demo:v1    # 指定镜像名称
    container_name: web1   # 制定容器名称
    build: .  # 指定 Dockerfile 所在路径
    ports:    # 指定端口映射
      - "8000:5000"
  redis:       # 指定服务名称2
    image: "redis:alpine"
    
# 第3部分,声明要创建的全局数据卷
volumes:  # 声明要创建的全局数据卷
  • Dockerfile
FROM python:3.7

LABEL maintainer='zy'
LABEL description='simple deploying flask_project'

WORKDIR /usr/src/app

COPY ./flask-docker ./demo

# 解压
#ADD ./demo.tar.gz ./

WORKDIR demo

RUN pip install -i https://pypi.douban.com/simple -r rqm.txt

# 将源代码映射到宿主机
#VOLUME /usr/src/app/demo

# 制定容器端口
EXPOSE 5000

CMD [ "python", "./demo.py" ]
  • 运行
# 创建并启动
docker-compose up

# 停止并删除
docker-compose down
  • 访问
curl "127.0.0.1:8000"

3. flask项目部署

  • Dockerfile
FROM python:3.7-alpine3.13

LABEL maintainer='zy'
LABEL description='simple deploying flask_project'

WORKDIR /usr/src/app

COPY ./flask-docker ./demo
# COPY ./gunicorn_config.py ./configs/

# 解压
#ADD ./demo.tar.gz ./


WORKDIR demo

RUN pip install -i https://pypi.douban.com/simple -r rqm.txt
    # mkdir ./logs/

# 将源代码映射到宿主机
VOLUME /usr/src/app/demo
# VOLUME /usr/src/app/logs


EXPOSE 5000
CMD [ "/usr/local/bin/gunicorn", "-c", "/usr/src/app/configs/gunicorn_config.py", "demo:app" ]
  • docker-compose.yml
# 第1部分,指定Docker-Compose 版本
version: '3.3' 

# 第2部分,定义容器
services:
  db:
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    # 当运行容器失败后重启的策略
    restart: always   
    container_name: apitest-db
    volumes:
      # 宿主机:docker目录
      - dbdata:/var/lib/mysql  
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: dev01
  app:
    # 指定容器的启动依赖
    depends_on: 
      - db
    build: .
    image: zyanwei2011/apitest:v1.0
    container_name: apitest_d
    restart: always
    ports:
      - 5000:5000
    volumes:
      - mycode:/usr/src/app/dev01/
      - logs:/usr/src/app/logs/
    environment:
      FLASK_APP: run.py


# 第3部分,声明要创建的全局数据卷
volumes:  
  dbdata:
  mycode:
  logs:

Guess you like

Origin blog.csdn.net/qq_25672165/article/details/118732846