最近突然想搭一個redis集群玩玩,因為公司的電腦同時開2個虛擬機就卡的不行,所以我就想到用Docker開啟多個redis-server來搭建。然後在網上找著找著發現,使用Docker,哪需要搭建啊,直接Docker pull一個鏡像就OK了。加上之前使用Docker,五分鐘搭建一個類似github ...
最近突然想搭一個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數據備份就要你們自己來了。