自己制作容器镜像,主要有两种方法:
如果后续镜像没有变化,可采用方法一制作镜像。
具体操作如下:
docker run -it centos
git clone https://github.com/lh3/bwa.git
cd bwa;make
请预先安装好Git,并检查本机是否有ssh key设置。
如果后续镜像经常变更(例如某个软件更新版本),则需要采用方法二制作镜像。若仍采用方法一制作镜像,则每次变更都需要重新执行方法一的命令,操作过程比较繁琐,所以建议使用自动化制作镜像的方法。
其实就是将方法一制作镜像的方法,用文件方式写出来(文件名为DockerFile)。然后执行:docker build -t test/image:tag.命令(命令中“.”表示DockerFile文件的路径),自动完成镜像制作。
简单的DockerFile示例:
如果依赖外部网络,请搭建网络环境,并保证网络可用。
#Version 1.0.1 FROM centos:latest #设置root用户为后续命令的执行者 USER root #执行操作 RUN yum update -y RUN yum install -y java #使用&&拼接命令 RUN touch test.txt && echo "abc" >>abc.txt #对外暴露端口 EXPOSE 80 8080 1038 #添加网络文件 ADD https://www.baidu.com/img/bd_logo1.png /opt/ #设置环境变量 ENV WEBAPP_PORT=9090 #设置工作目录 WORKDIR /opt/ #设置启动命令 ENTRYPOINT ["ls"] #设置启动参数 CMD ["-a", "-l"] #设置卷 VOLUME ["/data", "/var/www"] #设置子镜像的触发操作 ONBUILD ADD . /app/src ONBUILD RUN echo "on build excuted" >> onbuild.txt
详细的操作步骤可以参考:《容器镜像服务 最佳实践》。
指定待扩展的父级镜像(基础镜像)。除注释之外,文件开头必须是一个FROM指令,后面的指令便在这个父级镜像的环境中运行,直到遇到下一个FROM指令。通过添加多个FROM命令,可以在同一个Dockerfile文件中创建多个镜像。
修改镜像的命令,常用来安装库、安装程序以及配置程序。一条RUN指令执行完毕后,会在当前镜像上创建一个新的镜像层,接下来对的指令会在新的镜像上继续执行。RUN 语句有两种形式:
运行容器时,通过设置参数-P(大写)即可将EXPOSE里所指定的端口映射到主机上其他的随机端口,其他容器或主机可以通过映射后的端口与此容器通信。
您也可以通过设置参数-p(小写)将Dockerfile中EXPOSE中没有列出的端口设置成公开。
向新镜像中添加文件,这个文件可以是一个主机文件,也可以是一个网络文件,也可以使一个文件夹。
在镜像里创建一个指定路径(文件或文件夹)的挂载点,这个容器可以来自主机或者其它容器。多个容器可以通过同一个挂载点共享数据,即便其中一个容器已经停止,挂载点也仍可以访问。
为接下来执行的指令指定一个新的工作目录,这个目录可以是绝对目录,也可以是相对目录。根据需要,WORKDIR可以被多次指定。当启动一个容器时,最后一条WORKDIR指令所指的目录将作为容器运行的当前工作目录。
设置容器运行的环境变量。在运行容器的时候,通过设置-e参数可以修改这个环境变量值,也可以添加新的环境变量。
例如:
docker run -e WEBAPP_PORT=8000 -e WEBAPP_HOST=www.example.com ...
用来指定容器启动时的默认运行的命令。区别在于:运行容器时添加在镜像之后的参数,对ENTRYPOINT是拼接,CMD是覆盖。
docker run gutianlangyu/test --entrypoint echo "hello world"
触发器指令。构建镜像时,容器引擎的镜像构建器会将所有的ONBUILD指令指定的命令保存到镜像的元数据中,这些命令在当前镜像的构建过程中并不会执行。只有新的镜像使用FROM指令指定父镜像为当前镜像时,才会触发执行。
使用FROM以这个Dockerfile构建出的镜像为父镜像,构建子镜像时:
ONBUILD ADD . /app/src:自动执行ADD . /app/src
背景介绍 公司业务系统做优化改造,同时为了能够实现全链路监控,需收集所有业务...
您可以添加共享,将已有模板共享给其他阿里云账号。本文以阿里云账号A将模板共享...
人体的8种感觉 我们都知道人体神经系统非常复杂 由各个末梢信号后经由脊髓、大脑...
物联网安全概述 物联网的本质,是从端到云的数据交互及计算过程。根据这个特点,...
服务器租用 : 双线服务器 和单线服务器如何区别? 双IP双线路实现方式是指在一...
您可以按照性能指标(如vCPU个数)为不同实例规格设置权重,即指定不同实例规格...
今天给大家介绍一个非常简单的设计模式,一学就会,非常好用。 这个模式叫做抽象...
红红火火的牛年春节期间,全国民众逛吃逛吃模式持续升温,美食、新衣、美妆、珠...
作者 | 吴彤 微博深度学习平台工程师 郝丽 微博深度学习平台工程师 导读:深度...
定制 小程序 多少费用?一般对于小程序功能要求多样、复杂的,会选择专门定制。...