Docker入門基礎之鏡像使用

當運行容器時,使用的鏡像若是在本地中不存在,docker 就會自動從 docker 鏡像倉庫中下載,默認是從 Docker Hub 公共鏡像源下載。mysql

下面咱們來學習:web

  • 一、管理和使用本地 Docker 主機鏡像
  • 二、建立鏡像

列出鏡像列表
咱們可使用 docker images 來列出存在於宿主機上的鏡像。sql

root@ubuntu:~# docker images
 REPOSITORY         TAG        IMAGE ID     CREATED      SIZE
 alpine           latest      055936d39205   3 weeks ago    5.53MB
 mysql           5.7        7faa3c53e6d6   3 weeks ago    373MB
 ubuntu           15.04       d1b55fd07600   3 years ago    131MB
 ubuntu           16.04       2a697363a870   2 weeks ago    119MB

各個選項說明:docker

  • REPOSITORY:表示鏡像的倉庫源
  • TAG:鏡像的標籤
  • IMAGE ID:鏡像ID
  • CREATED:鏡像建立時間
  • SIZE:鏡像大小

同一倉庫源能夠有多個 TAG,表明這個倉庫源的不一樣個版本,如ubuntu倉庫源裏,有16.0四、15.04等多個不一樣的版本,咱們使用 REPOSITORY:TAG 來定義不一樣的鏡像。ubuntu

以相應的鏡像啓動容器
咱們若是要使用版本爲16.04的ubuntu系統鏡像來運行容器時,命令以下:數組

root@ubuntu:~# docker run -it ubuntu:16.04 sh

若是要使用版本爲15.04的ubuntu系統鏡像,則命令以下:bash

root@ubuntu:~# docker run -it ubuntu:15.04 sh

各個參數解析:學習

  • docker: Docker 的二進制執行文件。
  • run: 與前面的 docker 組合來運行一個容器。
  • -it: 實際上是兩個參數組成, -i 和 -t,-i:容許你對容器內的標準輸入 (STDIN) 進行交互。-t:在新容器內指定一個僞終端或終端。
  • ubuntu:15.04指定要運行的鏡像,Docker首先從本地主機上查找鏡像是否存在,若是不存在,Docker 就會從鏡像倉庫 Docker Hub 下載公共鏡像。
  • sh: 執行命令。

獲取一個新鏡像
當咱們在宿主機上使用一個不存在的鏡像時 Docker 就會自動下載這個鏡像。若是咱們想預先下載這個鏡像,咱們可使用 docker pull 命令來下載它。網站

root@ubuntu:~# docker pull ubuntu:18.04
 18.04: Pulling from library/ubuntu
 6abc03819f3e: Pull complete
 05731e63f211: Pull complete
 0bd67c50d6be: Pull complete
 Digest: sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5
 Status: Downloaded newer image for ubuntu:18.04

下載完成後,咱們能夠直接使用這個鏡像來運行容器。ui

查找鏡像

咱們能夠從 Docker Hub 網站來搜索鏡像,Docker Hub 網址爲: https://hub.docker.com/
咱們也可使用 docker search 命令來搜索鏡像。好比咱們須要一個httpd的鏡像來做爲咱們的web服務。咱們能夠經過 docker search 命令搜索 httpd 來尋找適合咱們的鏡像。
clipboard.png

NAME: 鏡像倉庫源的名稱
DESCRIPTION: 鏡像的描述
OFFICIAL: 是否docker官方發佈

拉取httpd鏡像
咱們決定使用上圖中的httpd 官方版本的鏡像,使用命令 docker pull 來下載鏡像。

root@ubuntu:~# docker pull httpd
 Using default tag: latest
 latest: Pulling from library/httpd
 743f2d6c1f65: Already exists
 c92eb69846a6: Pull complete
 2211b052800a: Pull complete
 aed180197314: Pull complete
 7c472a4980a7: Pull complete
 Digest: sha256:a35ad614c1ffc6fe931f12dc42b682edbdcc62cf78d8edc41499dd90ef0f8003
 Status: Downloaded newer image for httpd:latest

下載完成後,咱們就可使用這個鏡像了。

建立鏡像
當咱們從docker鏡像倉庫中下載的鏡像不能知足咱們的需求時,咱們能夠經過如下兩種方式對鏡像進行更改。

  • 1.從已經建立的容器中更新鏡像,而且提交這個鏡像
  • 2.使用 Dockerfile 指令來建立一個新的鏡像

更新鏡像
更新鏡像以前,咱們須要使用鏡像來建立一個容器。

root@ubuntu:~# docker run -it ubuntu:16.04 sh

在運行的容器內使用 apt-get update 命令進行更新。

# apt-get update
 Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
 Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
 Get:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]
 Get:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]
 Get:5 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB]
 Get:6 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [844 kB]
 Get:7 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]
 Get:8 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB]
 Get:9 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]
 Get:10 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [1237 kB]
 Get:11 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.7 kB]
 Get:12 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [556 kB]
 Get:13 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.1 kB]
 Get:14 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [967 kB]
 Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [19.1 kB]
 Get:16 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [7942 B]
 Get:17 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [8532 B]
 Get:18 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [6113 B]
 Fetched 15.8 MB in 8s (1933 kB/s)
 Reading package lists... Done

在完成操做以後,輸入 exit命令來退出這個容器。

經過 docker ps -a 查看全部容器:

