你不得不了解的應用容器引擎---Docker


最近突然想搭一個redis集群玩玩,因為公司的電腦同時開2個虛擬機就卡的不行,所以我就想到用Docker開啟多個redis-server來搭建。然后在網上找着找着發現,使用Docker,哪需要搭建啊,直接Docker pull一個鏡像就OK了。加上之前使用Docker,五分鍾搭建一個類似github的Gogs項目平台和Rancher雲,不得不感嘆,Docker給用戶帶來了太多的方便。

1、寫在最前面

要是在幾年前,你說你不了解Docker,那還情有可原。現如今再不了解甚至不知道Docker,那我只能說,兄弟,過分了啊?

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。

說的通俗易懂點,本人是一個php開發者,比如剛買了一個Linux服務器,需要部署項目到服務器上,以前我們是這么干的:安裝php-安裝mysql-安裝Nginx/Apache,然后再部署項目。這中間的過程老司機都懂有多痛苦。

那么有了Docker后,我們可以這么干:

  • DockerHub上找一個你喜歡的鏡像,可以是php-nginx/Apache-mysql的,也可以是php-nginx,然后把mysql單獨出來的,我使用的就是后一種。也推薦大家使用這種,這樣這個mysql容器就可以被多次使用。
  • 運行Docker pull imagesName,下載你的鏡像。
  • 使用Docker run 運行你的容器吧。

好了,到這里就結束了,你可以部署你的項目了。(這里先說個流程,具體的操作命令后面會說。)

 

2、我眼中的Docker

Docker提倡”Build once,Run anywhere“。當然,它也做到了。想了解Docker,就必須知道他的三個特性:

  • 鏡像

    Docker鏡像是面向Docker引擎的一個只讀模板,它也是創建容器的必需品。

  • 容器

    每一個容器的創建都必須依賴於一個鏡像,但一個鏡像可以被用來創建多個容器。你可以想虛擬機一樣去操作它-開始,停止,重啟,刪除。。

  • 倉庫

    其實也就是鏡像的倉庫,目前鏡像基本都放在DockerHub上,其上存放了大量的鏡像供用戶下載。

3、安裝Docker

https://docs.docker.com/engine/installation/ 官方安裝文檔。雖然是英文的,但還是很全的,不要怕看不懂,實在看不懂的時候咱就右鍵->翻成中文(簡體)

4、Docker基本命令

下面給大家介紹一些Docker常見的基本命令。

docker images : 查看本地鏡像   -a 列出本地所有的鏡像(含中間映像層,默認情況下,過濾掉中間映像層)

docker pull 鏡像名 :從倉庫拉取鏡像到本地

docker run :運行容器(說下這條命令的一些常用參數)

  --name 為容器指定一個名稱

  -p 端口映射,即宿主機的端口映射容器端口,可以指定多個

  -v 數據掛載,即將容器內的數據掛載到宿主機上,可自動同步

  -d 后台運行容器

  --link 可用來連接兩個容器

  -m 設置容器使用內存最大值

docker ps :列出本地容器 -a 列出所有本地容器

docker exec -it 容器ID /bin/bash :以終端交互模式進入容器

docker login -u 用戶名 -p 密碼:用戶名和密碼都是dockerhub平台的

docker push 鏡像名:tags :上傳本地鏡像到鏡像倉庫

docker commit 容器ID 鏡像名:tags:從容器創建一個新的鏡像

  這個鏡像名的命名格式應該為:dockerhub的用戶名/鏡像名 。否則你生成的鏡像無法上傳的自己的dockerhub鏡像庫。

  -a  提交的鏡像作者

    -m 提交時的說明文字;

 

5、容器間的通信

  • 使用--link參數連接

    假設機器上已經通過docker pull下載了mysql鏡像和php-nginx鏡像。

    1、啟動mysql容器,並命名為myDB

      docker run --name myDB -e MYSQL_ROOT_PASSWORD=111111 -d mysql

    2、啟動php-nginx容器

      docker run --name php-nginx --link myDB:mysql -p 8002:80 -d webdevops/php-nginx

      --link myDB:mysql 就是告訴要創建的容器,要使用myDB這個容器,並且起了一個別名叫mysql。這樣在新創建的容器里就可以使用“mysql”來連接myDb這個容器。

    但這種通信方式有一個局限性,就是只有運行在同一台服務器上的容器間可以通信,想要跨服務器通信,就看下面的另一種連接方式。

  • 通過宿主機端口連接

    這種方式更簡單更容易理解。在創建mysql容器的時候與宿主機建立端口映射:docker run --name myDB -p 3306:3306 -e MYSQL_ROOT_PASSWORD=111111 -d mysql.

    這樣,假如你的宿主機IP是127.0.0.1.那么你就可以在任何地方用127.0.0.1:3306來連接mysql容器。推薦使用這種方式,因為方便我們使用Navicat等數據庫圖形工具來連接。

 

6、數據掛載

如果有一天你的mysql容器不小心被刪除了,那么里面的數據隨之也會不見,這是相當相當相當可怕的事情。所以這里我們就要用到數據掛載了。

docker run --name myDB -p 3306:3306 -e MYSQL_ROOT_PASSWORD=111111 -v /data/mysql:/var/lib/mysql -d mysql。

這樣,mysql中的數據就會自動同步到你宿主機的/data/mysql目錄中,若該目錄不存在,則會自動創建。這里的mysql數據備份就要你們自己來了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM