鏡像管理實驗

一. 實驗目的:

  1. 熟悉鏡像的基本工作原理;
  2. 掌握鏡像操作的常用命令;
  3. 用兩種不同的方法創建一個新的鏡像;

二. 實驗環境:

Ubuntu16.04+Docker

三. 實驗內容:

  1. 練習使用鏡像操作的常用命令;
  2. 熟練掌握創建新鏡像的不同方法。

四、 實驗練習:

1.拉取鏡像

拉取鏡像的命令如下:

 docker pull [倉庫地址:端口] NAME[:TAG|@DIGEST]

問題:

(1)從官方鏡像上拉取一個14.04標籤的鏡像ubuntu

(2)如何從私有倉庫quay.io上拉取一個latest標籤的鏡像flannel

從私有倉庫上拉取鏡像:

docker pull <私有庫ip>:<端口>/ < 鏡像repository> :<鏡像tag>

sudo docker pull quay.io/coreos/flannel:y0.10.0-amd64

docker pull quay.io/username/flannel:tag

2.搜索鏡像

採用不同的兩種方式進行鏡像的搜索:

(1)在docker hub網站上搜索https://hub.docker.com,搜索鏡像名爲ubuntu的所有鏡像

此時就可在這個網站上註冊一個賬號,之後也可在終端登錄

(2)在終端下,通過docker命令行方式搜索

docker search [OPTIONS] TERM

OPTIONS說明:

--no-trunc=false 是否截斷

--limit int 搜索的最多結果數,最多25個

--filters=stars=最低收藏數 限定顯示結果的最低收藏數

如何從Docker Hub查找所有鏡像名包含ubuntu,並且收藏數大於20的鏡像

3.查看鏡像

常見有兩種查看鏡像的方法:

(1)docker images,查看本地存儲的鏡像的倉庫名稱、標籤、ID號、創建時間和大小等簡單信息。命令格式如下:

docker images [options] [REPOSITORY]

-a, --all=fase 顯示所有鏡像

-f,--filter=[ ]過濾參數

--no-trunc=false 是否截斷

-q, --quiet=false 顯示鏡像的唯一ID

要求:

  • 列出包含中間層的所有鏡像

  • 列出所有的鏡像,並且可以看到完整的ID

(2)docker inspect,查看鏡像的詳細信息,包含製作者、適應架構和各層的數字摘要等。

要求:

  • 查看ubuntu鏡像的詳細信息

  • 通過-f參數可以快速定位,查看ubuntu鏡像的創建時間:

4導出和導入鏡像

舉例說明,如何把鏡像ubuntu:14.04從電腦A傳輸到電腦B?

  • A先使用導出鏡像(save)操作將鏡像保存在本地

  • B用導入鏡像(load)操作,將鏡像包加載到本地倉庫中

5.發佈鏡像

(1)如何把一個鏡像發佈到docker hub中?請舉例說明。

登錄docker hub      

#docker login

使用docker tag 命令爲本地鏡像添加新的標籤

使用docker push 命令將新添加的鏡像上傳到docker hub

(2)假如在docker hub上,現有用戶名爲username,但是想要推送一個叫做user/image的鏡像到docker hub上,怎麼辦?

使用docker tag 命令爲本地鏡像添加新的標籤

6刪除鏡像

分別用兩種不同的方法刪除本地鏡像?說明兩種方法的不同之處!

(1)第一種刪除鏡像的方法是docker rmi不加-f,只能刪除無tag的鏡像,被曾經打過多處tag就無法直接刪除,需要先刪除tag,刪除曾經啓動過的容器,最後才能刪除鏡像。此時,tag可比作引用,image爲tag指向的對象。

加-f可以刪除正在使用的鏡像。

如何刪除本地的所有鏡像?

 刪除全部容器:docker rm $(docker ps -aq)

   一條命令實現停用並刪除容器:docker stop $(docker ps -q)& docker rm $(docker ps -aq)

如果想要刪除一個鏡像,但是有容器正在使用它,該如何處理?

刪除docker中的鏡像,我們可以使用如下命令:docker rmi 鏡像id

刪除docker中的容器可以使用如下命令:docker rm 容器id

7.查看鏡像歷史

