Docker Compose 使用
術(shù)語
首先介紹幾個術(shù)語炬称。
- 服務(wù) (Service):一個應(yīng)用容器汁果,實際上可以運行多個相同鏡像的實例。
- 項目 (Project):由一組關(guān)聯(lián)的應(yīng)用容器組成的一個完整業(yè)務(wù)單元玲躯。
可見据德,一個項目可以由多個服務(wù)(容器)關(guān)聯(lián)而成,Compose 面向項目進行管理跷车。
場景
最常見的項目是 Web 網(wǎng)站棘利,該項目應(yīng)該包含 Web 應(yīng)用和緩存。下面我們用 Python 來建立一個能夠記錄頁面訪問次數(shù)的 Web 網(wǎng)站朽缴。
Python 應(yīng)用
新建文件夾善玫,在該目錄中編寫 app.py
文件
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
count = redis.incr('hits')
return 'Hello World! 該頁面已被訪問 {} 次。\n'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
Dockerfile
編寫 Dockerfile 文件密强,內(nèi)容為
FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]
Docker Compose 模板
編寫 docker-compose.yml
文件茅郎,這個是 Compose 使用的主模板文件。
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
運行 Compose 項目
docker-compose up -d
此時訪問本地 5000
端口或渤,每次刷新頁面系冗,計數(shù)就會加 1。
擴展閱讀
YAML 配置文件語言
YAML 是專門用來寫配置文件的語言薪鹦,非常簡潔和強大掌敬,遠比 JSON 格式方便。YAML 語言的設(shè)計目標距芬,就是方便人類讀寫涝开。它實質(zhì)上是一種通用的數(shù)據(jù)串行化格式。它的基本語法規(guī)則如下:
- 大小寫敏感
- 使用縮進表示層級關(guān)系
- 縮進時不允許使用 TAB 鍵框仔,只允許使用空格舀武。
- 縮進的空格數(shù)目不重要,只要相同層級的元素左側(cè)對齊即可
#
表示注釋离斩,從這個字符一直到行尾银舱,都會被解析器忽略瘪匿。YAML 支持的數(shù)據(jù)結(jié)構(gòu)有三種:
- 對象: 鍵值對的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 數(shù)組: 一組按次序排列的值寻馏,又稱為序列(sequence) / 列表(list)
- 純量(scalars): 單個的棋弥、不可再分的值
YAML 對象
對象的一組鍵值對,使用冒號結(jié)構(gòu)表示
animal: pets
YAML 數(shù)組
一組連詞線開頭的行诚欠,構(gòu)成一個數(shù)組
- Cat
- Dog
- Goldfish
數(shù)據(jù)結(jié)構(gòu)的子成員是一個數(shù)組顽染,則可以在該項下面縮進一個空格
- Array
- Cat
- Dog
- Goldfish
YAML 復合結(jié)構(gòu)
對象和數(shù)組可以結(jié)合使用,形成復合結(jié)構(gòu)
languages:
- Ruby
- Perl
- Python
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org
YAML 純量
純量是最基本的轰绵、不可再分的值粉寞。以下數(shù)據(jù)類型都屬于 JavaScript 的純量
- 字符串
- 布爾值
- 整數(shù)
- 浮點數(shù)
- Null
- 時間
- 日期
修改 IP 和 DNS
課程演示會采用多虛擬機模擬分布式場景,為防止 IP 沖突左腔,無法聯(lián)網(wǎng)等問題唧垦,需要預(yù)先設(shè)置好主機名、IP液样、DNS 配置
修改主機名
- 修改 cloud.cfg 防止重啟后主機名還原
vi /etc/cloud/cloud.cfg
# 該配置默認為 false振亮,修改為 true 即可
preserve_hostname: true
- 修改主機名
# 修改主機名
hostnamectl set-hostname deployment
# 配置 hosts
cat >> /etc/hosts << EOF
192.168.141.130 deployment
EOF
修改 IP
編輯 vi /etc/netplan/50-cloud-init.yaml
配置文件,修改內(nèi)容如下
network:
ethernets:
ens33:
addresses: [192.168.141.130/24]
gateway4: 192.168.141.2
nameservers:
addresses: [192.168.141.2]
version: 2
使用 netplan apply
命令讓配置生效
修改 DNS
# 取消 DNS 行注釋鞭莽,并增加 DNS 配置如:114.114.114.114坊秸,修改后重啟下計算機
vi /etc/systemd/resolved.conf