前言
Docker誕生於2013年,是一門基於Go語言開發的LXC的進階容器引擎。目前代碼開源在Github上,並吸引了大部分開發人員的關注。不管是想真正的使用Docker帶來的便利中還是只是為了好玩,我覺得你都應該一試。個人而言,Docker的命令是比較簡單好理解的,但是Docker中也有很多的概念是比較抽象晦澀,然而這不影響我們作為一個PHP開發人員來使用Docker。
本文著重介紹如何優雅的使用Docker來構建開發環境甚至是線上環境(當然這個還不是你能夠拿去大規模部署的)。
這個系列文章我會帶大家認識Docker基本命令,Dockerfile,Mac下Docker搭建,Docker應用編排,叢集構建初認識,Docker官方三件客和基於swarm的shipyard。
Docker基本認識
如果你對Docker的基礎命令比較熟悉了,可以跳過。
下面我將列舉我平常用的比較多的概念和命令。
Docker鏡像拉取命令
這個是為了拉取到你所需要的鏡像,由於Docker的官方鏡像國內訪問速度比較慢,所以我們可以使用daocloud.io的鏡像,所以你可以這麼寫:
docker pull daocloud.io/nginx:latest | | | 鏡像地址 鏡像名稱 鏡像版本
又很多初學者不知道怎麼加速pull過程,對學習造成很大的困擾,這裡大家注意下。但是呢,作為一名程式員你應該學會某種技能哦。(附送我的邀請傳送門: VPN傳送門)
建立一個容器
docker run -it --name=bruceit ubuntu bash
這是非常基本的命令,你可以通過這條命令來跑起來一個容器。
按下 Ctrl+P然後按下 Ctrl+Q來退出終端,如果你直接 Ctrl+C或者 exit的話容器將直接停止,這也是初學者容易迷糊的地方。
關於更多參數,你可以通過 docker run -help擷取。
進入一個容器
就像你建立了一台虛擬機器,你總得進去虛擬機器的終端看看吧?
docker exec -it bruceit bash
我個人比較喜歡使用這條命令來進入容器。
查看容器裡發生了什麼
有時候你會遇到,容器一啟動就掛掉或者結束掉了,你會感到莫名奇妙。這時候你可能需要這條命令來看看容器裡到底發生了什麼。
docker logs bruceit
當然啦,前提是有日誌可看,比如前面直接 docker run -it ubuntu bash這個命令就沒什麼日誌可以輸出的,不過呢,一般office的鏡像都會提供日誌的,這個以後部分中我們在慢慢聊吧。
我系統裡到底有什麼鏡像
你可以通過:
docker images
來查看你目前擁有的鏡像。
你可能會看到這種情況:
docker@default:~$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
phpdev latest 24c0b5733f83 9 days ago 362.4 MB
ad7bb024631b 9 days ago 362.4 MB
68f54c38c09e 10 days ago 362.4 MB
9e599b43d79f 10 days ago 362.4 MB
4939079b5793 10 days ago 362.4 MB
465cdd230d56 10 days ago 362.4 MB
9d2980267ca1 10 days ago 362.4 MB
eb511bbabec2 10 days ago 362.4 MB
ffc712eeedb7 10 days ago 362.4 MB
de9d3010cec2 10 days ago 362.4 MB
d3818ad8ee03 10 days ago 362.4 MB
5a50d7c9f721 10 days ago 362.4 MB
ef408ea46d34 10 days ago 362.4 MB
bb720b95f60a 10 days ago 362.4 MB
c74c70d12d6f 10 days ago 362.4 MB
51d95118f10a 10 days ago 362.4 MB
b4014edba8ac 10 days ago 362.4 MB
9238755c1095 10 days ago 362.4 MB
0d06777fd38a 10 days ago 362.4 MB
1adfb54367d4 10 days ago 362.4 MB
7e38d504c01a 10 days ago 362.4 MB
d87e483f5383 10 days ago 362.4 MB
ca2843dcd786 10 days ago 362.4 MB
2cc2c1303e42 10 days ago 362.4 MB
fd68eb9d6a6a 10 days ago 362.4 MB
576203266dcc 10 days ago 362.4 MB
87cd4603f056 10 days ago 362.4 MB
63164129801c 10 days ago 362.4 MB
8e3ac5e68657 10 days ago 362.4 MB
5b96089abd0d 10 days ago 362.4 MB
633abb5ec84e 10 days ago 362.4 MB
8c3eab64ed4b 11 days ago 362.4 MB
2a8273582788 11 days ago 362.4 MB
e81cad2d9842 11 days ago 362.4 MB
php 7.0.3-fpm 486955ae3d52 11 days ago 495 MB
a0c5da2a099c 11 days ago 328.2 MB
nginx latest ae8e1e9c54b3 11 days ago 134.6 MB
mysql latest 9ece564cf894 11 days ago 361.3 MB
elasticsearch latest 2b364154b257 3 weeks ago 346.2 MB
redis latest 678a090a2546 4 weeks ago 151.3 MB
rabbitmq latest 6c1bb940499a 4 weeks ago 305.1 MB
jenkins latest 285c9f0f9d3d 4 weeks ago 708.5 MB
dev/puppet latest 697209192a73 5 weeks ago 328.1 MB
dev/yun latest 697209192a73 5 weeks ago 328.1 MB
115.com/yun latest 697209192a73 5 weeks ago 328.1 MB
yun_yun latest 90b28d9d2d66 5 weeks ago 328.1 MB
mysql 5.5.47 699c0769b628 5 weeks ago 256.5 MB
17ab14acade7 5 weeks ago 256.5 MB
ghost latest e8bcee9b4ba0 6 weeks ago 351.3 MB
php 5.6.17-fpm 212d6ad44680 7 weeks ago 453.9 MB
php 5.6-apache e83c39465589 7 weeks ago 480.5 MB
bb3048065f78 8 weeks ago 259.6 MB
docker_web latest b8add95fc24f 8 weeks ago 259.6 MB
server_web latest b8add95fc24f 8 weeks ago 259.6 MB
src_web latest b8add95fc24f 8 weeks ago 259.6 MB
src_phpfpm latest d7eafe53b19f 8 weeks ago 453.9 MB
server_phpfpm latest d7eafe53b19f 8 weeks ago 453.9 MB
docker_phpfpm latest d7eafe53b19f 8 weeks ago 453.9 MB
ea0aca21950d 10 weeks ago 360.3 MB
php 5.6.16-fpm db493c8f4214 11 weeks ago 453.9 MB
swarm latest a9975e2cc0a3 11 weeks ago 17.15 MB
daocloud.io/ubuntu 14.04 89d5d8e8bafb 11 weeks ago 187.9 MB
ubuntu latest 89d5d8e8bafb 11 weeks ago 187.9 MB
centurylink/wordpress latest b7f30fcd815e 9 months ago 520.2 MB
你可能會說這些 <none>都是些什麼鬼,哈哈強迫症的同學要注意啦,有些 <none>你是刪除不了的,因為他可能是其他鏡像的依賴,你要知道,Docker鏡像是增量構建的。什麼意思?就是比如你在Ubuntu鏡像上構建vim,他只會記錄你vim的增加,對於Ubuntu相同的東西並不會多份儲存。
停止、開始、重啟你的容器
停止、開始或者重啟一個Docker容器的速度是非常快的,哈哈,其實就是重啟一個進程而已啦,並不是你想象中要重啟一台伺服器或者虛擬機器那麼久。
docker stop bruceitdocker start bruceitdocker restart bruceit
我相信你一看就懂。
自學能力很重要
本文只列舉了不到7條命令,然而Docker的命令可不止這幾條,這幾條只是我在日常中使用頻率比較多的。所以呢,你還是要到去看官方手冊啦,自學能力很重要哦!~
Dockerfile,一個非常重要的檔案
Dockerfile其實好比一張圖紙,你在Dockerfile描述一個鏡像或者容器長什麼樣,最後跑出來的就是什麼樣,是不是很厲害?下一節,我們來講講這個神奇的檔案吧。
未完待續