如何在 CentOS 7上安裝和使用 Docker Compose

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

?

介紹

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

將以下內容放入文件中,保存文件并退出文本編輯器:

  1. my-test:
  2. image: hello-world

第一行將用作容器名稱的一部分。第二行指定用于創建容器的圖像。該圖片將從官方Docker Hub存儲庫下載。

仍然在~/hello-world目錄中時,執行以下命令來創建容器:

  • docker-compose up

輸出應該從以下開始:

Output of 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正在做什么:

  1. Docker客戶端聯系了Docker守護進程。
  2. Docker守護進程從Docker Hub中提取“hello-world”圖像。
  3. Docker守護進程從該映像創建了一個新的容器,該容器運行可執行文件,生成您當前正在閱讀的輸出。
  4. 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容器已停止:

Output of `docker-compose ps`

Name Command State Ports ----------------------------------------------- helloworld_my-test_1 /hello?Exit?0

正在運行的容器將顯示Up狀態:

Output of `docker-compose ps`

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文件的目錄以外的目錄執行這些命令中的任何一個,它將會發出抱怨并且不會顯示您的容器:

Output from wrong directory

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

并粘貼在以下內容中:

  1. nginx:
  2. image: nginx

保存該文件并退出。我們只需要使用以下命令作為后臺進程啟動Nginx容器:

  • docker-compose up -d

Nginx的圖像將被下載,然后容器將在后臺啟動。

現在我們需要CONTAINER ID容器。所有正在運行的容器的列表:

  • docker ps

您將看到類似于以下內容的內容:

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

注意:只有正在運行的容器與該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

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449089.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449089.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449089.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WebSSH2安裝過程可實現WEB可視化管理SSH工具

目錄 Chrome web Secure Shell Extension gotty GateOne noVNCvncserver XtermjsSSH2nodejs nodejstty.js CheungSSH TriAquae https://github.com/Scirh/Python/tree/master/django https://www.smarthomebeginner.com/install-shellinabox-on-ubuntu/#64-bit https://gist.gi…

原碼反碼補碼位運算,

進制轉換: 十進制轉二進制: 求余法:用2對數據求余,然后再對商繼續求余,直到商為0結束,過程中產生的余數就是該數據的二進制(逆序)。 求權法:數據 - 2^(n-1) 如果可以減 第n位就是1,否…

一個人幸運的前提,是他有能力改變自己

很多時候,我們羨慕那些幸運的人,卻看不到他們為此做出的努力和改變。 其實,一個人的幸運并不是偶然的,美國成功哲學家金洛恩說過這么一句話:“成功不是追求得來的,而是被改變后的自己主動吸引來的。” …

劍指Offer-正則表達式匹配(Python)

1 題干內容 請實現一個函數用來匹配包括.和*的正則表達式。模式中的字符.表示任意一個字符,而*表示它前面的字符可以出現任意次(包含0次)。 在本題中,匹配是指字符串的所有字符匹配整個模式。 例如,字符串aaa與模式a.a…

Docker 制作鏡像的方式

其它制作鏡像的方式 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 除了標準的使用 Dockerfile 生成鏡像的方法外,由于各種特殊需求和歷史原因,還提供了一些其它…

【算法】快排

快速排序 其利用的思想就是分治思想,最開始先從數組中隨機選擇一個元素p(為什么隨機下面解釋),然后以這個元素對數組中的元素進行分類,數組左側都是小于p的元素, 右側都是大于等于p的元素。這樣就讓數組分成…

【C基礎】堆內存創建/釋放和內存清理函數/內存泄漏

本期涉及到了較多的指針,沒有徹底領悟的同學請翻閱之前的博文~ 一閃一閃亮晶晶,滿天都是小星星*** 什么是堆內存: 是進程的一個內存段(text、data、bss、heap、stack)之一,由程序員手動管理, 特點就是足夠大&#x…

19_05_01校內訓練[polygon]

題意 把一個邊長為1的正n邊形放到一個正m邊形中,要求m邊形完全覆蓋n邊形,可以有交點,并且中心重合。求正m邊形的最小邊長,至少精確到6位。要求logn計算。 思考 先考慮m|n的情況。 我們知道,正m邊形的邊長與可行區域&am…

六度人脈 全球最高效的人脈法則(圖)

