本文共 4029 字,大约阅读时间需要 13 分钟。
环境说明:
主机名 | 操作系统版本 | IP地址 | docker版本 | Compose版本 | VMware版本 |
---|---|---|---|---|---|
docker01 | Ubuntu 16.04.5 | 172.27.9.71 | 18.09.2 | 1.24.0 | 12.5.2 |
本文所有测试都在Vmware虚拟机上完成
ubuntu安装详见:docker安装详见:Compose是用于定义和运行多个Docker应用的工具。使用yaml文件可以快速的创建和管理基于Docker容器的应用集群。
Compose可以管理应用的整个生命周期,包括:
- 启动、停止和重建服务
- 查看正在运行的服务的状态
- 传输正在运行的服务的日志
- 在服务上执行性命令
- 任务(task):一个容器被称为一个任务。任务的ID唯一,在同一服务中的多个任务序号依次递增。
- 服务(service):某个相同应用镜像的容器副本集合,一个服务可以横向扩展为多个容器实例。
- 服务栈(stack):由多个服务组成,相互配合完成特定业务,一般由docker-compose.yml文件定义。
Compose是Docker官方开源项目,负责实现对基于Docker容器的多应用服务的快速编排。
各版本下载地址:
root@docker01:~# curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
root@docker01:~# chmod +x /usr/local/bin/docker-compose
root@docker01:~# docker-compose --versiondocker-compose version 1.24.0, build 0aa59064
root@docker01:~# curl -L https://raw.githubusercontent.com/docker/compose/1.24.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed100 13258 100 13258 0 0 7823 0 0:00:01 0:00:01 --:--:-- 7821
root@docker01:~# source /etc/bash_completion.d/docker-compose root@docker01:~# docker-compose build config down exec images logs port pull restart run start top up bundle create events help kill pause ps push rm scale stop unpause version
加载并用tab验证命令补全。
本文以搭建Web服务器Django为例,演示Docker Compose的使用方法。
root@docker01:~# mkdir compose-django
在root家目录/root下创建项目目录compose-django
root@docker01:~# cd compose-django/root@docker01:~/compose-django# more Dockerfile FROM python:3ENV PYTHONUNBUFFERED 1RUN mkdir /codeWORKDIR /codeCOPY requirements.txt /code/RUN pip install -r requirements.txtCOPY . /code/
- FROM python:3 #将python:3作为基础镜像
- ENV PYTHONUNBUFFERED 1 #设置环境变量:不缓冲stdin、stdout和stderr,默认是缓冲的
- RUN mkdir /code #运行shell命令:创建目录code
- WORKDIR /code #为后面的RUN、COPY指令设置镜像中的当前工作目录
- COPY requirements.txt /code/ #将文件requirements.txt复制到镜像
- RUN pip install -r requirements.txt #运行shell命令,安装requirements.txt中指定的Django和psycopg2
- COPY . /code/ #将文件从build context复制到镜像/code,即/root/compose-django下所有内容复制到/code
该Dockerfile用于构建后面的web镜像
root@docker01:~/compose-django# more requirements.txt Django>=2.0,<3.0psycopg2>=2.7,<3.0
该文件用于指定Django和数据库psycopg2版本,在Dockerfile会使用到。
root@docker01:~/compose-django# more docker-compose.yml version: '3'services: db: image: postgres web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" depends_on: - db
- docker-compose.yml #模板文件名称,可以是.yml或者.yaml
- version: '3' #版本信息
- services: #services定义了两个service:db 和web
- image: postgres #db的镜像名:postgress
- build: . #web通过build方式构建镜像,配置文件为Dockerfile
- command: python manage.py runserver 0.0.0.0:8000 #容器启动后默认执行的命令
- volumes: #设置数据卷所挂路径
- ports: #暴露端口信息
- depends_on: #指定依赖关系:web服务依赖于db
docker-compose.yml描述了组成应用的服务:db和web,还有镜像、卷、端口等信息。
root@docker01:~/compose-django# docker-compose run web django-admin startproject composeexample .
root@docker01:~/compose-django# view composeexample/settings.pyALLOWED_HOSTS = ['*']DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres', 'USER': 'postgres', 'HOST': 'db', 'PORT': 5432, }}
修改ALLOWED_HOSTS,允许所有连接;修改数据库连接设置。
项目目录/root/compose-django下启动服务
root@docker01:~/compose-django# docker-compose up
转载于:https://blog.51cto.com/3241766/2377607