目標
-
鏡像基礎命令
-
構建鏡像的方式
鏡像基礎命令
# 列出鏡像列表
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 90d5884b1ee0 5 days ago 188 MB
標籤解釋:
REPOSITORY 鏡像的倉庫源
TAG 鏡像的標籤
IMAGE ID 鏡像的Id
CREATED 鏡像的創建時間
SIZE 鏡像大小
同一倉庫源可以有多個 TAG,代表這個倉庫源的不同個版本,如 ubuntu 倉庫源裏,有 15.10、14.04 等多個不同的版本,我們使用 REPOSITORY:TAG 來定義不同的鏡像。
如果你不指定一個鏡像的版本標籤,例如你只使用 ubuntu,docker 將默認使用 ubuntu:latest 鏡像。
比如指定使用 ubuntu:15.10
$ docker run -i -t ubuntu:15.10 /bin/bash
# 獲取一個新的鏡像
$ docker pull ubuntu:15.10
# 查找鏡像 通過search 指令 可以查詢 Docker Hub 上面的鏡像 , 可以返回25 條信息
$ docker search httpd
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
httpd The Apache.. 2941 [OK] centos/httpd-24-centos7
NAME: 鏡像倉庫源的名稱
DESCRIPTION: 鏡像的描述
OFFICIAL: 是否 docker 官方發佈
stars: 類似 Github 裏面的 star,表示點贊、喜歡的意思
AUTOMATED: 自動構建
# 刪除鏡像
$ docker rmi 鏡像名稱
創建鏡像
當我們從 docker 鏡像倉庫中下載的鏡像不能滿足我們的需求時,我們可以通過以下兩種方式對鏡像進行更改。
- 從已經創建的容器中更新鏡像,並且提交這個鏡像
- 使用 Dockerfile 指令來創建一個新的鏡像
從已經創建的容器更新鏡像,並提交這個鏡像
# 準備好一個容器
$ docker run --name web1 -i -t ubuntu /bin/bash
# 更新鏡像
$ apt-get update
# 退出
$ exit
# 提交鏡像
docker commit -m="update images" -a="gengzi" e218edb10161 gengzi/ubuntu:v1
參數解釋:
-m 提交的描述信息
-a 作者信息
e218edb10161 容器的id
gengzi/ubuntu:v1 創建的鏡像名稱和標籤(tag)
# 查看當前的鏡像
$ docker images
# 啓動新鏡像
$ docker run -i -t gengzi/ubuntu:v1 /bin/bash
使用 Dockerfile 指令來創建一個新的鏡像
我們使用命令 docker build , 從零開始來創建一個新的鏡像。爲此,我們需要創建一個 Dockerfile 文件,其中包含一組指令來告訴 Docker 如何構建我們的鏡像。
# 創建Dockerfile 文件
mkdir -p /home/dockerfile
cd /home/dockerfile
vi Dockerfile
輸入
FROM centos:6.7
MAINTAINER Fisher "[email protected]"
RUN /bin/echo "hello world"
每一個指令都會在鏡像上創建一個新的層,每一個指令的前綴都必須是大寫的。
第一條FROM,指定使用哪個鏡像源
RUN 指令告訴docker 在鏡像內執行命令,安裝了什麼。。。
然後,我們使用 Dockerfile 文件,通過 docker build 命令來構建一個鏡像。
# 使用docker build 構建鏡像
$ docker build -t gengzi/centos:6.7 .
----------------- 執行過程 ---------------------------------
Sending build context to Docker daemon 3.584 kB
Step 1 : FROM centos:6.7
6.7: Pulling from library/centos
cbddbc0189a0: Pull complete
Digest: sha256:4c952fc7d30ed134109c769387313ab864711d1bd8b4660017f9d27243622df1
Status: Downloaded newer image for centos:6.7
---> 9f1de3c6ad53
Step 2 : MAINTAINER Fisher "[email protected]"
---> Running in b9f024efcf6d
---> d38b2abac6a2
Removing intermediate container b9f024efcf6d
Step 3 : RUN /bin/echo "hello world"
---> Running in 0111b30d6693
hello world
---> e962a020a72c
Removing intermediate container 0111b30d6693
Successfully built e962a020a72c
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
------------------------------------------------------------------------------------
-t :指定要創建的目標鏡像名
. :Dockerfile 文件所在目錄,可以指定Dockerfile 的絕對路徑
# 查看現在的鏡像
$ docker images
# 爲鏡像設置一個新的標籤
$ docker tag 860c279d2fec gengzi/centos:dev
docker tag 鏡像ID,這裏是 860c279d2fec ,用戶名稱、鏡像源名(repository name)和新的標籤名(tag)。
使用 docker images 命令可以看到,ID爲860c279d2fec的鏡像多一個標籤。