Docker基礎之七: 鏡像操作
構建鏡像
(對Docker感興趣的朋友可以加我的微信ghostcloud2016,然後我把你加到我們的一個Docker愛好者群組裏麵。)
鏡像(Image)是容器的基礎。當你運行docker run的時候,你會指定一個Image來運行。比如,最基本的ubuntu鏡像和training/webapp鏡像。 在上一節中,我們是從Docker Hub下載的ubuntu鏡像。在本節中,我們將做如下操作:
- 管理和運行你的本地鏡像
- 創建基礎鏡像
1 查看本機的鏡像
root@gctest:~/.ghostcloud/proxy/conf# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ghostcloud.cn:5005/gcali 1.0.7 553ff90cea5d 40 hours ago 219.6 MB
ghostcloud.cn:5005/gcali 1.0.6 0704f2860bd6 41 hours ago 219.6 MB
ghostcloud.cn:5005/gcali 1.0.3 746ac51185f2 42 hours ago 219.6 MB
ghostcloud.cn:5005/gcali 1.0.2 b06108e12275 43 hours ago 219.6 MB
ubuntu latest e9ae3c220b23 3 weeks ago 187.9 MB
上麵你可以看到你本機的docker鏡像,其中ubuntu是一個基礎鏡像,來自於docker hub,而ghostcloud.cn:5005/gcali是來自於ghostcloud.cn的第三方鏡像。我們可以看到有幾個鏡像都是ghostcloud.cn:5005/gcali,但他們擁有不同的TAG,類似於版本。接下來,我們可以通過docker run來運行鏡像。
root@gctest:~/.ghostcloud/proxy/conf# docker run -i -t ubuntu:latest /bin/bash
root@46ffa55f5680:/#
2 獲取新的image
我們如何來獲取新鏡像呢?其實之前我們的docker run包含了鏡像的拉取,我們可以通過docker pull拉取鏡像,並且不啟動鏡像。
$ docker pull centos
Pulling repository centos
b7de3133ff98: Pulling dependent layers
5cc9e91966f7: Pulling fs layer
511136ea3c5a: Download complete
ef52fb1fe610: Download complete
. . .
Status: Downloaded newer image for centos
之後,我們可以運行這個鏡像:
$ docker run -t -i centos /bin/bash
bash-4.1#
3 查找Image
我們可以通過docker search命令來搜索鏡像,假入我們要搜索mysql:
root@46ffa55f5680:/# exitroot@gctest:~/.ghostcloud/proxy/conf# docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating s... 2778 [OK]
ubuntu-upstart Upstart is an event-based replacement for ... 48 [OK]
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC on po... 28 [OK]
sequenceiq/hadoop-ubuntu An easy way to try Hadoop on Ubuntu 25 [OK]
torusware/speedus-ubuntu Always updated official Ubuntu docker imag... 25 [OK]
ubuntu-debootstrap debootstrap --variant=minbase --components... 20 [OK]
tleyden5iwx/ubuntu-cuda Ubuntu 14.04 with CUDA drivers pre-installed 18 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 15 [OK]
consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC sessi... 7 [OK]
n3ziniuka5/ubuntu-oracle-jdk Ubuntu with Oracle JDK. Check tags for ver... 5 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images... 4 [OK]
ioft/armhf-ubuntu [ABR] Ubuntu Docker images for the ARMv7(a... 4 [OK]
nimmis/ubuntu This is a docker images different LTS vers... 3 [OK]
maxexcloo/ubuntu Docker base image built on Ubuntu with Sup... 2 [OK]
densuke/ubuntu-jp-remix Ubuntu Linuxの日本語remix風味です 1 [OK]
seetheprogress/ubuntu Ubuntu image provided by seetheprogress us... 1 [OK]
sylvainlasnier/ubuntu Ubuntu 15.04 root docker images with commo... 1 [OK]
tvaughan/ubuntu https://github.com/tvaughan/docker-ubuntu 0 [OK]
rallias/ubuntu Ubuntu with the needful 0 [OK]
zoni/ubuntu 0 [OK]
partlab/ubuntu Simple Ubuntu docker images. 0 [OK]
vicamo/ubuntu-phablet-jiexi Dockerfile for developing Ubuntu JieXi PDK. 0 [OK]
densuke/ubuntu-supervisor densuke/ubuntu-jp-remix:trusty 上で supe... 0 [OK]
teamrock/ubuntu TeamRock's Ubuntu image configured with AW... 0 [OK]
esycat/ubuntu Ubuntu LTS 0 [OK]
4 更新自己的Image
容器實際會在Image上增加一個讀寫文件層,我們可以將已經運行的容器通過docker comit生成新的鏡像:
root@gctest:~/.ghostcloud/proxy/conf# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d961ac3b9fe ghostcloud.cn:5005/gcali:1.0.7 "/usr/local/ghostclou" 36 hours ago Up 36 hours gcsagent
root@gctest:~/.ghostcloud/proxy/conf# docker commit 2d96 ghostcloud:test
df9744f284bd8fd778ae7e782f2348ba24e4d9a51877c5e48b2f552fdadb526c
root@gctest:~/.ghostcloud/proxy/conf# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ghostcloud test df9744f284bd 4 seconds ago 219.6 MB
ghostcloud.cn:5005/gcali 1.0.7 553ff90cea5d 40 hours ago 219.6 MB
ghostcloud.cn:5005/gcali 1.0.6 0704f2860bd6 41 hours ago 219.6 MB
ghostcloud.cn:5005/gcali 1.0.3 746ac51185f2 43 hours ago 219.6 MB
ghostcloud.cn:5005/gcali 1.0.2 b06108e12275 43 hours ago 219.6 MB
ubuntu latest e9ae3c220b23 3 weeks ago 187.9 MB
執行命令之後,我們就有了新的鏡像。因此,可以通過commit來對容器做快照,是不是很酷?
5 根據Dockerfile編譯鏡像
通過docker commit可以從一個已有的容器得到鏡像,那麼如何從頭生成一個鏡像呢?我們可以通過docker build來進行。首先我們創建一個Dockerfile
root@gctest:~/ghostcloud# cat Dockerfile
# This is a comment
FROM ubuntu:latest
MAINTAINER Shev Yan <yandong@ghostcloud.cn>
CMD echo 'hello my image from Dockerfile.'
接著,我們進入Dockerfile所在的目錄,並執行build:
root@gctest:~/ghostcloud# docker build -t myimage .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu:latest
---> e9ae3c220b23
Step 2 : MAINTAINER Shev Yan <yandong@ghostcloud.cn>
---> Running in 9c78817e17f1
---> dab9385c6296
Removing intermediate container 9c78817e17f1
Step 3 : CMD echo 'hello my image from Dockerfile.'
---> Running in d8963fe120aa
---> cfcfc50fb4fb
Removing intermediate container d8963fe120aa
Successfully built cfcfc50fb4fb
FROM: 表示源自於哪個基礎鏡像 MAINTAINER: 表示由誰維護 CMD: 表示鏡像默認執行的命令
讓我們來查看一下新生成的Image:
root@gctest:~/ghostcloud# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
myimage latest cfcfc50fb4fb About a minute ago 187.9 MB
ghostcloud test df9744f284bd 5 minutes ago 219.6 MB
ghostcloud.cn:5005/gcali 1.0.7 553ff90cea5d 40 hours ago 219.6 MB
ghostcloud.cn:5005/gcali 1.0.6 0704f2860bd6 42 hours ago 219.6 MB
ghostcloud.cn:5005/gcali 1.0.3 746ac51185f2 43 hours ago 219.6 MB
ghostcloud.cn:5005/gcali 1.0.2 b06108e12275 43 hours ago 219.6 MB
ubuntu latest e9ae3c220b23 3 weeks ago 187.9 MB
運行新生成的鏡像:
root@gctest:~/ghostcloud# docker run myimage
hello my image from Dockerfile.
給Image設置tag:
root@gctest:~/ghostcloud# docker tag cfcf myimage:v1
root@gctest:~/ghostcloud# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
myimage latest cfcfc50fb4fb 8 minutes ago 187.9 MB
myimage v1 cfcfc50fb4fb 8 minutes ago 187.9 MB
ghostcloud test df9744f284bd 11 minutes ago 219.6 MB
ghostcloud.cn:5005/gcali 1.0.7 553ff90cea5d 41 hours ago 219.6 MB
ghostcloud.cn:5005/gcali 1.0.6 0704f2860bd6 42 hours ago 219.6 MB
ghostcloud.cn:5005/gcali 1.0.3 746ac51185f2 43 hours ago 219.6 MB
ghostcloud.cn:5005/gcali 1.0.2 b06108e12275 43 hours ago 219.6 MB
ubuntu latest e9ae3c220b23 3 weeks ago 187.9 MB
6 刪除Image
root@gctest:~/ghostcloud# docker rmi myimage:v1
Untagged: myimage:v1
最後更新:2017-04-01 13:38:50