指令格式

#注释

FROM :基础镜像
MAINTAINER:镜像的作者信息
RUN :指定(构建过程中)当前镜像中运行的命令
EXPOSE :指定运行镜像的容器应用程序所使用的端口
容器但不会打开,需要手动打开映射的端口号
 
docker run -p 80 -d 用户名/名字 nginx -g "daemon off;" 前台运行方式
 
EXPOSE 指定容器需要映射到宿主机器的端口
设置指令,该指令会将容器中的端口映射成宿主机器中的某个端口。当你需要访问容器的时候,可以不是用容器的IP地址而是使用宿主机器的IP地址和映射后的端口。要完成整个操作需要两个步骤,
首先在Dockerfile使用EXPOSE设置需要映射的容器端口,然后在运行容器的时候指定-p选项加上EXPOSE设置的端口,这样EXPOSE设置的端口号会被随机映射成宿主机器中的一个端口号。
也可以指定需要映射到宿主机器的那个端口,这时要确保宿主机器上的端口号没有被使用。EXPOSE指令可以一次设置多个端口号,相应的运行容器的时候,可以配套的多次使用-p选项。
用法 EXPOSE <port> [<port>...] 
# 映射一个端口
EXPOSE port1
# 相应的运行容器使用的命令
docker run -p port1 image # 映射多个端口
EXPOSE port1 port2 port3
# 相应的运行容器使用的命令
docker run -p port1 -p port2 -p port3 image
# 还可以指定需要映射到宿主机器上的某个端口号
docker run -p host_port1:port1 -p host_port2:port2 -p host_port3:port3 image
 
镜像的目录和文件
CMD :容器启动时的运行的指令 /bin/bash会覆盖 cmd    CMD 只能有一个
在 Dockerfile 中的 CMD 命令在容器启动时会执行指定的命令,也可以在启动容器时,可以通过 /bin/bash 覆盖 CMD命令
FROM busybox:ubuntu-14.04
RUN touch /osforce.sh
CMD ["ls","-al","/osforce.sh"]
## 覆盖cmd 命令
[root@www docker-file]# docker run -t test/of8 echo "my ke"
 
ENTRYPOINT : /bin/bash不会执行 
这个命令不会覆盖 在 Dockerfile 中指定的命令,当定义了 ENTRYPOINT 以后, CMD 只能够作为参数进行传递
当定义多个ENTRYPOINT  时,最后一个生效,
FROM busybox:ubuntu-14.04
RUN touch /osforce.sh
ENTRYPOINT ["ls","-al"]
CMD ["/osforce.sh"]

CMD 这时的值为 ENTRYPOINT 命令的参数

在启动容器时,可以 传入参数覆盖 CMD 的参数  / 这个参数传给 ENTRYPOINT 命令

[root@www docker-file]# docker run -t test/of8 /

CMD 命令可用指定 Docker 容器启动时默认的命令,例如我们上面例子提到的 docker run -it ubuntu:latest sh -c '/bin/bash' 。其中 sh -c '/bin/bash'  就是通过手工指定传入的 CMD。如果我们不加这个参数,那么容器将会默认使用 CMD 指定的命令启动。ENTRYPOINT 是什么呢?从字面看是进入点。没错,它就是进入点。ENTRYPOINT 用来指定特定的可执行文件、Shell 脚本,并把启动参数或 CMD 指定的默认值,当作附加参数传递给 ENTRYPOINT。

不好理解是吧?我们举一个例子:

ENTRYPOINT ['/usr/bin/mysql']
CMD ['-h 192.168.100.128', '-p']

假设这个镜像内已经准备好了 mysql-client,那么通过这个镜像,不加任何额外参数启动容器,将会给我们一个 mysql 的控制台,默认连接到192.168.100.128 这个主机。然而我们也可以通过指定参数,来连接别的主机。但是不管无论如何,我们都无法启动一个除了 mysql 客户端以外的程序。因为这个容器的 ENTRYPOINT 就限定了我们只能在 mysql 这个客户端内做事情。这下是不是明白了~

