码迷,mamicode.com
首页 > 其他好文 > 详细

docker镜像的导入导出和制作

时间:2020-09-18 12:20:29      阅读:41      评论:0      收藏:0      [点我收藏+]

标签:作用   efault   标记   min   container   持久   生产   环境   执行   

镜像导入导出

docker export和docker import

作用

对当前的容器文件系统创建一个快照,并持久化为tar文件,tar文件中保存的是容器的文件系统和其上的数据。然后通过docker import命令导入tar文件到docker环境后,会发现导入成功的是一个只有一层镜像层的image,而不是恢复为一个容器。
tar文件内容:

# tar xf test.tar
# ll
total 766604
-rw-r--r--.  1 root root     12148 Aug 10 05:39 anaconda-post.log
lrwxrwxrwx.  1 root root         7 Aug 10 05:38 bin -> usr/bin
-rw-------.  1 root root   2121728 Aug 25 11:29 core.2005
drwxr-xr-x.  3 root root        18 Aug 25 11:37 data0
drwxr-xr-x.  4 root root        43 Aug 24 20:14 dev
drwxr-xr-x. 47 root root      4096 Aug 25 11:35 etc
drwxr-xr-x.  2 root root         6 Apr 11  2018 home
lrwxrwxrwx.  1 root root         7 Aug 10 05:38 lib -> usr/lib
lrwxrwxrwx.  1 root root         9 Aug 10 05:38 lib64 -> usr/lib64
drwxr-xr-x.  2 root root         6 Apr 11  2018 media
drwxr-xr-x.  2 root root         6 Apr 11  2018 mnt
drwxr-xr-x.  2 root root         6 Apr 11  2018 opt
drwxr-xr-x.  2 root root         6 Aug 10 05:38 proc
dr-xr-x---.  3 root root      4096 Aug 25 11:39 root
drwxr-xr-x. 12 root root       163 Aug 25 11:35 run
lrwxrwxrwx.  1 root root         8 Aug 10 05:38 sbin -> usr/sbin
drwxr-xr-x.  2 root root         6 Apr 11  2018 srv
drwxr-xr-x.  2 root root         6 Aug 10 05:38 sys
drwxrwxrwt.  7 root root       181 Aug 25 11:35 tmp
drwxr-xr-x. 13 root root       155 Aug 10 05:38 usr
drwxr-xr-x. 18 root root       238 Aug 10 05:38 var
使用场景

docker export主要用来制作基础镜像,比如你从一个干净的系统镜像启动一个容器,然后安装一些软件或者删除修改一些软件后,使用docker export保存为一个基础镜像。然后,把这个镜像分发给测试或者开发等其他团队使用。线上环境不建议使用export出来的image,因为这个image可能安装了很多软件和特殊配置,但是这个只有制作这个image的操作人知道,会造成黑洞。

命令使用:

# docker container ls
CONTAINER ID        IMAGE                                                           COMMAND                  CREATED             STATUS              PORTS               NAMES
df541699c7cf        078114edb6be                                                    "python -c ‘import t…"   8 minutes ago       Up 8 minutes                            test

# docker export df541699c7cf > test.tar

# docker import test.tar test

docker save和docker load

作用

docker save主要对image进行持久化,而不是运行的container,把对应image为一个tar文件。如果这个运行的container中在image之上安装了一些软件等,通过save后保存的仍然为不带这些软件的image。而tar文件中保存的是分层的文件系统,上层的文件会覆盖下层的同名文件,一般一个image会有多个层组成。docker load加载这个tar包为一个image。

tar文件内容:

# tar xf test.tar
# ll
total 206156
drwxr-xr-x. 16 root root      4096 Sep 15 14:25 2d86d9ead00749413ef00cf7ee338512d6211a4ce12cd0088a556083c138c979
-rw-r--r--.  1 root root      2794 Aug 11 02:20 7e6257c9f8d8d4cdff5e155f196d67150b871bbe8c02761026f803a704acb3e9.json
-rw-r--r--.  1 root root       189 Jan  1  1970 manifest.json
使用场景

持久化保存image。例如要部署的客户服务器并不能连外网,你可以使用docker save将用到的镜像打个包,然后拷贝到客户服务器上使用docker load载入。

