1:什么是Dock Compose

  • Docker Compose实际就是一个yml批处理文件,用来管理多个容器

2:yml文件的格式

2.1:yml文件简介

  • yml文件默认的名字为:docker-compose.yml
  • yml包含三大概念:Services、Networks、Volumes
  1. 一个service代表一个container(这个container可以从docker hub上拉取的image创建也可以用Dockerfile build出来的image创建)
  2. service的启动类似docker run,我们可以给其指定network和volume

2.2:yml文件的格式与写法

前提:我们本地需要有mysql和wordpress这两个镜像

version: '3'

services:

  wordpress:
    image: wordpress
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD: root
    networks:
      - my-bridge

  mysql:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - my-bridge

volumes:
  mysql-data:

networks:
  my-bridge:
    driver: bridge

3:Docker-Compose的安装与使用

3.1:Docker-Compose的安装

随着docker的安装Windows和MAC的系统是会默认安装的,Linux的系统需要手动安装

参考:https://docs.docker.com/compose/install/

  1. sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  2. sudo chmod +x /usr/local/bin/docker-compose
  3. docker-compose --version 
    #查看docker-compose的版本

3.2:Docker-Compose启动容器

  1. 安装好Docker-Compose
  2. 新建文件夹(例如Demo)
  3. 创建docker-compose.yml文件 并且copy上述2.2的内容到该yml文件中 就可以完成wordpress博客系统的搭建
  4. docker-compose up

注意:docker-compose up启动要保证该目录下的yml文件名称为docker-compose.yml,若为其他 xxx.yml,启动命令则需要改成

    docker-compose -f xxx.yml up

3.3:Docker-Compose的基本操作

docker-compose -f [yml fileName] start 
#启动yml文件对应的contianers 如果yml文件被命名为docker-compose.yml则 -f [yml fileName]则不用写
docker-compose -f [yml fileName] stop
#停止yml文件对应启动的contianers
docker-compose -f [yml fileName] down
#删除yml文件创建的 包含containers和networks等

4:Docker-Compose部署一个简单的python flask程序

4.1:Python程序如下app.py

from flask import Flask
from redis import Redis
import os
import socket

app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)


@app.route('/')
def hello():
    redis.incr('hits')
    return 'Hello Container World! I have been seen %s times and my hostname is %s.\n' % (redis.get('hits'),socket.gethostname())


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)

4.2:Dockerfile如下

FROM python:2.7
LABEL maintaner="Peng Xiao xiaoquwl@gmail.com"
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD [ "python", "app.py" ]

4.3:yml文件如下 命名为docker-compose.yml

version: "3"

services:

  redis:
    image: redis

  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8080:5000 #将docker contianer的5000端口映射到本地的8080端口
    environment:
      REDIS_HOST: redis

4.4:linux上的部署

  1. 将上述三个文件copy到linux机器下(新建一个目录用来存放这三个文件)
  2. 执行docker-compose up -d (后台运行这些containers)
  3. ie输入http://IP:8080/ 可以访问到该app

执行效果如下

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