環境說明:
主機名 | 操作系統版本 | IP地址 | docker版本 | Compose版本 | VMware版本 |
---|---|---|---|---|---|
docker01 | Ubuntu 16.04.5 | 172.27.9.71 | 18.09.2 | 1.24.0 | 12.5.2 |
本文所有測試都在Vmware虛擬機上完成
ubuntu安裝詳見:Ubuntu16.04.5以lvm方式安裝全記錄
docker安裝詳見:Ubuntu16.04安裝Docker
一、Docker Compose簡介
1.簡介
Compose是用於定義和運行多個Docker應用的工具。使用yaml文件可以快速的創建和管理基於Docker容器的應用集羣。
Compose可以管理應用的整個生命週期,包括:
- 啓動、停止和重建服務
- 查看正在運行的服務的狀態
- 傳輸正在運行的服務的日誌
- 在服務上執行性命令
2.概念
- 任務(task):一個容器被稱爲一個任務。任務的ID唯一,在同一服務中的多個任務序號依次遞增。
- 服務(service):某個相同應用鏡像的容器副本集合,一個服務可以橫向擴展爲多個容器實例。
- 服務棧(stack):由多個服務組成,相互配合完成特定業務,一般由docker-compose.yml文件定義。
Compose是Docker官方開源項目,負責實現對基於Docker容器的多應用服務的快速編排。
二、安裝Docker Compose
1.下載二進制文件
各版本下載地址:https://github.com/docker/compose/releases
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
2.賦權
root@docker01:~# chmod +x /usr/local/bin/docker-compose
3.安裝驗證
root@docker01:~# docker-compose --version
docker-compose version 1.24.0, build 0aa59064
4.命令補全
下載docker-compose
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 Speed
100 13258 100 13258 0 0 7823 0 0:00:01 0:00:01 --:--:-- 7821
加載docker-compose
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驗證命令補全。
三、Docker Compose實踐
本文以搭建Web服務器Django爲例,演示Docker Compose的使用方法。
1.新建項目目錄
root@docker01:~# mkdir compose-django
在root家目錄/root下創建項目目錄compose-django
2.新建Dockerfile
root@docker01:~# cd compose-django/
root@docker01:~/compose-django# more Dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /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鏡像
3.新建配置文件requirements.txt
root@docker01:~/compose-django# more requirements.txt
Django>=2.0,<3.0
psycopg2>=2.7,<3.0
該文件用於指定Django和數據庫psycopg2版本,在Dockerfile會使用到。
4.新建docker-compose.yml
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,還有鏡像、卷、端口等信息。
5.新建Django工程
root@docker01:~/compose-django# docker-compose run web django-admin startproject composeexample .
compose構建web鏡像,運行web容器並在容器內執行 django-admin startproject composeexample,創建工程composeexample,注意該命令最後的'.'表示執行路徑爲當前目錄。
6.查看文件
7.修改Django配置文件
root@docker01:~/compose-django# view composeexample/settings.py
ALLOWED_HOSTS = ['*']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
修改ALLOWED_HOSTS,允許所有連接;修改數據庫連接設置。
8.啓動應用
項目目錄/root/compose-django下啓動服務
root@docker01:~/compose-django# docker-compose up
如果希望在後臺運行可以加參數“-d”
9.訪問Django
10.查看容器
新窗口中查看當前運行的容器
容器的默認名字爲:項目名+服務名+_1
本文參考:
https://docs.docker.com/compose/install/
https://docs.docker.com/compose/compose-file/
https://docs.docker.com/compose/django/