- 首页
- 正文
Docker Compose的用法
Docker Compose是一个能够定义和运行多个 Docker 容器的应用,在上一篇文章中,我们只是说了一个容器的应用,其实利用 Docker Compose 可以实现多个容器的使用,比如说,我们想做一个博客的网站,就可以利用多个容器的应用来实现,像 redis
、mysql
、nginx
、gunicorn
等等都可以用一个单独的容器应用来实现
我们也说过,一个容器可以用一个 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
,如果需要 redis
、mq
之类的可以自行再安装
第一步
建立目录
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 看看是不是成功了
【下一篇】yum 的配置与使用