镜像管理实验

一. 实验目的:

  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

 

 

 

 

 

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