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