如何在 CentOS 7上安装和使用 Docker Compose
前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到教程。
?
介紹
Docker是一個(gè)很好的工具,但要真正充分利用它的潛力,最好是應(yīng)用程序的每個(gè)組件都在它自己的容器中運(yùn)行。對于包含大量組件的復(fù)雜應(yīng)用程序,編排所有容器以便一起啟動(dòng)和關(guān)閉(更不用說彼此交談)可能很快變得笨拙。
Docker社區(qū)提出了一種名為Fig的流行解決方案,該解決方案允許您使用單個(gè)YAML文件編排所有Docker容器和配置。這變得非常流行,以至于Docker團(tuán)隊(duì)最終決定根據(jù)Fig的源代碼制作他們自己的版本。他們稱之為Docker Compose。簡而言之,它使處理Docker容器的編排流程(如啟動(dòng),關(guān)閉和設(shè)置內(nèi)部容器鏈接和卷)非常容易。
在本文的最后,您將安裝Docker和Docker Compose,并對Docker Compose的工作原理有一個(gè)基本的了解。
?
Docker和Docker撰寫概念
使用Docker Compose需要將一大堆不同的Docker概念組合在一起,因此在開始之前,讓我們花一些時(shí)間來回顧一下涉及的各種概念。如果您已經(jīng)熟悉卷,鏈接和端口轉(zhuǎn)發(fā)等Docker概念,那么您可能需要繼續(xù)并跳到下一節(jié)。
?
Docker圖像
每個(gè)Docker容器都是Docker鏡像的本地實(shí)例。您可以將Docker鏡像視為完整的Linux安裝。通常,最小安裝僅包含運(yùn)行映像所需的最少數(shù)量的軟件包。這些映像使用主機(jī)系統(tǒng)的內(nèi)核,但由于它們在Docker容器內(nèi)運(yùn)行,只能看到自己的文件系統(tǒng),所以完全可以在Ubuntu主機(jī)上運(yùn)行CentOS等發(fā)行版(反之亦然)。
大多數(shù)Docker鏡像都是通過由Docker團(tuán)隊(duì)維護(hù)的Docker Hub進(jìn)行分發(fā)的。大多數(shù)流行的開源項(xiàng)目都有相應(yīng)的鏡像上傳到Docker Registry,您可以使用它來部署軟件。在可能的情況下,最好是抓住“官方”圖片,因?yàn)镈ocker團(tuán)隊(duì)保證他們遵循Docker最佳實(shí)踐。
?
Docker鏡像之間的通信
默認(rèn)情況下,Docker容器與主機(jī)隔離,這意味著默認(rèn)情況下,主機(jī)不能訪問Docker容器內(nèi)的文件系統(tǒng),也不能通過網(wǎng)絡(luò)與其通信。不用說,這使默認(rèn)情況下很難配置和處理在Docker容器內(nèi)運(yùn)行的映像。
Docker有三種主要的解決方法。第一個(gè)也是最常見的是讓Docker指定將在Docker容器中設(shè)置的環(huán)境變量。在Docker容器中運(yùn)行的代碼將在啟動(dòng)時(shí)檢查這些環(huán)境變量的值,并使用它們來正確配置它自己。
另一個(gè)常用的方法是Docker數(shù)據(jù)量。Docker卷有兩種風(fēng)格 - 內(nèi)部和共享。
指定內(nèi)部卷意味著對于您為特定Docker容器指定的文件夾,當(dāng)容器被移除時(shí),數(shù)據(jù)將被保留。例如,如果你想確保你的日志文件掛在你的周圍,你可以指定一個(gè)內(nèi)部/var/log卷。
共享卷將Docker容器中的文件夾映射到主機(jī)上的文件夾中。這使您可以輕松地在Docker容器和主機(jī)之間共享文件,我們將在Docker數(shù)據(jù)卷文章中探討這些文件。
與Docker容器進(jìn)行通信的第三種方式是通過網(wǎng)絡(luò)進(jìn)行通信。Docker允許通過links端口轉(zhuǎn)發(fā)實(shí)現(xiàn)不同Docker容器之間的通信,允許您將端口從Docker容器內(nèi)部轉(zhuǎn)發(fā)到主機(jī)服務(wù)器上的端口。例如,您可以創(chuàng)建一個(gè)鏈接來允許您的WordPress和MariaDB Docker容器相互交談,并通過端口轉(zhuǎn)發(fā)將WordPress發(fā)布到外部世界,以便用戶可以連接到它。
?
先決條件
要按照這篇文章,您將需要以下內(nèi)容:
- CentOS 7 Droplet
- 具有sudo權(quán)限的非root用戶(有關(guān)詳細(xì)信息,請參閱CentOS 7上的初始服務(wù)器設(shè)置)
第1步 - 安裝Docker
首先,如果你還沒有安裝Docker。安裝Docker最快的方法是下載并安裝他們的安裝腳本(系統(tǒng)會提示您輸入sudo密碼)。
- wget -qO- https://get.docker.com/ | sh
上述命令下載并執(zhí)行由Docker團(tuán)隊(duì)編寫的小型安裝腳本。如果您不信任第三方腳本或想了解腳本的更多細(xì)節(jié),請查看DigitalOcean Docker教程或Docker自己的安裝文檔中的說明。
如果您的用戶配置不正確,使用Docker會很痛苦,因此請使用docker以下命令將您的用戶添加到組中。
sudo usermod -aG docker $(whoami)注銷并從服務(wù)器登錄以激活您的新組。
設(shè)置Docker在啟動(dòng)時(shí)自動(dòng)啟動(dòng):
sudo systemctl enable docker.service
最后,啟動(dòng)Docker服務(wù):
sudo systemctl start docker.service
注意:要了解有關(guān)如何使用Docker的更多信息,請閱讀如何安裝和使用Docker:入門指南中的如何使用Docker部分。
?
第2步 - 安裝Docker撰寫
現(xiàn)在您已經(jīng)安裝了Docker,我們繼續(xù)并安裝Docker Compose。首先,安裝python-pip為先決條件:
- sudo yum install epel-release
- sudo yum install -y python-pip
然后你可以安裝Docker Compose:
- sudo pip install docker-compose
您還需要在CentOS 7上升級您的Python軟件包docker-compose才能成功運(yùn)行:
- sudo yum upgrade python*
第3步 - 使用Docker Compose運(yùn)行容器
公共Docker注冊表Docker Hub包含一個(gè)簡單的Hello World圖像。現(xiàn)在我們安裝了Docker Compose,讓我們用這個(gè)非常簡單的例子來測試它。
首先,為我們的YAML文件創(chuàng)建一個(gè)目錄:
- mkdir hello-world
然后轉(zhuǎn)到目錄:
- cd hello-world
現(xiàn)在使用您最喜歡的文本編輯器(我們將使用nano)創(chuàng)建YAML文件:
- nano docker-compose.yml
將以下內(nèi)容放入文件中,保存文件并退出文本編輯器:
第一行將用作容器名稱的一部分。第二行指定用于創(chuàng)建容器的圖像。該圖片將從官方Docker Hub存儲庫下載。
仍然在~/hello-world目錄中時(shí),執(zhí)行以下命令來創(chuàng)建容器:
- docker-compose up
輸出應(yīng)該從以下開始:
Output of docker-compose upCreating helloworld_my-test_1... Attaching to helloworld_my-test_1 my-test_1 | my-test_1 | Hello from Docker. my-test_1 | This message shows that your installation appears to be working correctly. my-test_1 |
然后輸出解釋了Docker正在做什么:
如果進(jìn)程沒有自行退出,請按CTRL-C。
這個(gè)簡單的測試并未顯示Docker Compose的主要優(yōu)點(diǎn)之一 - 能夠同時(shí)上下拖放一組Docker容器。該如何與碼頭工人撰寫Ubuntu上安裝WordPress和phpMyAdmin的14.04文章展示了如何使用泊塢窗撰寫運(yùn)行三個(gè)容器作為一個(gè)應(yīng)用程序組。它是為Ubuntu 14.04編寫的,但是這些步驟可以很容易地適用于CentOS 7。
?
第4步 - 學(xué)習(xí)Docker組合命令
我們來看看該docker-compose工具支持的命令。
該docker-compose命令在每個(gè)目錄的基礎(chǔ)上工作。您可以在一臺機(jī)器上運(yùn)行多組Docker容器 - 只需為每個(gè)容器創(chuàng)建一個(gè)目錄,為其目錄中的每個(gè)容器創(chuàng)建一個(gè)docker-compose.yml文件。
到目前為止,我們一直docker-compose up在自己運(yùn)行并用CTRL-C它來關(guān)閉它。這允許調(diào)試消息顯示在終端窗口中。這并不理想,但在生產(chǎn)環(huán)境中運(yùn)行時(shí),您會希望docker-compose更像一項(xiàng)服務(wù)。一個(gè)簡單的方法就是-d在你up的會話中添加選項(xiàng):
- docker-compose up -d
docker-compose?現(xiàn)在將分叉到后臺。
要顯示您的Docker容器組(已停止并且當(dāng)前正在運(yùn)行),請使用以下命令:
- docker-compose ps
例如,以下顯示helloworld_my-test_1容器已停止:
Output of `docker-compose ps`Name Command State Ports ----------------------------------------------- helloworld_my-test_1 /hello?Exit?0
正在運(yùn)行的容器將顯示Up狀態(tài):
Output of `docker-compose ps`Name Command State Ports --------------------------------------------------------------- nginx_nginx_1 nginx -g daemon off;?Up?443/tcp, 80/tcp
要停止應(yīng)用程序組的所有正在運(yùn)行的Docker容器,請?jiān)谂cdocker-compose.yml用于啟動(dòng)Docker組的文件相同的目錄中發(fā)出以下命令:
- docker-compose stop
注意:?docker-compose kill如果您需要更強(qiáng)有力地關(guān)閉它,也可用。
在某些情況下,Docker容器會將其舊信息存儲在內(nèi)部卷中。如果您想從頭開始,可以使用該rm命令來完全刪除組成您的容器組的所有容器:
- docker-compose rm
如果您嘗試從包含Docker容器和.yml文件的目錄以外的目錄執(zhí)行這些命令中的任何一個(gè),它將會發(fā)出抱怨并且不會顯示您的容器:
Output from wrong directoryCan't find a suitable configuration file in this directory or any parent. Are you in the right directory? Supported filenames: docker-compose.yml, docker-compose.yaml, fig.yml, fig.yaml
?
第5步 - 訪問Docker容器文件系統(tǒng)(可選)
如果您需要在容器內(nèi)的命令提示符下工作,則可以使用該?docker exec命令。
在世界,你好!示例在運(yùn)行后退出,因此我們需要啟動(dòng)一個(gè)將繼續(xù)運(yùn)行的容器,以便我們可以使用docker exec該容器訪問容器的文件系統(tǒng)。我們來看看Docker Hub?的Nginx鏡像。
為它創(chuàng)建一個(gè)新目錄并更改為它:
- mkdir ~/nginx && cd $_
docker-compose.yml在我們的新目錄中創(chuàng)建一個(gè)文件:
- nano docker-compose.yml
并粘貼在以下內(nèi)容中:
保存該文件并退出。我們只需要使用以下命令作為后臺進(jìn)程啟動(dòng)Nginx容器:
- docker-compose up -d
Nginx的圖像將被下載,然后容器將在后臺啟動(dòng)。
現(xiàn)在我們需要CONTAINER ID容器。所有正在運(yùn)行的容器的列表:
- docker ps
您將看到類似于以下內(nèi)容的內(nèi)容:
Output of `docker ps`CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e90e12f70418 nginx "nginx -g 'daemon off" 6 minutes ago Up 5 minutes 80/tcp, 443/tcp nginx_nginx_1
注意:只有正在運(yùn)行的容器與該docker ps命令一起列出。
如果我們想對這個(gè)容器中的文件系統(tǒng)進(jìn)行更改,我們將使用它的ID(在本例中e90e12f70418)并用docker exec它在容器中啟動(dòng)一個(gè)shell:
- docker exec -it?e90e12f70418?/bin/bash
該-t選項(xiàng)打開一個(gè)終端,該-i選項(xiàng)使其交互。這些/bin/bash選項(xiàng)為正在運(yùn)行的容器打開一個(gè)bash shell。一定要使用您的容器的ID。
您會看到類似于以下內(nèi)容的容器的bash提示符:
root@e90e12f70418:/#從這里,你可以從命令提示符下工作。但請記住,除非您位于保存為數(shù)據(jù)卷一部分的目錄中,否則只要容器重新啟動(dòng),您的更改就會消失。另一個(gè)需要注意的是,大多數(shù)Docker鏡像都是使用非常少量的Linux安裝創(chuàng)建的,因此您習(xí)慣使用的某些命令行工具和工具可能不存在。
?
結(jié)論
太棒了,這樣就涵蓋了Docker Compose的基本概念以及如何讓它安裝并運(yùn)行。退房的部署Wordpress和PHPMyAdmin的與碼頭工人撰寫在Ubuntu 14.04教程如何部署與碼頭工人撰寫的應(yīng)用程序更復(fù)雜的例子。它是為Ubuntu 14.04編寫的,但是這些步驟可以很容易地適用于CentOS 7。
有關(guān)該docker-compose.yml文件的完整配置選項(xiàng)列表,請參閱撰寫文件參考。
?
轉(zhuǎn)自:https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-centos-7#top
?
總結(jié)
以上是生活随笔為你收集整理的如何在 CentOS 7上安装和使用 Docker Compose的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Aspose.Word 的常见使用(不用
- 下一篇: ffmpeg_intra_pred_mo