命令使用
# docker image ls
REPOSITORY                                                       TAG                    IMAGE ID            CREATED             SIZE
centos                                                           <none>                 7e6257c9f8d8        5 weeks ago         203MB

# docker save centos > test.tar

# docker load < test.tar

docker import和docker load区别

docker import:导入的是一个文件系统
docker load:导入的是一个分层的image

镜像制作

使用docker commit

作用

当我们运行一个容器的时候(如果不使用存储卷的话),我们做的任何文件修改都会被记录于容器存储层里。而Docker提供了一个docker commit命令,可以将容器的存储层保存下来成为镜像。换句话说,就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。以后我们运行这个新镜像的时候,就会拥有原有容器最后的文件变化。

使用场景

1,被***后保存现场,然后把image放到安全的环境做分析
2,开发测试环境制作镜像,一般不用于生产环境,生产环境的镜像推荐使用Dockerfile制作。因为,docker commit意味着所有对镜像的操作都是黑箱操作,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。而且,即使是这个制作镜像的人,过一段时间后也无法记清具体的操作,这种黑箱镜像的维护工作是非常痛苦的。而且,回顾之前提及的镜像所使用的分层存储的概念,除当前层外,之前的每一层都是不会发生改变的,换句话说,任何修改的结果仅仅是在当前层进行标记、添加、修改,而不会改动上一层。如果使用docker commit制作镜像,以及后期修改的话,每一次修改都会让镜像更加臃肿一次,所删除的上一层的东西并不会丢失,会一直如影随形的跟着这个镜像,这会让镜像更加臃肿。

命令使用
# docker history tutum/dnsutils
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
6cd78a6d3256        5 years ago         /bin/sh -c apt-get update && apt-get install…   11.6MB
<missing>           5 years ago         /bin/sh -c #(nop) CMD [/bin/bash]               0B
<missing>           5 years ago         /bin/sh -c sed -i ‘s/^#\s*\(deb.*universe\)$…   1.9kB
<missing>           5 years ago         /bin/sh -c echo ‘#!/bin/sh‘ > /usr/sbin/poli…   195kB
<missing>           5 years ago         /bin/sh -c #(nop) ADD file:a2d97c73fb08b9738…   188MB
<missing>           7 years ago                                                         0B                  Imported from -

# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tutum/dnsutils                                                             latest              6cd78a6d3256        5 years ago         200MB

# docker container ls
0473de2dc1aa        tutum/dnsutils                                                  "sleep infinity"         6 minutes ago         Up 6 minutes                              k8s_dnsutils_dnsutils_default_7d2e39b8-cc5d-412a-ab12-e75c8fb98792_2
# docker exec -it 0473de2dc1aa bash
root@dnsutils:/# pwd
/
root@dnsutils:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@dnsutils:/# echo "123" >> /root/add.txt
root@dnsutils:/# exit

# docker diff 0473de2dc1aa
C /root
A /root/.bash_history
A /root/add.txt

# docker commit --author "lee" --message "添加文件" 0473de2dc1aa tutum/dnsutils:latest
sha256:46d2535abda997d25a44239b17c5989ac4294b043b831095239ba073b3ec8ca5

# docker image ls tutum/dnsutils
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tutum/dnsutils      latest              46d2535abda9        2 minutes ago       200MB

使用Dockerfile

作用

Dockerfile是一个用来自动化构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,可用于通过指定docker image上需要的所有步骤来实现image制作的自动化。

使用场景

线上环境基本都是用Dockerfile完成镜像的自动化构建,主要有如下优点:
1,可以重复执行和构建
2,自动化构建镜像
3,可以对dockerfile做版本控制,方便管理

命令使用
# vim Dockerfile
# 1、第一行必须是 FROM 基础镜像信息
FROM ubuntu

# 2、维护者信息
MAINTAINER test test@qq.com

# 3、镜像操作指令
RUN apt-get update && apt-get install -y nginx && echo "\ndaemon off;" >> /etc/nginx/nginx.conf

# 4、容器启动执行指令
CMD /usr/sbin/nginx

# docker build -t nginx:v1 .

参考

https://www.runoob.com/docker/docker-dockerfile.html

docker镜像的导入导出和制作

标签:作用   efault   标记   min   container   持久   生产   环境   执行   

原文地址:https://blog.51cto.com/leejia/2534778

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!