docker(二)镜像的使用

docker(二)镜像的使用

列出镜像列表

docker images           
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
nginx               latest              6f8d099c3adc        12 days ago         182.7 MB

各个选项说明:

    REPOSITORY:表示镜像的仓库源

    TAG:镜像的标签

    IMAGE ID:镜像ID

    CREATED:镜像创建时间

    SIZE:镜像大小


同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,
如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,
我们使用 REPOSITORY:TAG 来定义不同的镜像。
所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:
runoob@runoob:~$ docker run -t -i ubuntu:15.10 /bin/bash 
root@d77ccb2e5cca:/#

#如果你不指定一个镜像的版本标签,例如你只使用ubuntu,docker 将默认使用 ubuntu:latest 镜像。


查找拖取删除

docker search httpd
docker pull httpd
docker rmi hello-world

镜像的构建

'
镜像的构建
docker commit 构建镜像三部曲
	运行容器
	修改容器
	将容器保存为新的镜像

缺点
	效率低 可重复性弱 容易出错
	使用者无法对镜像进行审计,存在安全隐患

'
[root@server3 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              3556258649b2        2 weeks ago         64.2 MB
game2048            latest              19299002fdbe        2 years ago         55.5 MB
[root@server3 ~]# docker history ubuntu:latest  
# 查看每一层的镜像修改,也就是该镜像的创建历史
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
3556258649b2        2 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 
<missing>           2 weeks ago         /bin/sh -c mkdir -p /run/systemd && echo '...   7 B                 
<missing>           2 weeks ago         /bin/sh -c set -xe   && echo '#!/bin/sh' >...   745 B               
<missing>           2 weeks ago         /bin/sh -c [ -z "$(apt-get indextargets)" ]     987 kB              
<missing>           2 weeks ago         /bin/sh -c #(nop) ADD file:3ddd02d976792b6...   63.2 MB 

# <missing>的意思是 这些操作不是在本机操作的 所有找不到 这并没有什么关系

演示案例:
# busybox:这个镜像非常的轻量级 适合我们在学习和实验中去使用
[root@server3 ~]# docker run -it --name test busybox
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
ee153a04d683: Pull complete 
Digest: sha256:9f1003c480699be56815db0f8146ad2e22efea85129b5b5983d0e0fb52d9ab70
Status: Downloaded newer image for busybox:latest
/ # echo helloworld >testfile
/ # ls
bin       etc       proc      sys       tmp       var
dev       home      root      testfile  usr
/ # cat testfile 
helloworld
/ # exit #退出并停止运行 ctrl p+q 退出不停止运行

[root@server3 ~]# docker ps -a  #注意:我们只是退出了运行中的容器 并没有删除它
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                     PORTS               NAMES
6789012d8958        busybox             "sh"                About a minute ago   Exited (0) 5 seconds ago                       test
[root@server3 ~]# docker start test 
#我们将在后台保存的容器运行起来
test

[root@server3 ~]# docker attach test #此命令可以进入在后台运行起来的容器

[root@server3 ~]# docker commit test test:v1  #将我们所修改的容器保存
sha256:c1a9c80bccb0b51e410cc90bbe56460c4b84e2119741aee133d99a45da702857

'docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2

各个参数说明:

    -m: 提交的描述信息

    -a: 指定镜像作者

    e218edb10161:容器 ID

    runoob/ubuntu:v2: 指定要创建的目标镜像名

'

[root@server3 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                v1                  c1a9c80bccb0        5 seconds ago       1.22 MB
ubuntu              latest              3556258649b2        2 weeks ago         64.2 MB
busybox             latest              db8ee88ad75f        3 weeks ago         1.22 MB
game2048            latest              19299002fdbe        2 years ago         55.5 MB

[root@server3 ~]# docker history test:v1 
 #我们可以看到 相同的底层是共享的(在我们当前的文件系统之上是只保存一份的)基于busybox构建的
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
c1a9c80bccb0        24 seconds ago      sh                                              59 B                
db8ee88ad75f        3 weeks ago         /bin/sh -c #(nop)  CMD ["sh"]                   0 B                 
<missing>           3 weeks ago         /bin/sh -c #(nop) ADD file:9ceca008111a4dd...   1.22 MB 

# 缺点是:我们无法得知我们对这个容器到底做了什么操作,虽然它已经被保存了

# 可以强制删除正在运行中的容器
docker rm -f 

# 我们可以看到 新运行的容器也是有我们之前所保存的数据的
[root@server3 ~]# docker run -it --name vm1 test:v1
/ # ls
bin       etc       proc      sys       tmp       var
dev       home      root      testfile  usr
/ # cat testfile 
helloworld

Dockerfile文件的方式

创建一个Dockerfile

# 注意:一定要创建一个新的目录 因为在构建镜像的时候,
#会默认把dockerfile所在的目录中的所有目录发送给docker引擎,
#举个例子:如果你把dockerfile放在/目录下 那么这个过程会变得非常的缓慢
[root@server3 mnt]# pwd
/mnt
[root@server3 mnt]# ls
docker
[root@server3 mnt]# cd docker/
[root@server3 docker]# ls
[root@server3 docker]# vim dockerfile
'FROM busybox  #以哪个基础镜像为模板
 RUN echo testfile > file1 #在新镜像中你要执行的哪些动作
 RUN echo testfile > file2'
[root@server3 docker]# docker build -t test:v2 . #镜像名称 #.代表当前目录
Sending build context to Docker daemon 2.048 kB
#把dockerfile所在的目录中的所有目录发送给docker引擎
Step 1/3 : FROM busybox
 ---> db8ee88ad75f
Step 2/3 : RUN echo testfile > file1
 ---> Running in 4c00ef6f0753
 ---> e8a1fbac8837
Removing intermediate container 4c00ef6f0753 #临时镜像层删掉
Step 3/3 : RUN echo testfile > file2
 ---
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值