docker是最近比較流行的容器工具,它可以幫助我們快速部署應用,尤其是在“微服務”環境下,成百個服務要去啟動,停止,部署一次太麻煩,而如果把它部署到docker里,下一次應用就方便多了,如果需要幾行代碼就搞定了!
百度百科定義
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。
鏡像和容器
鏡像:就是我們windows里的ISO文件,就是一個打包好的東西,也類似于GHOST這種工具包
容器:將鏡像啟動后,它會生產一個容器,我們可以在容器里添加新的組件,然后生產新的鏡像!
應用場景
環境管理復雜
從各種OS到各種中間件到各種app, 一款產品能夠成功作為開發者需要關心的東西太多,且難于管理,這個問題幾乎在所有現代IT相關行業都需要面對。
云計算時代的到來
AWS的成功, 引導開發者將應用轉移到 cloud 上, 解決了硬件管理的問題,然而中間件相關的問題依然存在 (所以openstack HEAT和 AWS cloudformation 都著力解決這個問題)。開發者思路變化提供了可能性。
虛擬化手段的變化
cloud 時代采用標配硬件來降低成本,采用虛擬化手段來滿足用戶按需使用的需求以及保證可用性和隔離性。然而無論是KVM還是Xen在 docker 看來,都在浪費資源,因為用戶需要的是高效運行環境而非OS, GuestOS既浪費資源又難于管理, 更加輕量級的LXC更加靈活和快速
LXC的移動性
LXC在 linux 2.6 的 kernel 里就已經存在了,但是其設計之初并非為云計算考慮的,缺少標準化的描述手段和容器的可遷移性,決定其構建出的環境難于遷移和標準化管理(相對于KVM之類image和snapshot的概念)。docker 就在這個問題上做出實質性的革新。這是docker最獨特的地方。
在centos上的部署
一 安裝并添加服務和自啟動項
[root@localhost ~]# yum install docker
[root@localhost ~]# systemctl start docker.service
[root@localhost ~]# systemctl enable docker.service
二 docker幾個常用的命令
docker ps
令查看容器
docker info
檢查Docker的安裝是否正確,如果沒有找到此命令,則表示Docker沒有正確安裝
docker pull busybox
拉取一個預建的鏡像
sample_job=$(docker run -d busybox /bin/sh -c "while true; do echo Docker; sleep 1; done")
以后臺進程的方式運行hello docker
sample_job命令會隔一秒打印一次Docker,使用Docker logs可以查看輸出。如果沒有起名字,那這個job會被分配一個id,以后使用命令例如Docker logs查看日志會變得比較麻煩。
docker help
所有Docker命令
docker logs $sample_job
運行Docker logs命令來查看job的當前狀態:
docker stop $sample_job
停止名為sample_job的容器
docker restart $sample_job
重新啟動該容器
docker stop $sample_job docker rm $sample_job
如果要完全移除容器,需要將該容器停止,然后才能移除
docker commit $sample_job job1
將容器的狀態保存為鏡像
docker images
令查看所有鏡像的列表
安裝.netCore的鏡像
從倉庫中拉取一個鏡像
#下載dotnet的鏡像
sudo docker pull microsoft/dotnet
查看一下這個鏡像
sudo docker images
這個過程可以是空的,因為上面的下載速度很慢,畢竟是大老美的服務器,呵呵!
通過鏡像,運行一個容器
docker run -it --name mycoreContainer 2cef2b382ef0
在這個容器中進行操作
root@2cef2b382ef0:~/hello#
退出當前的容器
root@2cef2b382ef0:/# exit
查看剛才建立的容器
docker ps -a
從容器創建一個新的鏡像
docker commit -a "lind.zhang" -m "netcore a image" 3b063cca6a8a netcore:v1
參數說明
-
-a :提交的鏡像作者;
-
-c :使用Dockerfile指令來創建鏡像;
-
-m :提交時的說明文字;
-
-p :在commit時,將容器暫停。
刪除所有未運行 Docker 容器
docker rm $(docker ps -a -q)
刪除所有未打 tag 的鏡像
docker rmi $(docker images -q | awk '/^<none>/ { print $3 }')
刪除所有鏡像
docker rmi $(docker images -q)
根據格式刪除所有鏡像
docker rm $(docker ps -qf status=exited)
下講我們將學習如何去部署一個netcore網站在docker里!
文章列表