ADD :包含类似tar解压的功能
当参数是 url 时,可以下载到指定目当
ADD  url  /apache/http-2.tar.gz   将 指定的 url  文件下载到 容器中的 /apache/ 目录中 ,并将文件名命为http-2.tar.gz,在启动容器时,就可以看到 /apache/下的文件

 
COPY  将宿主机的文件拷贝到image中的指定目录中,启动容器后,即可查看
 
 
VOLUME
 
 
 
 这时的 数据卷不会真正的创建,只有当启动容器时,才会创建

 
 
镜像构建和运行时的环境设置
WORKDIR :工作目录 类似 cd 
用来指定当前工作目录,当使用相对目 录的情况下,采用上一个 WORKDIR 指定的目录作为基准
 
功能:下载  切换目录 解压 查看目录

 
ENV :环境变量
用来设置环境变量,后续的 RUN 可以使用它所创建的环境变量
 
 
USER :以什么用户运行
指定 UID 或者 username ,来决定运行 RUN 指令的用户
 
 
为镜像触发器
ONBUILD :当一个镜像被其他镜像作为基础镜像时执行会在构建过程中插入指令

定义镜像,当其它镜像基于这个镜像时,就会执行 ONBUILD 中的指令,即创建文件

 

FROM test/osf7 就是上面创建的镜像 ,构建这个镜像时,会先执行上定义的 ONBUILD 指令

 
不使用构建缓存
docker build --no-cache -t="名字"  文件地址
EVN REFRESH_DATE 2015-01-02 :如果
 
镜像的构建过程历吏
docker history  镜像名
 
Dockerfile构建过程
1.从基础镜像运行一个容器
2.执行一条指令,对容器做出修改
3.执行类似 docker commit 的操用,提交一个新的镜像层
4.再基于刚提交的镜像运行一个新容器
5.执行dockerfile 中的下一条指令,直至所有指令执行完毕。
 
 

创建Dockerfile,构建jdk+tomcat环境

Dockerfile文件

# Pull base image
FROM ubuntu:13.10 MAINTAINER zing wang "zing.jian.wang@gmail.com" # update source
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"> /etc/apt/sources.list
RUN apt-get update # Install curl
RUN apt-get -y install curl # Install JDK 7
RUN cd /tmp && curl -L 'http://download.oracle.com/otn-pub/java/jdk/7u65-b17/jdk-7u65-linux-x64.tar.gz' -H 'Cookie: oraclelicense=accept-securebackup-cookie; gpw_e24=Dockerfile' | tar -xz
RUN mkdir -p /usr/lib/jvm
RUN mv /tmp/jdk1.7.0_65/ /usr/lib/jvm/java-7-oracle/ # Set Oracle JDK 7 as default Java
RUN update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-7-oracle/bin/java 300
RUN update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-7-oracle/bin/javac 300 ENV JAVA_HOME /usr/lib/jvm/java-7-oracle/ # Install tomcat7
RUN cd /tmp && curl -L 'http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.8/bin/apache-tomcat-7.0.8.tar.gz' | tar -xz
RUN mv /tmp/apache-tomcat-7.0.8/ /opt/tomcat7/ ENV CATALINA_HOME /opt/tomcat7
ENV PATH $PATH:$CATALINA_HOME/bin ADD tomcat7.sh /etc/init.d/tomcat7
RUN chmod 755 /etc/init.d/tomcat7 # Expose ports.
EXPOSE 8080 # Define default command.
ENTRYPOINT service tomcat7 start && tail -f /opt/tomcat7/logs/catalina.out

  

tomcat7.sh

export JAVA_HOME=/usr/lib/jvm/java--oracle/
export TOMCAT_HOME=/opt/tomcat7 case $ in
start)
sh $TOMCAT_HOME/bin/startup.sh
;;
stop)
sh $TOMCAT_HOME/bin/shutdown.sh
;;
restart)
sh $TOMCAT_HOME/bin/shutdown.sh
sh $TOMCAT_HOME/bin/startup.sh
;;
esac
exit

构建镜像

docker build -t zingdocker/jdk-tomcat .
docker run -d -p : zingdocker/jdk-tomcat
 
 

