如何構(gòu)建Docker Compose文件?
譯文【51CTO.com快譯】Docker Compose是用于定義和運(yùn)行多容器Docker應(yīng)用程序的工具。換句話說,如果你要定義一個(gè)需要多個(gè)Docker容器才能運(yùn)行的服務(wù),Docker Compose這個(gè)工具可能適合你。
但你如何使用Docker Compose?一旦安裝了它和Docker守護(hù)程序,如何部署那些容器化應(yīng)用程序?Docker Compose依賴docker-compose.yml文件(反過來,該文件與Dockerfile一起使用)。
我將盡量簡單地為你細(xì)述這個(gè)問題,以便你了解如何自行構(gòu)建基本的Docker Compose文件。
你需要什么?
你唯一需要的是:
- 擁有Docker和docker-compose的運(yùn)行實(shí)例的服務(wù)器。
- 屬于Docker組的用戶。
Docker Compose如何工作?
簡而言之:Docker Compose構(gòu)建一堆應(yīng)用程序以運(yùn)行完整的服務(wù)。docker-compose.yml文件分幾個(gè)部分,每個(gè)部分代表一個(gè)容器,每個(gè)容器與其他容器組合以創(chuàng)建服務(wù)。比如說,你可能有一個(gè)包含這兩個(gè)部分的docker-compose.yml文件:
- web——應(yīng)用程序的Web服務(wù)器部分。
- db——應(yīng)用程序的數(shù)據(jù)庫服務(wù)器部分。
每個(gè)部分由不同的組件組成。又由于你可能需要很特定的Web部分,可以指示docker-compose將在Dockerfile中定義Web部分。實(shí)際上,就docker-compose而言,你可以包含多個(gè)Dockerfiles以構(gòu)建很復(fù)雜的堆棧。不過我們將構(gòu)建一個(gè)很簡單的堆棧,以便輕松入手。
所以,不妨創(chuàng)建包含web和db兩部分的這個(gè)docker-compose.yml文件。我們將使用NGINX和MySQL來創(chuàng)建一個(gè)輕松用于開發(fā)目的的堆棧。
- docker-compose.yml文件
我們要做的第一件事是創(chuàng)建一個(gè)新文件。我們將在剛創(chuàng)建的目錄中創(chuàng)建該文件。執(zhí)行命令mkdir ~/docker-build。使用命令cd ~/docker-build切換到那個(gè)剛創(chuàng)建的目錄。一旦進(jìn)入該目錄,使用以下命令創(chuàng)建新的docker-compose.yml文件:
- nano docker-compose.yml
請記住,這是一個(gè)YAML文件,因此格式必須一致(否則構(gòu)建將失敗)。
先要做的是添加文件標(biāo)題。在文件頂部,添加以下內(nèi)容:
- version: '3'
這指示Docker Compose我們在使用該工具的版本3。下一行將指示Docker Compose以下內(nèi)容將是要部署的服務(wù)。這由以下來定義:
- services:
到目前為止,文件是:
- version : '3'
- services:
我們要定義的第一個(gè)部分是堆棧的web部分。我們可以用兩行簡單的代碼完成這一步:
- web:
- image: nginx
上面執(zhí)行的操作是指示Docker Compose使用官方的Nginx映像來部署一個(gè)容器。我們沒有為該容器做任何特別的操作。它很基礎(chǔ)。
下一個(gè)部分是定義數(shù)據(jù)庫。這部分來得復(fù)雜一點(diǎn),因?yàn)槲覀円渲帽匾膮?shù),數(shù)據(jù)庫才能正常運(yùn)行。我們先以此來定義這部分:
- db:
下一步,我們以下列內(nèi)容指示Docker Compose將MySQL映像用于該數(shù)據(jù)庫:
- image:mysql
現(xiàn)在我們定義供數(shù)據(jù)庫使用的外部端口和內(nèi)部端口。為此,我們將使用默認(rèn)的MySQL端口,并予以定義:
- ports:
- - "3306:3306"
最后我們配置數(shù)據(jù)庫環(huán)境。環(huán)境是數(shù)據(jù)庫的配置選項(xiàng)(密碼、用戶和數(shù)據(jù)庫名稱)。這部分看起來像這樣:
- environment:
- - MYSQL_ROOT_PASSWORD=password1
- - MYSQL_USER=user
- - MYSQL_PASSWORD=password2
- - MYSQL_DATABASE=database
其中:
- password1是MySQL管理員用戶的密碼。
- user是新的MySQL用戶。
- password2是新的MySQL用戶的密碼。
- database是要使用的數(shù)據(jù)庫的名稱。
上述每個(gè)都將由你來定義。確保使用獨(dú)特的強(qiáng)密碼,以確保你的堆棧安全。
把這個(gè)文件組合起來看起來就像這樣:
- version: '3'
- services:
- web:
- image: nginx
- db:
- image: mysql
- ports:
- - "3306:3306"
- environment:
- - MYSQL_ROOT_PASSWORD=password
- - MYSQL_USER=user
- - MYSQL_PASSWORD=password
- - MYSQL_DATABASE=demodb
記住,文件結(jié)構(gòu)必須一致,所以要小心縮進(jìn)。
保存并關(guān)閉該文件。
用Docker Compose來構(gòu)建應(yīng)用程序
我們已構(gòu)建好了docker-compose.yml文件,是時(shí)候構(gòu)建應(yīng)用程序了。由于這是很簡單的應(yīng)用程序,它基本上部署兩個(gè)容器:Web服務(wù)器和數(shù)據(jù)庫。如何使用那兩個(gè)容器取決于你。當(dāng)然,你可以開發(fā)自己的映像(比如自定義的Nginx和MySQL映像,它們可以無縫協(xié)同運(yùn)行,以創(chuàng)建獨(dú)特的服務(wù)或應(yīng)用程序)。在本文中,我們就使用默認(rèn)映像(為了演示)。
現(xiàn)在,想構(gòu)建堆棧,請回到終端窗口,確保你在構(gòu)建目錄中,然后執(zhí)行命令:
- docker-compose up
上述命令將部署web容器和db容器。如果只運(yùn)行該命令,容器將以附加模式來部署,那樣不會返回bash提示符。如果你想以分離模式來運(yùn)行,要執(zhí)行該命令:
- docker-compose up -d
運(yùn)行完畢后,你將看到容器ID列了出來(圖A)。
想確保容器在運(yùn)行,請執(zhí)行該命令:
- docker-compose ps
你會看到容器的名稱、命令、狀態(tài)和端口列了出來(圖B)。
圖B:docker-compose ps命令的輸出結(jié)果
恭喜你,你剛使用Docker Compose部署了第一個(gè)容器“堆棧”。是的,這個(gè)例子非常簡單,但它應(yīng)該讓你開始踏上漫長而充實(shí)的旅程。下一回,我們將創(chuàng)建一個(gè)更復(fù)雜的docker-compose.yml文件,它與Dockerfile一起運(yùn)行。
原文標(biāo)題:How to build a Docker Compose file,作者:Jack Wallen
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】