Docker入門(1)-對鏡像的操做

  • Docker系列參考自書籍<Docker技術入門與實戰>,本博客以筆記爲主. 若是轉載請註明出處,謝謝各位大哥了.
  • 本章目錄:

       

       

  • 1.獲取鏡像
    • 鏡像是容器運行的前提.
    • 能夠利用docker的pull命令從網絡上下載鏡像,命令格式: docker pull NAME[:TAG]. 對於docker鏡像來講,若是不顯式的指定TAG,則默認會選擇latest標籤,就是下載鏡像庫中最新的版本.

         

    • 下面演示的是從Docker Hub的Ubuntu倉庫下載一個最新的Ubuntu操做系統的(不指定版本,默認爲latest)鏡像
      • [root@Ninemax-LPC3 ~]# sudo docker pull ubuntu
      • latest: Pulling from ubuntu
      • 02658b5e0e10: Pull complete
      • 5a70b1a02339: Pull complete
      • 0f89582aebaa: Pull complete
      • ffa5309fe008: Pull complete
      • 7510bd34aee9: Pull complete
      • dc8dd8718e57: Pull complete
      • Digest: sha256:8e6b67faf44a036a18b9a3987e826fe3accbd1742e219145a461a3210a9d8142
      • Status: Downloaded newer image for ubuntu:latest

           

    • 該命令實際上下載的就是ubuntu:latest鏡像,目前最新的ubuntu鏡像.
    • 至關於 sudo docker pull registry.hub.docker.con/ubuntu:latest 命令,便是從默認的註冊服務器registry.hub.docker.com中的ubuntu倉庫下載標記爲latest的鏡像!

         

    • 下載過程當中能夠看出,鏡像文件通常由若干層組成,行首的02658b5e0e10這樣的字符串表明了各層的ID.下載過程當中會獲取並輸出鏡像的各層信息.層(layer) 實際上是AUFS(Advanced Union File System,一種文件聯合系統)中的重要概念,是實現增量保存與更新的基礎.

         

    • 還能夠經過指定標籤來下載特定版本的一某一個鏡像,例如14.04標籤的鏡像
      • [root@Ninemax-LPC3 ~]# sudo docker pull ubuntu:14.04
      • 14.04: Pulling from ubuntu
      • facde2234f2e: Downloading [========================> ] 32.96 MB/67.11 MB
      • 80baa2a4c64f: Download complete
      • ce3d2a7e37b4: Download complete
      • 41b0d9d8b116: Download complete
      • 90e1c141b3af: Download complete
      • 7198809c062f: Download complete
      • facde2234f2e: Pull complete
      • 80baa2a4c64f: Pull complete
      • ce3d2a7e37b4: Pull complete
      • 41b0d9d8b116: Pull complete
      • 90e1c141b3af: Pull complete
      • 7198809c062f: Pull complete
      • Digest: sha256:dd34f9047bdc2f9688e4020f241147ded7ff7b776b1f052b2f2d90f9c852d269
      • Status: Downloaded newer image for ubuntu:14.04

           

    • 固然了,你也能夠從其餘註冊服務器的倉庫中下載!此時,須要在倉庫名稱前指定完整的倉庫註冊服務器地址,例如從DaoCloud社區下載一個鏡像.
      • [root@Ninemax-LPC3 ~]# docker pull daocloud.io/library/nginx:latest
      • latest: Pulling from daocloud.io/library/nginx
      • 7444805dc220: Downloading [========> ] 3.82 MB/22.42 MB
      • 7444805dc220: Downloading [================> ] 7.414 MB/22.42 MB
      • 7444805dc220: Downloading [==================> ] 8.088 MB/22.42 MB
      • 7444805dc220: Downloading [===================> ] 8.538 MB/22.42 MB
      • 7444805dc220: Pull complete
      • 2de46b59641d: Pull complete
      • 6f5118869c74: Pull complete
      • 476175996aa4: Pull complete
      • 275a07ec63cd: Pull complete
      • fda55200fa9a: Pull complete
      • c9b35ae20342: Pull complete
      • 97e1acb823af: Pull complete
      • c95c61c2cc3e: Pull complete
      • bb8f1ef45c26: Pull complete
      • Digest: sha256:8deedf6e64e06d976d4a8697bc3294f3c3e65ccf6367850abcc9de4b94784b87
      • Status: Downloaded newer image for daocloud.io/library/nginx:latest
    • 上面的命令就是咱們從 daocloud下載的 一個 NAME爲nginx TAG 爲latest的一個鏡像!

         

  • 2.查看鏡像信息
    • 使用docker iamges 查看當前本機上已有的鏡像
      • [root@Ninemax-LPC3 ~]# sudo docker images
      • 倉庫 標籤信息 鏡像ID 鏡像建立時間 鏡像大小
      • REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
      • ubuntu latest dc8dd8718e57 4 weeks ago 119.2 MB
      • ubuntu 14.04 7198809c062f 4 weeks ago 188 MB
      • daocloud.io/library/centos latest 4beff0251382 9 weeks ago 192.5 MB
      • daocloud.io/library/nginx latest bb8f1ef45c26 10 weeks ago 109.4 MB
    • 其中鏡像的ID信息十分重要,它惟一標識了鏡像.
    • TAG信息用來標記來自同一個倉庫的不一樣鏡像. 例如ubuntu倉庫中有多個鏡像,經過TAG信息來區分發型版本,包括 10.01,12.04,13.04,14.04等標籤

         

    • 還可使用docker tag命令爲本地鏡像添加一個新的標籤.例如
      • 命令解釋: sudo docker tag 原REPOSITORY:原TAG 新REPOSITORY:新TAG
      • [root@Ninemax-LPC3 ~]# sudo docker tag ubuntu:latest ubuntu:aaa
      • [root@Ninemax-LPC3 ~]# sudo docker images
      • REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
      • ubuntu latest dc8dd8718e57 4 weeks ago 119.2 MB
      • ubuntu aaa dc8dd8718e57 4 weeks ago 119.2 MB
      • ubuntu 14.04 7198809c062f 4 weeks ago 188 MB
      • daocloud.io/library/centos latest 4beff0251382 9 weeks ago 192.5 MB
      • daocloud.io/library/nginx latest bb8f1ef45c26 10 weeks ago 109.4 MB
    • 是否是多了個aaa標籤的鏡像!
    • 仔細觀察上圖的IMAGE ID,你會發現 新建立的這個鏡像與原來的鏡像IMAGE ID是相同的!,這就說明了他們實際上紙箱了同一個鏡像文件,只是別名不一樣而已!

         

    • 使用docker inspect 命令能夠獲取鏡像的詳細信息:
      • [root@Ninemax-LPC3 ~]# docker inspect dc8dd8718e57
      • [
      • {
      • "Id": "dc8dd8718e57c6bfb877b74b12b0b74572f9af31bcac6143321817d8318045bc",
      • "Parent": "7510bd34aee9a2406544d4dbdc44bf5d98fe56d1877a8caa027f1617bae19f7d",
      • "Comment": "",
      • "Created": "2017-06-20T23:19:04.474198922Z",
      • "Container": "f577a3d896311472b04e6d74baca8b0bae40b533164150588516c166c6c35068",
      • "ContainerConfig": {
      • "Hostname": "d4f93cc44884",
        • ...........................................................太長了 不粘貼了
    • 固然了,你還能夠指定顯示某一個字段的信息,例如:
      • [root@Ninemax-LPC3 ~]# docker inspect -f {{".Architecture"}} dc8dd8718e57
      • amd64
      • [root@Ninemax-LPC3 ~]# docker inspect -f {{".VirtualSize"}} dc8dd8718e57
      • 119165165

           

           

  • 3.搜尋鏡像
    • 使用docker search命令能夠搜索雲端倉庫中共享的鏡像,默認搜索Docker Hub官方倉庫的鏡像,用法爲 docker search TERM(條件),支持的參數包括:

--automated=false mysql

僅顯示自動建立的鏡像.linux

--no-trunc=false nginx

輸出信息不截斷顯示sql

-s, --stars=0 docker

指定僅顯示評價爲指定星級以上的鏡像ubuntu

   

  • 例如,搜索帶mysql關鍵詞的鏡像以下所示:
    • [root@Ninemax-LPC3 ~]# docker search mysql
    • NAME DESCRIPTION STARS OFFICIAL AUTOMATED
    • mysql MySQL is a widely used, open-source relati... 4663 [OK]
    • mariadb MariaDB is a community-developed fork of M... 1441 [OK]
    • mysql/mysql-server Optimized MySQL Server Docker images. Crea... 322 [OK]
    • percona Percona Server is a fork of the MySQL rela... 279 [OK]
    • hypriot/rpi-mysql RPi-compatible Docker Image with Mysql 59
    • centurylink/mysql Image containing mysql. Optimized to be li... 52 [OK]
    • sameersbn/mysql 45 [OK]
    • tutum/mysql Base docker image to run a MySQL database ... 24
    • google/mysql MySQL server for Google Compute Engine 18 [OK]
    • linuxserver/mysql A Mysql container, brought to you by Linux... 10
    • appcontainers/mysql Centos/Debian Based Customizable MySQL Con... 8 [OK]
    • openshift/mysql-55-centos7 DEPRECATED: A Centos7 based MySQL v5.5 ima... 6
    • bitnami/mysql Bitnami MySQL Docker Image 6 [OK]
    • autopilotpattern/mysql Implementation of the Autopilot Pattern fo... 4
    • frodenas/mysql A Docker Image for MySQL 3 [OK]
    • mysql/mysql-cluster Experimental MySQL Cluster Docker images. ... 2
    • kuberdock/mysql This is a fork of official MySQL image wit... 1 [OK]
    • circleci/mysql MySQL is a widely used, open-source relati... 1
    • cloudposse/mysql Improved `mysql` service with support for ... 0 [OK]
    • astronomerio/mysql-sink MySQL sink 0 [OK]
    • starkandwayne/mysql 0
    • tenstartups/mysql 0 [OK]
    • kardasz/mysql Debian 8, MySQL 5.7 0 [OK]
    • vukor/mysql Build for MySQL. Project available on http... 0 [OK]
    • jenkler/mysql Docker Mysql package 0

         

   

  • 4.刪除鏡像
    • 使用鏡像的標籤刪除鏡像
    • 命令:docker rmi [IMAGE...] 其中IMAGE能夠爲標籤/ID

         

    • 用鏡像標籤刪除鏡像:
      • 格式:docekr rmi REPOSITORY:TAG
      • 實際:
        • [root@Ninemax-LPC3 ~]# docker rmi ubuntu:14.04
        • Untagged: ubuntu:14.04
        • Deleted: 7198809c062fa2c10dcb93792e4cf76000a8c8a0d5a4588b1f170e9406b7dd4e
        • Deleted: 90e1c141b3af1a7317c06aaf7fffbf6096b4084401be03deec3e89b3acbb7b12
        • Deleted: 41b0d9d8b11695d42007b63c9e1967f0c94b5712104b645316cf0e8e7ac47b88
        • Deleted: ce3d2a7e37b4c4d73df7404accd64fbad06daa26c1b72659589f1e101b422635
        • Deleted: 80baa2a4c64f981d1d10b84e1b729285d86554d36afa1d765b9f1dda3c2e1a94
        • Deleted: facde2234f2e1f7709831fd8d746e78ff606aef0c58d49f81604009b53e68bbf

         

    • 用鏡像ID刪除鏡像:
      • 格式: docker rmi IMAGE ID
      • 實際:
        • [root@Ninemax-LPC3 ~]# docker rmi bb8f1ef45c26
        • Untagged: daocloud.io/library/nginx:latest
        • Deleted: bb8f1ef45c26e81579a105f6602c90c191782d12ff21e5a9cd1bb7425d8ea6a9
        • Deleted: c95c61c2cc3e06bb41658cad4282702c668c5d3c16e367b9dc7e43aef8808b9c
        • Deleted: 97e1acb823af00f5ac295fe193414b309a332d271ab71d9a096ca1e1f5edf40f
        • Deleted: c9b35ae203426c5120bcaee87333376b278f7c0befbd0d3e64b813a95c8e38cc
        • Deleted: fda55200fa9a040c6b0703caa5d1eee25156af999b43280eae9f95a19c7bb091
        • Deleted: 275a07ec63cd37082c28a82267c262f4e27448a3cc52a1e4661c4bb166c5f7f0
        • Deleted: 476175996aa442f9afdea1321f20bda44d8dfea863d0e9ab372d35a03ee36fd1
        • Deleted: 6f5118869c746fcacba464bc734757de16794f862b492b750079e40a86d2eeea
        • Deleted: 2de46b59641d6e0862d416e6896d2ce20f3cba8637a7f4f579fa760dd3620e0d
        • Deleted: 7444805dc220d49e5eecd3a59417d3fc8ed748c6ce8f6e1eafec175d6171036a

         

    • 區別:
      • IMAGE ID:使用ID刪除一個鏡像時,會刪除此鏡像的全部標籤和文件,
      • TAG:使用標籤刪除鏡像時,只有當鏡像標籤所有刪除後,鏡像文件纔會被刪除(推薦使用這種)

         

    • 強制刪除鏡像:
      • 若是沒法刪除鏡像時,能夠rmi命令中追加一個-f進行強制刪除.可是並不推薦這種方式!由於這種強制刪除會形成其餘的遺留問題.
      • 正確的作法是
        • 查看本機上的全部容器(命令 docker ps -a)
        • 中止此鏡像正在運行中的全部容器 (命令:docker stop CONTAINER ID )
        • 刪除依賴依賴此鏡像的容器(命令: docker rm CONTAINER ID )
        • 刪除此鏡像(命令: docker rmi IMAGE ID)

             

         

  • 5.建立鏡像
    • 建立鏡像的方法有三種:基於已有鏡像的容器建立,基於本地模板導入,基於DockerFile建立,這裏我只嘗試了最經常使用的基於已有鏡像的建立

         

    • 基於已有鏡像的容器建立:
      • 該方法主要是使用docker commit命令,其命令格式爲docker commit [OPTIONS]CONTAINER [REPOSITORY[:TAG]],主要選項包括:
        • -a,--author="" 做者信息
        • -m,--message="" 提交信息
        • -p,--pause=true 提交時暫停容器運行.
      • 下面將掩飾如何使用該命令建立一個新鏡像,首先要啓動一個鏡像,並在其中進行修改操做,例如,建立一個test文件,以後退出!
        • [root@Ninemax-LPC3 ~]# docker run -ti centos:7.3 /bin/bash
        • [root@Ninemax-LPC3 ~]# cd /home
        • [root@Ninemax-LPC3 ~]# 建立文件保存,退出容器(ctrl+D或者 輸入exit+火車)
      • 記住退出後生成的ID (也能夠經過命令:dockers ps -a查看),例如個人ID爲: 9f21e71c8ab0

           

      • 下面咱們實際運行一下commit命令:
        • [root@Ninemax-LPC3 ~]# docker commit -a "linglongtouzianhongdou" -m "new Docker Image" 9f21e71c8ab0 newdocker:1.0
        • 5b59c0c6496fe987ecc19eb3b67663cd14b013da8a04df8dfa7e0b8c99a2c550
      • 咱們能夠看到, commit後跟的-a 和-m是commit命令的選項 ,以後是咱們的CONTAINER ID:9f21e71c8ab0 以後是一個 NAME[:TAG] 倉庫名:標籤
      • 如今咱們查看咱們剛剛建立的鏡像:
        • [root@Ninemax-LPC3 ~]# docker images
        • REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
        • newdocker 1.0 5b59c0c6496f 18 seconds ago 192.5 MB
        • centos 7.3 4beff0251382 9 weeks ago 192.5 MB

             

             

  • 6.存出和載入鏡像
    • 可使用docker savedocker load命令來導入鏡像和載出鏡像

         

    • 存出鏡像:
      • 若是要存儲鏡像到本地文件,可使用docker save命令
      • 先查看鏡像:
        • [root@Ninemax-LPC3 ~]# docker images
        • REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
        • centos 7.3 4beff0251382 9 weeks ago 192.5 MB
      • 存儲鏡像:
        • 這行命令中有個參數 -o 指定路徑和文件名稱,若是沒寫路徑,會存到當前路徑中!
        • [root@Ninemax-LPC3 ~]# docker save -o centos_7.3.tar centos:7.3
        • [root@Ninemax-LPC3 ~]# pwd
        • /root
        • [root@Ninemax-LPC3 ~]# ll
        • 總用量 195620
        • -rwxrwxrwx. 1 root root 2086 12 4 2014 anaconda-ks.cfg
        • -rw-r--r--. 1 root root 200197120 7 21 01:18 centos_7.3.tar
        • -rwxrwxrwx. 1 root root 42417 12 4 2014 install.log
        • -rwxrwxrwx. 1 root root 10033 12 4 2014 install.log.syslog

       

    • 載入鏡像:
      • 可使用docker load從本地的文件中再導入到本地的鏡像倉庫,例如從文件 centos_7.3.tar導入到本地鏡像列表

           

      • 先查看鏡像列表
        • [root@Ninemax-LPC3 docker]# docker images
        • REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
      • 載入鏡像:
        • [root@Ninemax-LPC3 docker]# docker load -i centos_7.3.tar
        • [root@Ninemax-LPC3 docker]# docker load --input centos_7.3.tar
        • [root@Ninemax-LPC3 docker]# docker load < centos_7.3.tar

             

         

       

  • 7.上傳鏡像
    • 可使用docker push 命令上傳鏡像到倉庫,默認上傳到DockerHub官方倉庫(須要登陸),命令格式爲docker push NAME[:TAG] ( push須要用tag命令先打個標籤)

         

    • 須要提早在官網註冊一下賬戶!
      • [root@Ninemax-LPC3 docker]# docker tag centos:7.3 user/test:7.3
      • [root@Ninemax-LPC3 docker]# docker push user/test:7.3
      • The push refers to a repository [user/test] (len: 1)
      • 4beff0251382: Image push failed
      • 4beff0251382: Buffering to Disk
      • Please login prior to push:
      • Username: nin^H^H
      • Password:
      • Email: nn
相關文章
相關標籤/搜索