簡介:Docker是一個開源的引擎,能夠輕鬆的爲任何應用建立一個輕量級的、可移植的、自給自足的容器。開發者在筆記本上編譯測試經過的容器能夠批量地在生產環境中部署,包括VMs(虛擬機)、bare metal、OpenStack 集羣和其餘的基礎應用平臺。
web應用的自動化打包和發佈;nginx
自動化測試和持續集成、發佈;web
在服務型環境中部署和調整數據庫或其餘的後臺應用;docker
從頭編譯或者擴展示有的OpenShift或Cloud Foundry平臺來搭建本身的PaaS環境。數據庫
在Ubuntu中只須要運行一行命令便可實現Docker的安裝:ubuntu
sudo apt-get install docker.io
完成後輸入(顯示docker的信息):windows
sudo docker info
顯示以下(即成功):學習
Mac OS X : https://docs.docker.com/installation/mac/測試
Windows :https://docs.docker.com/installation/windows/spa
安裝好以後,咱們能夠開始一些簡單的入門級別的操做:code
先理解兩個概念:
鏡像(image):跟日常使用的虛擬機的鏡像文件一個意思,至關於一個模板 容器(container):container則是images運行時的的狀態(能夠理解乘,container引用image開啓一個docker的應用)
咱們能夠經過官方提供給咱們的鏡像來進行學習。好比咱們想在Docker中運行一個Ubuntu系統,很簡單,Docker中得pull命令是用來獲取鏡像的,執行下面的命令,就會從官方倉庫裏獲取Ubuntu 14.04版本的系統:
docker pull ubuntu:16.04
查看docker本地的image
docker images
顯示以下圖:
咱們把剛剛的鏡像運行起來,運行起來的鏡像就叫作容器了,容器是可讀寫的,這樣咱們就能夠在容器裏作不少有意思的事情了。run 命令就是將鏡像運行起來的,運行:
docker run -it ubuntu:14.04
會發現終端交互的用戶名改變了,說明進入了容器的內部了,以下圖:
如今在當前狀態全部的操做都是對應容器,不會影響自己的系統,咱們能夠嘗試在裏面安裝軟件(nginx):
sudo apt-get install -y nginx
查看nginx的版本信息:
nginx -v
顯示以下圖(表示安裝成功):
注意:若是不成功提示
Unable to locate package nginx
能夠嘗試先更新下源:
sudo apt-get update
最好咱們可嘗試退出容器,回到本機環境:
exit
好咱們已經學會了如何去獲取image和建立對應的container了,那麼我麼如今來講說,小夥伴在操做的過程當中可能會遇到的問題吧:
nginx -v
咱們能夠看到容器裏面有咱們剛安裝的nginx的信息,但是當咱們退出容器後:
exit
在重寫運行:
docker run -it ubuntu:14.04
而後再去查看nginx的版本信息
nginx -v
你會發下nginx 並不存在,也許你會以爲很神奇。。。明明安裝了nginx,如今卻發現他不見了。。。哈哈!若是你以爲神奇,那麼,就說明你還不理解上面的image和container 的概念!(咱們再來梳理下吧)
退出容器,回到原來的系統,輸入:
sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
結果如圖:
這個的意思與咱們在在終端輸入:
/bin/sh -c "while true; do echo hello world; sleep 1; done"
的做用並無差別,只是將對應的執行命令的對象轉換到容器中執行;
結果如圖:
這是一個忠實的 hello world 進程:一個腳本會一直輸出 "hello world"
爲何咱們看不到的一大堆的 "hello world" ? 而是docker返回的一個很長的字符串:
這個長的字符串叫作容器ID(container ID)。它對於每個容器來講都是惟一的,因此咱們可使用它。
注意:容器 ID 是有點長而且很是的笨拙,稍後咱們會看到一個短點的 ID,某些方面來講它是容器 ID 的簡化版。
首先,咱們要確保容器正在運行。咱們可使用 docker ps 命令來查看。docker ps 命令能夠查詢 docker 進程的全部容器。
這裏咱們看到了以進程模式運行的容器。docker ps 命令會返回一些有用的信息,這裏包括一個短的容器
咱們也能夠中止他:
sudo docker stop containerID
查看全部的容器
docker ps -a
結果如圖:
啓動剛剛容器,並進入容器
docker start containerID docker attach containerID
回到本地系統打包:
使用 commit 命令用來將容器轉化爲鏡像,運行下面的命令,咱們能夠講剛剛的容器轉換爲鏡像:
sudo docker commit -m "Added nginx from ubuntu16.04" -a "xiaozhen" containerID xiaozhen/ubuntu-nginx:v1
其中,-m 參數用來來指定提交的說明信息;-a能夠指定用戶信息的;containerID 表明的時容器的id;xiaozhen/ubuntu-nginx:v1指定目標鏡像的用戶名、倉庫名和 tag 信息。建立成功後會返回這個鏡像的 ID 信息。注意的是,你必定要將 xiaozhen 改成你本身的用戶名。由於下文還會用到此用戶名。
辛苦了這麼久,終於有了本身的鏡像了,趕忙裝上去爽一爽吧!
sudo docker run -it xiaozhen/ubuntu-nginx:v1
趕忙看看nginx在不在!
nginx -v
結果如圖:
咱們剛剛已經建立了本身的第一個鏡像,儘管它很簡單,但這已經很是棒了,如今,咱們但願它可以被更多的人使用到,此時,咱們就須要將這個鏡像上傳到鏡像倉庫,Docker的官方Docker Hub應該是目前最大的Docker鏡像中心,因此,咱們就將咱們的鏡像上傳到Docker Hub。(請先自行註冊)
咱們登錄Docker Hub吧:
sudo docker login
輸入對應的Username,Password,Email 後,提示Login Success 表示登錄成功
上傳本身的鏡像
docker push mexiaozhen/ubuntu-nginx:v1
等待上傳完畢便可。。。。