六度人脈這一概念,在20世紀60年代由美國心理學家Stanley Milgram提出并驗證。 所謂六度人脈,即地球上所有的人都可以通過六層以內的熟人關系鏈和其他人聯系起來。 通俗地說:“最多通過六個人你就可以認識地球上任何一個陌生人。” SNS(社會…

[轉]numpy中的np.max 與 np.maximum區別

轉自:https://blog.csdn.net/lanchunhui/article/details/52700895 轉載于:https://www.cnblogs.com/xianhan/p/10609319.html

JVM 的 Finalization Delay 引起的 OOM(java.lang.OutOfMemoryError:null at sun.misc.Unsafe.allocateMemory.)

今天在壓力測試環境某一個服務出現crash了,經過一番檢查,終于發現是由于JVM的Finalization Delay引起的,這個問題比較特殊,這里記錄一下。 這個服務是用Java寫的,主要完成的功能是根據特定的指令文件生成mp4文件&#…

win10 php7+apache2.4的配置以及遇到的問題及解決

首先進入PHP官網下載php7的版本,我下的是PHP7.1.28,在PHP的下載頁面注意劃紅線和綠線的地方(我畫的) 1.畫了紅線的意思是請使用由apache lounge提供的編譯文件,也就是點進藍色Apache lounge這里下載. 2.畫了綠色的線的意思是用Apache的話你必須使用Thread Safe(線程安全)的PHP…

緩存區的輸入輸出,字符串常用操作,實現strlen/strcpy/strcat/strcmp函數)

輸出緩沖區: 程序輸入的數據并不能立即顯示在屏幕上,而是先存儲在輸出緩沖區中,滿足一些條件后才顯示出來。 1、遇到\n后 2、遇到輸入語句 3、當輸出緩沖區滿4K 4、當程序結束 5、手動刷新 fflush(stdout) 緩沖區機制可以提高數據的讀寫速度…

理性分散投資 收益袋袋平安

理財錦囊 想要投資理財,不光可以選擇股票和債券這類入門產品, 實際上,還可選擇其他低風險及高回報的投資產品,例如外匯、期貨和商品。 針對此,幾位分析師預測了2014年各國經濟走勢的重點,協助散戶們分配…

AI一周熱聞:華為豪擲3.3億劍橋買地,自建光芯片工廠;比特大陸IPO失敗,組織架構調整...

導讀 華為豪擲3.3億劍橋買地,自建光芯片工廠蘋果春季發布會無硬件發布,轉型之心迫切比特大陸IPO失敗,組織架構調整,王海超任CEO特斯拉起訴小鵬汽車員工竊取商業機密英偉達發布GauGAN,線條色塊秒變逼真圖像用機器學習防…

Docker 環境:Nexus3.x 的私有倉庫

Nexus3.x 的私有倉庫 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 使用 Docker 官方的 Registry 創建的倉庫面臨一些維護問題。比如某些鏡像刪除以后空間默認是不會回收的&#xff…

虛擬環境vitualenv的使用

Python3開發之虛擬環境virtualenv與virtualenvwrapper 在使用 Python 開發的過程中,工程一多,難免會碰到不同的工程依賴不同版本的庫的問題; 亦或者是在開發過程中不想讓物理環境里充斥各種各樣的庫,引發未來的依賴災難。 此時&am…

find_first_of和find函數的區別

小記: find_first_of函數最容易出錯的地方是和find函數搞混。它最大的區別就是如果在一個字符串str1中查找另一個字符串str2,如果str1中含有str2中的任何字符,則就會查找成功,而find則不同;

銀行各類理財收益漸漲 各類寶錢景尚不明朗

這個春天,投資似乎進入了一個好事多磨的階段。央行一反先前支持的態度,開始對互聯網理財念起了“緊箍咒”。一時間,各種“寶”的命運變得撲朔迷離起來。盡管各種“寶”聲明:不受央行政策影響。而投資者內心的擔憂,恐怕…

Firefox 66回歸!修復多項臭蟲相關問題

上周最新版Firefox 66因為爆出會使微軟Office 365中的PowerPoint文字消失的臭蟲,Mozilla暫停發送。3月27日Mozilla重新釋出修補完成的最新版Firefox 66.0.2。根據Mozilla臭蟲報告網頁,Firefox 66除了造成Office 365中的PowerPoint文字消失的問題外&#…