root@ubuntu:~# docker ps -a
 CONTAINER ID   IMAGE              COMMAND        CREATED      STATUS           PORTS          NAMES
 12847d9f5071   ubuntu:16.04           "sh"          2 minutes ago   Exited (0) 43 seconds ago               peaceful_edison
 3cec6f5e47c0   httpd              "httpd-foreground"   5 minutes ago   Exited (0) 5 minutes ago               vigilant_heisenberg

此時ID爲12847d9f5071的容器,是按咱們的需求更改的容器。咱們能夠經過命令docker commit來提交容器副本。

root@ubuntu:~# docker commit -m="has update" -a="yeqing112" 12847d9f5071 yeqing112/ubuntu:v2
sha256:5cce1167ee4c083ff9b87e61a58081805e76d015a12a4811bd152263aa013860

各個參數說明:

  • -m: 提交的描述信息。
  • -a: 指定鏡像做者。
  • 12847d9f5071: 容器ID。
  • yeqing112/ubuntu:v2: 指定要建立的目標鏡像名。

咱們可使用 docker images 命令來查看咱們的新鏡像 yeqing112/ubuntu:v2

root@ubuntu:~# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
yeqing112/ubuntu             v2                  5cce1167ee4c        2 minutes ago       144MB
ubuntu                       16.04               2a697363a870        2 weeks ago         119MB

從上面的信息中能夠看到咱們更新過的鏡像,文件體積明顯比以前大了一些。

構建鏡像
除了上面更新鏡像的方法,咱們還可使用命令 docker build , 從零開始來構建一個新的鏡像。爲此,咱們須要建立一個 Dockerfile 文件,其中包含一組指令來告訴 Docker 如何構建咱們的鏡像。

root@ubuntu:~# cat Dockerfile 
FROM    ubuntu:16.04
MAINTAINER      Fisher "service@urlos.com"

RUN     apt-get update

EXPOSE  22
EXPOSE  80

CMD     /bin/bash

每個指令都會在鏡像上建立一個新的層,每個指令的前綴都必須是大寫的。

第一條FROM,指定使用哪一個鏡像源

RUN 指令告訴docker 在鏡像內執行命令,安裝了什麼

這裏咱們仍是同樣,執行一個 apt-get update 更新命令

而後,咱們使用 Dockerfile 文件,經過 docker build -t yeqing112/ubuntu:v3 . 命令來構建一個新鏡像。

root@ubuntu:~# root@ubuntu:/home# docker build -t yeqing112/ubuntu:v3 .
Sending build context to Docker daemon  422.4kB
Step 1/6 : FROM    ubuntu:16.04
 ---> 2a697363a870
Step 2/6 : MAINTAINER      Fisher "service@urlos.com"
 ---> Running in 92229e7a091a
Removing intermediate container 92229e7a091a
 ---> 9a89f4debc7d
Step 3/6 : RUN     apt-get update
 ---> Running in d709ef335784
Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
Get:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]
Get:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]
Get:5 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [844 kB]
Get:6 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB]
Get:7 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]
Get:8 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB]
Get:9 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.7 kB]
Get:10 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [556 kB]
Get:11 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]
Get:12 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [1237 kB]
Get:13 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.1 kB]
Get:14 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [967 kB]
Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [19.1 kB]
Get:16 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [7942 B]
Get:17 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [8532 B]
Get:18 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [6113 B]
Fetched 15.8 MB in 5s (3051 kB/s)
Reading package lists...
Removing intermediate container d709ef335784
 ---> 540751496556
Step 4/6 : EXPOSE  22
 ---> Running in 9ae528bc083f
Removing intermediate container 9ae528bc083f
 ---> cfccc621a52d
Step 5/6 : EXPOSE  80
 ---> Running in efd88e9349c1
Removing intermediate container efd88e9349c1
 ---> 428cb5221a06
Step 6/6 : CMD     /bin/bash
 ---> Running in 2bc08b664f97
Removing intermediate container 2bc08b664f97
 ---> 9c55ea9b9ee8
Successfully built 9c55ea9b9ee8
Successfully tagged yeqing112/ubuntu:v3

參數說明:

  • -t:指定要建立的目標鏡像名
  • .:Dockerfile 文件所在目錄,能夠指定Dockerfile 的絕對路徑

構建成功後,使用 docker images 查看鏡像:

root@ubuntu:~# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
yeqing112/ubuntu             v3                  9c55ea9b9ee8        9 seconds ago       144MB
yeqing112/ubuntu             v2                  5cce1167ee4c        16 minutes ago      144MB
ubuntu                       16.04               2a697363a870        2 weeks ago         119MB

由上面的信息看出,新的鏡像v3與v2文件體積是同樣的,兩個鏡像都只是執行了apt-get update

設置鏡像標籤
咱們可使用 docker tag 命令,爲鏡像添加一個新的標籤。

root@ubuntu:/home# docker tag 9c55ea9b9ee8 yeqing112/ubuntu:v3-1

docker tag 鏡像ID,這裏是 9c55ea9b9ee8,用戶名稱、鏡像源名(repository name)和新的標籤名(tag)。

使用 docker images 命令能夠看到,ID爲9c55ea9b9ee8的鏡像多了一個v3-1的標籤。

root@ubuntu:/home# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
yeqing112/ubuntu             v3                  9c55ea9b9ee8        21 minutes ago      144MB
yeqing112/ubuntu             v3-1                9c55ea9b9ee8        21 minutes ago      144MB
yeqing112/ubuntu             v2                  5cce1167ee4c        38 minutes ago      144MB
ubuntu                       16.04               2a697363a870        2 weeks ago         119MB
相關文章
相關標籤/搜索