上篇文章我們介紹了docker的歷史由來帶來的一些好處陨晶,從這篇文章開始浓利,我們開始正式的進(jìn)入Docker的世界型将,首先給大家介紹一下Docker一些基本概念。
Docker的基本概念
Docker的基本概念并不是很多顷啼,就是三個(gè):
- 鏡像(image)
- 容器(Container)
- 倉庫(Repository)
深入理解這三個(gè)概念踏枣,對于docker的理解會(huì)有很大的幫助。
什么是image呢钙蒙,簡單來說image就是一個(gè)鏡像茵瀑,一個(gè)系統(tǒng)的snapshot,可以類比于一個(gè)vm的image,或者如果你用過AWS躬厌,類似于一個(gè)AMI文件马昨。
什么是Container,Container是簡易版的Linux環(huán)境扛施,可以類比的與一個(gè)Virtual Machine 或者 一個(gè)EC2的instance鸿捧。
那個(gè)image和Container什么關(guān)系呢?一個(gè)docker Container 需要加載一個(gè)image然后執(zhí)行疙渣。image是run在Container里的匙奴。
什么是repository呢?repository是一個(gè)image倉庫妄荔,可以將打好的Docker image push這個(gè)倉庫中與他人分享泼菌。
相信上篇文章后大家已經(jīng)把docker安裝好了吧。下邊我們就來一步步的介紹這個(gè)三個(gè)概念啦租。
Docker Image
運(yùn)行docker pull
命令可以從倉庫中獲取鏡像哗伯。
docker pull ubuntu:16.04
當(dāng)運(yùn)行這條命令的時(shí)候,實(shí)際上是從docker hub 上來請求標(biāo)記為16.04 的Ubuntu image篷角,當(dāng)然由于眾所周知的原因焊刹,pull的速度會(huì)很慢。所以我們可以選擇從國內(nèi)的一些repository來pull images恳蹲。例如這樣:
docker pull daocloud.io/ubuntu:14.04
如何看到我們本地已經(jīng)pull下來的images呢虐块?使用docker images
可以列出本地已有的鏡像。
REPOSITORY TAG IMAGE ID CREATED SIZE
python 3.5-alpine 4f778158195b 5 days ago 87.58 MB
python 3.5.2-alpine 4f778158195b 5 days ago 87.58 MB
python 2.7-alpine 8b2171e895fd 3 weeks ago 71.97 MB
我們可以看到他是來自哪個(gè)倉庫的阱缓,image的標(biāo)價(jià)非凌,全局唯一的ID举农,創(chuàng)建的時(shí)間 和鏡像的大小荆针。同樣如果我們想查看哪個(gè)倉庫的images 可以這樣:
docker images ubuntu
images下載好了,我們怎么運(yùn)行這個(gè)image呢?easy
docker run -t -i ubuntu /bin/bash
root@fc8e5743f790:/#
這樣我們就使用這個(gè)image創(chuàng)建了一個(gè)Container 并運(yùn)行bash應(yīng)用航背。ps.上邊的 -t 讓docker分配一個(gè)偽終端并綁定到容器的標(biāo)準(zhǔn)輸入上喉悴,-i 讓容器的標(biāo)準(zhǔn)輸入保持打開。
下邊的一個(gè)問題是如何創(chuàng)建一個(gè)image呢玖媚,有兩種方法箕肃,一種是我們基于現(xiàn)有的image,例如這樣:
docker run -i -t ubuntu /bin/bash
root@c5c7fa33b061:/# apt-get update && apt-get install -y curl
...
我們創(chuàng)建了一個(gè)docker container 并在其中裝上curl今魔,這是注意我們得記下他的ID勺像。
docker commit c5c7fa33b061 ubuntu-have-curl
docker history ubuntu-have-curl
我們使用了docke commit 生成了一個(gè)new image ‘Ubuntu-have-curl’,并用docker history看看這個(gè)image的歷史错森。
下來我們用這個(gè)image來curl一下吟宦。
docker run ubuntu-have-curl curl https://www.baidu.com
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2443 100 2443 0 0 12234 0 --:--:-- --:--:-- --:--:-- 12215
easy? Yes.這樣我們就build一個(gè)帶curl的Ubuntu image,你可以把他push 到 docker hub上涩维,讓更多人使用了殃姓。
使用docker commit 可以對于一個(gè)鏡像做些簡單的擴(kuò)展,但不方便分享和他人的利用瓦阐。另外一種方式是使用dockerfile蜗侈,這是更加通用的方法,這里暫不詳解睡蟋,后邊會(huì)專門的介紹dockerfile踏幻。
我們看了pull,build戳杀,run一個(gè)image叫倍,下來看看如何刪除吧。命令很簡單 docker rmi
docker rmi ubuntu:14.04
當(dāng)我們使用了一段時(shí)間以后豺瘤,我們運(yùn)行docker images
會(huì)發(fā)現(xiàn)有很多沒有tag的images吆倦,大量占據(jù)著磁盤空間,那么勢必就要清理下了坐求。
運(yùn)行下邊這條命令蚕泽,我們就可以清理下了。
$ sudo docker rmi $(docker images -q -f "dangling=true")
今天就寫到這里桥嗤,下篇我們繼續(xù)介紹 Docker Container须妻。
原創(chuàng)文章,歡迎轉(zhuǎn)發(fā)泛领,但請標(biāo)明出處荒吏。歡迎關(guān)注圖表君的公眾號(hào),一起成長渊鞋。在微信中搜索 “多彩數(shù)據(jù)” 或者 “Data_Visualization”