查看一下ubuntu:14.04鏡像歷史?並描述一下

鏡像               創建時間           創建者                                        大小

8通過已有鏡像ubuntu:14.04啓動一個容器,在容器中安裝nginx,用docker commit命令提交新容器爲鏡像。相關命令如下:

Docker commit [options] container [REPOSITORY[:TAG]]

 -a ,--author作者

-m, --message 鏡像信息

-p, --pause 提交時候暫停容器的運行

過程:

(1)使用鏡像ubuntu:14.04來啓動一個交互式容器commit_test

docker run -it -p 80 --name commit_test ubuntu:14.04 /bin/bash

(2)在容器內更新apt庫,並且安裝nginx

apt-get update

apt-get install -y nginx

然後exit退出容器

(3)輸入命令docker ps -l看到剛剛創建的容器

(4)把容器commit_test提交爲鏡像catherine2005/commit_image1,設置鏡像作者爲catherine,提交修改的內容爲nginx

docker commit -a ‘catherine’ -m ‘nginx’ commit_test catherine2005/commit_image1

(5)查看剛剛創建的鏡像信息

docker images

(6)使用剛剛創建的鏡像catherine2005/commit_image1啓動一個容器nginx_web1

docker run -d --name  nginx_web1 catherine2005/commit_image nginx -g “daemon off;”

(7)查看新創建的容器

docker ps

發現沒有映射端口,不可用

(8)使用剛剛創建的鏡像catherine2005/commit_image1啓動一個容器nginx_web2

docker run -d –name nginx_web2 -p 80 catherine2005/commit_image1 nginx -g “daemon off;”

(9)再次查看容器

docker ps

此時應該可以看到端口映射出49155->80

(10)使用命令來查看index.html網站

curl http://127.0.0.1:49155

或者在瀏覽器上直接輸入http://127.0.0.1:49155 就可以看到index.html網站

9如何通過新建一個Dockerfile文件來構建一個和題目8一樣的新鏡像?

主要分爲兩步

(1)創建一個dockerfile文件

(2)使用docker build命令來構建

請寫出詳細的實驗步驟,以及貼出相應的截圖。

docker build [options] path |URL| -

--build-arg=[] :設置鏡像創建時的變量;

--cpu-shares :設置 cpu 使用權重; 

--cpu-period :限制 CPU CFS週期; 

--cpu-quota :限制 CPU CFS配額; 

--cpuset-cpus :指定使用的CPU id; 

--cpuset-mems :指定使用的內存 id; 

--disable-content-trust :忽略校驗,默認開啓; 

-f :指定要使用的Dockerfile路徑; 

--force-rm :設置鏡像過程中刪除中間容器; 

--isolation :使用容器隔離技術; 

--label=[] :設置鏡像使用的元數據; 

-m :設置內存最大值; 

--memory-swap :設置Swap的最大值爲內存+swap,"-1"表示不限swap; 

--no-cache :創建鏡像的過程不使用緩存; 

--pull :嘗試去更新鏡像的新版本; 

--quiet, -q :安靜模式,成功後只輸出鏡像 ID; 

--rm :設置鏡像成功後刪除中間容器; 

--shm-size :設置/dev/shm的大小,默認值是64M; 

--ulimit :Ulimit配置。 

--tag, -t: 鏡像的名字及標籤,通常 name:tag 或者 name 格式;可以在一次構建中爲一個鏡像設置多個標籤。 

--network: 默認 default。在構建期間設置RUN指令的網絡模式 

 

使用當前目錄的 Dockerfile 創建鏡像,標籤爲 runoob/ubuntu:v1 

docker build -t runoob/ubuntu:v1 .

使用URL github.com/creack/docker-firefox 的 Dockerfile 創建鏡像。

docker build github.com/creack/docker-firefox

也可以通過 -f Dockerfile 文件的位置:

$ docker build -f /path/to/a/Dockerfile .

在 Docker 守護進程執行 Dockerfile 中的指令前,首先會對 Dockerfile 進行語法檢查,有語法錯誤時會返回:

$ docker build -t test/myapp .Sending build context to Docker daemon 2.048 kBError response from daemon: Unknown instruction: RUNCMD

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章