6.0docker Dockerfile文件的更多相关文章

  1. 【Docker】(6)---Dockerfile文件

    springboot项目打包镜像中的Dockerfile文件 在讲Dockerfile文件之前应该先讲下maven的一个插件叫:dockerfile-maven-plugin.他们是组合一起用的 一. ...

  2. docker18.09.5 Dockerfile文件编写

    Dockerfile命令详解(超全版本)  https://www.cnblogs.com/dazhoushuoceshi/p/7066041.html 案例1 dockerfile文件内容: FRO ...

  3. Dockerfile文件详解

    什么是dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档.可以使用在命令行中调用任何命令. Docker通过读取Dockerfile中的指令自动生成映像. docker ...

  4. Docker(十)-Docker创建DockerFile文件

    制作Docker image 有两种方式: 使用 Docker container,直接构建容器,再导出成 image 使用. 是使用 Dockerfile,将所有动作写在文件中,再 build 成 ...

  5. ASP.NET CORE做的网站运行在docker上(不用dockerfile文件部署)

    按网上的做法用dockerfile文件是可以弄得出来的,http://www.docker.org.cn/article/119.html, 不过我想把网站文件放在外面硬盘目录,再映射进去,这样只要在 ...

  6. Docker定制容器镜像(利用Dockerfile文件)

    1.创建Dockerfile文件 新建一个目录,在里面新建一个dockerfile文件(新建一个的目录,主要是为了和以防和其它dockerfile混乱 ) [root@docker01 myfiles ...

  7. 使用Dockerfile文件制作centos6.8基础镜像,基于centos基础镜像的ssh远程登录镜像,jdk1.8镜像,tomcat镜像,elasticsearch镜像等等

    一.首先制作一个centos6.8的裸机镜像 创建一个干净的目录: [root@docker centos6.]# ls c68-docker.tar.xz Dockerfile Dockerfile ...

  8. asp.net core中DockerFile文件中的COPY

    今天在ubuntu系统中使用docker部署asp.net core时遇到了一个问题,docker build 的时候总会在最后一步提示 lstat obj/Docker/publish: no su ...

  9. 使用Dockerfile文件构建基于centOS系统的tomcat镜像

    以下是Dockerfile的内容: #基础镜像 FROM centos #维护人员信息 MAINTAINER weigs "weigs1231@gmail.com" #设置工作目录 ...

随机推荐

  1. 【Quartz.net】- Cron表达式

    一.结构 corn从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份 二.各字段的含义   字段 允许值 允许的特殊字符 秒(Seconds) 0~59的整数 , - * / ...

  2. parse_str — 将字符串解析成多个变量

    $arr2="first=value1&second=value2&third[]=value3&third[]=value4"; parse_str($a ...

  3. ubuntu 只有客人会话登录(第一次深刻感受文件权限的威力 )

    为了测试docker的挂载权限,把宿主机的/etc/passwd文件挂载到了虚机当中,进入虚机想看下能不能直接对我宿主机上的文件进行操作,把/etc/passwd删掉了最后十行...结果宿主机上的/e ...

  4. java zip 压缩与解压

    java zip 压缩与解压 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java. ...

  5. ConcurrentHashMap弱一致性

    [原文链接] 本文将用到Java内存模型的happens-before偏序关系(下文将简称为hb)以及ConcurrentHashMap的底层模型相关的知识.happens-before相关内容参见: ...

  6. bootstrap-datetimepicker 开始时间与结束时间互相约束

    JS $("#start").datetimepicker({ keyboardNavigation: false, language: 'zh-CN', forceParse: ...

  7. 使用getRequestDispatcher跳转后 能获取到request.setAttribute数据 分析

  8. BZOJ 1930 吃豆豆(费用流)

    首先这题的两条线不相交的限制可以去掉,因为如果相交的话把点换一换是不影响最终结果的. 剩下的费用流建图是显然的,把点拆为两个,建立超级源点s和源点ss汇点t,连边(s,ss,2,0). 对于每个点,连 ...

  9. Java语言有哪些特点?

    1)简单 如果同学们学过C++语言,就会感觉Java眼熟,因为Java中许多基本语句的语法和C++是一样的,像常用的循环语句.控制语句等和C++几乎相同.需要注意的是,Java和C++时两种完全不同的 ...

  10. BZOJ4810 Ynoi2017由乃的玉米田(莫队+bitset)

    多组询问不强制在线,那么考虑莫队.bitset维护当前区间出现了哪些数,数组记录每个数的出现次数以维护bitset.对于乘法,显然应有一个根号范围内的因子,暴力枚举即可.对于减法,a[i]-a[j]= ...