标签:
为了方便整体产品的发布,希望通过docker实现增量发布。大致的思路如下:
is-there-a-way-to-add-only-changed-files-to-a-docker-image-as-a-new-layer-with。本博文对这种方式进行了尝试,与此同时简单介绍如何通过Dockerfile来创建Docker镜像。
官方的解释:
- 镜像:An image is a filesystem and parameters to use at runtime. It doesn’t have state and never changes.
- 容器:A container is a running instance of an image.
- 引擎:When you ran the command, Docker Engine:
(1)checked to see if you had the hello-world software image;
(2)downloaded the image from the Docker Hub (more about the hub later);
(3)loaded the image into the container and “ran” it
我们之所以使用docker,就如同他的logo中的集装箱一样:通过docker镜像来创建和分发软件,即
Docker Engine lets people (or companies) create and share software through Docker images. Using Docker Engine, you don’t have to worry about whether your computer can run the software in a Docker image — a Docker container can always run it.
这里就不详细介绍每个目录、每个文件的含义了,后续有时间再补充。
FROM <image> #只给出基础镜像名称
FROM <image>:<tag>#给出制定的tag标签
FROM <image>@<digest>
如果镜像在本地存在会优先使用本地镜像,如果不存在需要从官方仓库中pull下来。
我本地已经将centos:latest最新镜像拉了下来,所以对Dockerfile的build会很迅速,我本地的Dockerfile内容如下:
FROM centos #默认tag=latest,即我本地的centos镜像
MAINTAINER zssure@linkingmed.com
运行过程如下:
此时docker images查看本地镜像,结果如下:
有些时候使用docker来发布服务或软件时,需要将本地的项目拷贝到docker镜像中,ADD指令就是完成这个工作的。
例如我本地的目录结构如下
现在希望将上文提到的addfiles目录下的医学影像文件拷贝到镜像中,新的Dockerfile如下:
在Dockerfile当前目录运行,竟然出现了错误:Forbidden path outside of the build context: ../addfiles ()
出现该错误的原因是因为跟docker的build context有关,上述docker build指令会将路径作为build context,然而../addfiles并不包含在上述build context之内。所以两种解决方案:
1. 将addfiles目录拷贝到Dockerfile所在的目录
2. 返回到上一级运行docker build,(详情参考How to include files outside of Docker’s build context?)
具体结果如下:
【备注】:注意此时需要修改之前的Dockerfile,将ADD ../addfiles /root/addfiles指令改成ADD ./addfiles /root/addfiles
此刻可以看到本地多了一个镜像:
虽然从上图镜像的大小我们可以推断出结果应该是成功的,但是还是使用docker run命令行启动一个容器进入该镜像确认一下是否已经将addfiles添加成功:
由上图所示已经成功。
COPY指令与ADD指令类似,同样可以将本地文件拷贝到镜像内,目前我了解的唯一区别是ADD可以添加src为URL的源数据到镜像,而COPY只能是本地数据。
本地运行测试结果如下:
同样进入到容器内部查看一下:
结果完全正确。
作者:zssure@163.com
时间:2016-07-24
标签:
原文地址:http://blog.csdn.net/zssureqh/article/details/52009043