ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Dockerfile

2022-07-30 13:33:23  阅读:197  来源: 互联网

标签:WORKDIR RUN 示例 CMD 镜像 Dockerfile


概述

Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile快速创建自定义的镜像。

基本结构
Dockerfile由一行行命令语句组成,并且支持以#开头的注释行。一般而言,Dockerfile分为四部分:基础
镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

例如:

## Dockerfile文件格式
# 1、第一行必须指定 基础镜像信息
FROM java:8
# 2、维护者信息
MAINTAINER baizhan baizhan@163.com
# 3、镜像操作指令
RUN echo "wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.55/bin/apachetomcat-9.0.55.tar.gz"
run tar -zxvf apache-tomcat-9.0.55.tar.gz -C /usr/local
# 4、容器启动执行指令
CMD /usr/local/tomcat/bin/catalina.sh

Dockerfile 四部分说明:
一开始必须要指明所基于的镜像名称, 关键字是FROM, 这是必须的.
接下来是维护者信息关键字是MAINTAINER, 非必须, 但良好的习惯有利于后期的职责明确.
后面是镜像操作指令, 如RUN等, 每执行一条RUN命令,镜像添加新的一层.
最后是CMD指令,来指明运行容器时的操作命令.

Dockerfile完全指南_构建镜像

简单示例
在一个空白的文本文件, 命名为Dockerfile
vim Dockerfile
Dockerfile文件内容:

#基础镜像
FROM centos
#维护者
MAINTAINER baizhan<baizhan@163.com>
#启动容器运行命令
CMD echo "hello Dockerfile"

示例2
Dockerfile文件内容:

FROM java:8
MAINTAINER WCC
CMD java -version
构建镜像

docker build -t 镜像名字:版本 .
.表示当前文件路径

WORKDIR
指令格式:
WORKDIR /usr/workdir
示例

WORKDIR /a (这时工作目录为/a)
WORKDIR b (这时工作目录为/a/b)
WORKDIR c (这时工作目录为/a/b/c)

示例

WORKDIR /OPT
RUN mkdir docker
WORKDIR /usr/local
RUN echo "test" > a.info

RUN
语法

# 1. shell执行
格式 RUN <command>
# 2. exec执行
格式 RUN ["executable", "param1", "param2"]

示例

WORKDIR /OPT
RUN mkdir docker
WORKDIR /usr/local
RUN echo "test" > a.info

RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以
在构建时指定--no-cache参数,如:docker build --no-cache
ADD
将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget。
指令格式:

ADD <src>... <dest>
ADD ["<src>",... "<dest>"] 用于支持包含空格的路径示例:

示例
添加所有以"hom"开头的文件
ADD hom* /mydir/
? 替代一个单字符,例如:"home.txt"
ADD hom?.txt /mydir/
添加 "test" 到 WORKDIR/relativeDir/
ADD test relativeDir
添加 "test" 到 /absoluteDir/
ADD test /absoluteDir/
COPY
语法
COPY <源路径> <目标路径>
示例
COPY ./start.sh /start.sh
CMD
构建容器后调用,也就是在容器启动时才进行调用。指定这个容器启动的时候要运行的命令只有最后一个会生效可被替换

CMD指令与RUN指令相似,也具有两种格式:
1. shell格式:CMD <命令>
2. exec格式: CMD ["可执行文件", "参数1", "参数2", …]

示例

CMD echo "This is a test." | wc -
CMD ["/usr/bin/wc","--help"]

USER
指定什么用户运行

USER user
USER user:group

VOLUME
用于指定持久化目录
示例

VOLUME ["/data"]
VOLUME ["/var/www", "/var/log/apache2"]

EXPOSE
指定于外界交互的端口
EXPOSE 80
EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口。
ENTRYPOINT
配置容器,使其可执行化。配合CMD可省去"application",只使用参数。
指定容器启动的要运行的命令,可以追加命令

ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2 (shell内部命令)

示例
ENTRYPOINT ["top", "-b"]
ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。

标签:WORKDIR,RUN,示例,CMD,镜像,Dockerfile
来源: https://www.cnblogs.com/Liguangyang/p/16534795.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有