閱讀456 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go PostgreSQL 聚合函數講解 - 5 線性回歸
  下一篇:go 雲時代的分布式數據庫:阿裏分布式數據庫服務DRDS