一. 什么是Docker
Docker是在linux服務器上運行的輕量級容器引擎。相較于傳統的虛擬機,docker最大的特點就是容器本身耗費的額外資源極少。
二. 什么場景適合使用Docker
- 快速安裝中間件
作為工程師,開發部署的時候經常需要安裝一些中間件,如redis、nginx、jenkins等。傳統方式下安裝這些中間件往往還需要安裝一些其他的依賴程序,有時候依賴程序的版本還容易出沖突,總之是個很繁瑣的事情。
不過,現在各大中間件廠商,基本都會推出docker版的鏡像。使用docker啟動這些容器就非常簡單粗暴無腦。 - 解決測試環境和線上環境不一致的問題
很多工程師的老司機應該都有這樣的體驗,一個項目測試環境經過了縝密的測試基本應該沒多少bug了,但一上線就各自奇葩問題層不出窮。雖然很多公司都要求測試環境要和正式環境一致,但實際情況很難做到完全一致,這些不一致的地方就會導致上述的事情。
使用docker就可以很好的解決這個問題,工程師使用docker發布工程,發布的是一整套環境,而不僅僅是一套代碼。
三. docker的安裝。
docker是在linux服務器上運行的容器引擎,雖然windows機器上也可以通過安裝linux虛擬器來安裝使用,但性能和穩定性就不好講了。正式環境使用docker建議只考慮linux機器。
這里將以阿里云centos7.3 64位操作系統,來演示如何安裝。
- 更新yum安裝的docker版本。
yum -y update docker
- yum安裝docker。輸入命令,耐心等待安裝完成。
yum -y install docker
- 啟動docker。
service docker start
非常簡單,docker就安裝完成并啟動了。
四. 設置docker加速器。
剛才雖然成功安裝并啟動了docker,但是你會發現下載鏡像的速度奇慢無比。因為docker默認從dockerhub網站去下載鏡像,國內連接國外的網站下載,速度你懂的。好在docker也想到了這一點,提供了鏡像加速的功能。
-
要使用鏡像加速,首先你得有一個加速器地址。這里推薦使用阿里云的docker鏡像倉庫加速地址。進入阿里云的鏡像倉庫。在Docker Hub鏡像站點獲取你的專屬加速器地址。
加速地址 在服務器上輸入以下命令,設置你的docker加速器并重啟docker。注意把
https://xxxxxxx.aliyuncs.com
替換成你的專屬加速器地址。
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxxx.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
至此,docker加速器設置完成。
五. 登錄Docker Hub。
Docker Hub是docker鏡像的國際通用倉庫,相當于開源代碼和github的關系。你可以在Docker Hub上下載到全球各大廠商提供的自己產品的官方docker鏡像,還可以下載到其他工程師上傳的鏡像。你自己也可以上傳鏡像到Docker Hub進行保存和分享。
要在服務器登錄Docker Hub,先得在Docker Hub的網站申請賬號。這里就不啰嗦了,看官請自行申請。
-
在服務器輸入命令
docker login
開始登錄,并根據提示輸入用戶名密碼。
登錄Docker Hub
六. 下載鏡像。
打一個比方來稍微科普下,鏡像和容器的關系就相當于java語言里,類和對象的關系。
下面通過一個簡單的java鏡像的例子來講解。
- 首先,我們需要先獲取官方的java鏡像。你可以在Docker Hub的網站進行搜索。
如上圖,選擇第一個java,official
表示這是一個官方的鏡像。點擊進入詳細頁面。
在詳細頁面的右上角,可以找到下載該鏡像的命令。
- 現在找到了下載鏡像的命令,讓我們回到linux服務器,輸入該命令。
docker pull java
耐心等待鏡像下載完成。此處你應該會發現,配置了加速器以后,下載鏡像的速度簡直飛快。
輸入docker images
命令來查看該服務器里所有鏡像。此處可以看見剛才下載的java鏡像。
七. 啟動容器。
現在鏡像已經下載完成,該通過鏡像來啟動容器了。
容器啟動主要通過docker run + 可選參數 + 容器編號/容器名 + 啟動命令
??蛇x的參數很多,本文就不一一贅述了,感興趣的朋友可自行查閱Docker官方文檔。這里提幾個最常用的來完成本示例的講解。
-
-d
后臺啟動容器,默認情況下啟動容器是非后臺啟動,啟動以后會自動進入容器內部,而且一旦退出容器,容器也會自動關閉。加上該命令后,使用后臺啟動的方式啟動容器,啟動以后不會自動進入容器內部,只會返回容器編號。容器在后臺自動運行。 -
-p port:port
將指定容器的端口號映射為機器的端口號,前一個port為主機的端口號,后一個port為容器的端口號。 -
-v path:path
將主機的一個硬盤目錄或文件掛載到容器的指定位置。前一個path為主機的目錄路徑或文件,可以為絕對路徑,也可以是一個自定義名稱,如果是自定義名稱,你可以在/var/lib/docker/volumes
目錄下找到;后一個path為容器內的路徑,一般是絕對路徑。 -
--name
給容器起一個別名
介紹了啟動容器的基本命令,我們試著來直接啟動一個java容器。
docker run -d -it -p 8080:8080 -v /data/test.jar:/data/test.jar --name java docker.io/java java -jar /data/test.jar
八. 其他常用命令。
- 開啟docker服務
service docker start
- 查看所有已啟動容器
docker ps -a
- 刪除一個容器
docker rm 容器ID/容器別名
- 刪除一個鏡像
docker rmi 鏡像ID
- 關閉一個已啟動容器
docker stop 容器ID/容器別名
- 啟動一個關閉的容器
docker start 容器ID/容器別名
- 查看一個容器的詳情
docker inspect 容器ID/容器別名
- 進入容器內部
docker exec -it 容器ID/容器別名 /bin/bash