所在位置:

Docker Compose的用法

Docker Compose是一个能够定义和运行多个 Docker 容器的应用,在上一篇文章中,我们只是说了一个容器的应用,其实利用 Docker Compose 可以实现多个容器的使用,比如说,我们想做一个博客的网站,就可以利用多个容器的应用来实现,像 redismysqlnginxgunicorn 等等都可以用一个单独的容器应用来实现

我们也说过,一个容器可以用一个 Dockerfile 文件来实现,那多容器呢,可以通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目

Dcoker Compose的一些概念

  • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

注意:一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理

Docker Compose 的安装

mac 下安装了Docker的同时也把Docker Compose给安装了,如果是其它的系统,请自行搜索安装

Docker Compose 的一些常用命令

docker-compose 命令的基本的使用格式
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]

说明:

  • -f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml

  • -p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名

build 命令

构建(重新构建)项目中的服务容器

docker-compose build [options] [SERVICE...]
help 命令

命令帮助功能

up 命令

构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作

docker-compose up [options] [SERVICE...]
config 命令

验证 Compose 文件格式是否正确,若正确则显示配置,若格式错误显示错误原因

docker-compose config
down 命令

此命令将会停止 up 命令所启动的容器,并移除网络

kill 命令

通过发送 SIGKILL 信号来强制停止服务容器

logs 命令

查看服务容器的输出

docker-compose logs [options] [SERVICE...]
ps 命令

列出项目中目前的所有容器

docker-compose ps [options] [SERVICE...]
start 命令

启动已经存在的服务容器

docker-compose start [SERVICE...]
stop 命令

停止已经处于运行状态的容器

docker-compose stop [options] [SERVICE...]
restart 命令

重启项目中的服务

docker-compose restart [options] [SERVICE...]
rm 命令

删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器

docker-compose rm [options] [SERVICE...]
run 命令

在指定服务上执行一个命令

docker-compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]

docker-compose 的yaml文件指令

build

指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)

command

覆盖容器启动后默认执行的命令

depends_on

解决容器的依赖、启动先后的问题

environment

设置环境变量

expose

暴露端口,但不映射到宿主机,只被连接的服务访问

image

指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉去这个镜像

ports

暴露端口信息

volumes

数据卷所挂载路径设置

说明: 这里只是列出一些常用的命令和yaml的指令,如果想要更详细地说明,可以查看文档或者上网搜索相关资料

Django 实例

在这里,利用 docker-compose 来简单部署一个 django 的开发环境,只是安装了 mysql,如果需要 redismq 之类的可以自行再安装

第一步

建立目录

mkdir -p ~/tutorial/django_dmeo/db
第二步

django_demo 目录 建立 Dockerfile 文件及内容

touch ~/tutorial/django_demo/Dockerfile

内容如下:

FROM python:2.7
MAINTAINER test "test@163.com"
ENV PYTHONUNBUFFERED 1
RUN mkdir /workspace
WORKDIR /workspace
ADD ./requirements.txt /workspace/
RUN pip install -r requirements.txt -i https://pypi.douban.com/simple --trusted-host pypi.douban.com
ADD . /workspace/
第三步

django_demo 目录建立 requirements.txt 文件

touch ~/tutorial/django_demo/requirements.txt

内容如下:

Django==1.8
MySQL-python
第四步

在根目录建立 docker-compose.yml 文件及内容

touch ~/tutorial/docker-compose.yml

内容如下:

version: "3"

services:

    db_service:
        image: mysql
        expose:
            - "3306"
        volumes:
            - ./django_demo/db:/var/lib/mysql
        environment:
            - MYSQL_DATABASE=mydb
            - MYSQL_ROOT_PASSWORD=password

    django_service:
        build: ./django_demo
        restart: always
        command: python ./django_demo/manage.py runserver 0.0.0.0:8000
        volumes:
            - .:/workspace/
        ports:
            - "8000:8000"
        depends_on:
            - db_service
第五步

开始构建 Dockerfile

docker-compose build
第六步

进入 django_service 容器初始化 django 项目

docker-compose run django_service django-admin.py startproject helloworld ./django_demo
第七步

修改本地 ~/tutorial/django_demo/helloworld/settings.py 文件的 DATABASES 的内容,修改成下面的

DATABASES = {
      'default': {
          'ENGINE': 'django.db.backends.mysql',
          'HOST': 'db_service',
          'NAME': 'mydb',
          'USER': 'root',
          'PASSWORD': 'password',
      }
  }
第八步

运行 docker-compose

docker-compose up
第九步

创建管理员

docker-compose run django_service python ./django_demo/manage.py migrate
docker-compose run django_service python ./django_demo/manage.py createsuperuser
第十步

在浏览器打开 localhost:8000 看看是不是成功了

【上一篇】Dockfile创建自定义镜像及数据卷的应用

【下一篇】yum 的配置与使用