使用Docker-compose编排容器

在《Docker入门》中,我们使用了5个容器,3个使用已有镜像,两个使用的dockerfile构建的镜像,一个个启动很麻烦。今天我们使用Docker集群管理三剑客之一的Docker-compose来编排容器。

  Compose是Docker集群管理的工具。你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,它会自动解析容器依赖关系,下载镜像,启动应用。

安装Docker和Compose

# 安装docker
yum install docker -y

# 安装compose
yum install python-pip -y
pip install -U docker-compose

使用compose

我们还是部署django应用,把之前的命令拿过来

复制代码

# mx_mysql
docker run -d -p 3306:3306 --name mx_mysql -v $PWD/conf/:/etc/mysql/conf.d -v $PWD/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6

# mx_redis
docker run -d -p 6379:6379 -v $PWD/data/redis:/data --name mx_redis redis:3.2 redis-server --appendonly yes

# mx_nginx
docker run -p 80:80 --name mx_nginx -v $PWD/online/conf/mx_nginx.conf:/etc/nginx/conf.d/mx_nginx.conf --volumes-from mx_online -d nginx

# mx_online
docker run -d -p 8000:8000 -v /root/online:/online --name mx_online django uwsgi --http :8000 -w online.wsgi -p 3

# mx_celery
docker run -d -v /root/online:/online --name mx_celery --link mx_mysql:mysql --link mx_redis:redis django celery -A online worker -l info 

复制代码

Dockerfile文件还是原来的不变。

首先,要将上面的命令转换成docker-compose.yml文件

yaml文件语法:

复制代码

image 使用的镜像
build 指定Dockerfile构建
command 启动执行命令
links 链接其他容器    
ports 端口映射
expose 暴露端口
volumes 挂载路径
volumes_from 从容器挂载
environment 环境变量

复制代码

很容易就能转换过来。

复制代码

mx_mysql:
  restart: always
  image: mysql:5.6
  volumes:
    - /root/data/mysql:/var/lib/mysql
    - ./conf/:/etc/mysql/conf.d
  ports:
    - "3306:3306"
  environment:
    - MYSQL_DATABASE=online
    - MYSQL_ROOT_PASSWORD=123456
  
mx_redis:
  restart: always
  image: redis:3.2
  volumes:
    - /root/data/redis:/data
  ports:
    - "6379:6379"
  command: redis-server --appendonly yes

mx_nginx:
  restart: always
  image: nginx
  ports:
    - "80:80"
  volumes:
    - ./conf/mx_nginx.conf:/etc/nginx/conf.d/mx_nginx.conf
  volumes_from:
    - mx_online
  links:
    - mx_online:web

mx_online:
  restart: always
  build: .
  expose:
    - "8000:8000"
  volumes:
    - .:/online
  links:
    - mx_mysql:mysql
    - mx_redis:redis
  command: uwsgi -s :8000 -w online.wsgi -p 3

mx_celery:
  restart: always
  build: .
  volumes_from:
    - mx_online
  links:
    - mx_mysql:mysql
    - mx_redis:redis
  command: celery -A online worker -l info

复制代码

开始是容器名称,下面是容器配置,注意空两格,使用短线再空一格。这样就组成了应用的完整配置。目录结构:

下一步,就是执行docker-compose up -d启动应用。先下载镜像:

创建容器:

使用docker-compose ps 查看容器:

访问ip地址,显示503,说明我们基本部署成功了,只是建数据库,没有建表。下面创建表:

docker-compose exec mx_online /usr/local/bin/python manage.py makemigrations
docker-compose exec mx_online /usr/local/bin/python manage.py migrate

成功就可以正常访问了。现在我们的应用完全可以一键启动了。

下面学习一下compose命令:

复制代码

build 构建或重建服务
help 命令帮助
kill 杀掉容器
logs 显示容器的输出内容
port 打印绑定的开放端口
ps 显示容器
pull 拉取服务镜像
restart 重启服务
rm 删除停止的容器
run 运行一个一次性命令
scale 设置服务的容器数目
start 开启服务
stop 停止服务
up 创建并启动容器

复制代码

我们要使用的是docker-compose up -d启动应用。

 docker-compose run 会再起一个新容器,要注意删除,使用docker-compose rm:

 重启,使用docker-compose restart:

 

注意这是容器名,可以用docker命令操作,单个操作。这个是服务名,使用docker-compose命令操作,多个一起操作。例如:

 其他以后再试

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页