标签:作用 efault 标记 min container 持久 生产 环境 执行
镜像导入导出对当前的容器文件系统创建一个快照,并持久化为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主要对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:导入的是一个分层的image
当我们运行一个容器的时候(如果不使用存储卷的话),我们做的任何文件修改都会被记录于容器存储层里。而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是一个用来自动化构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,可用于通过指定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
标签:作用 efault 标记 min container 持久 生产 环境 执行
原文地址:https://blog.51cto.com/leejia/2534778