添加文件
1 2 3 4 5 6 |
例如: ADD my.cnf /etc/mysql or ADD my.cnf /etc/mysql/ 以上两条命令均可以将my.cnf文件添加到/etc/mysql文件夹下面。 |
添加文件夹
Dockerfile添加文件夹,则必须镜像中存在和当前文件夹同名的文件夹才行。例如,我希望将当前目录下的views文件夹添加到docker镜像中的app文件夹下。也许你会采用这样的方式:
1 2 3 |
ADD views /app #错误的方式 ADD views /app/views #正确的方式 |
也就是说:镜像中存在和当前需要拷贝或添加的文件夹同名的文件夹时,才能够拷贝或添加成功。
声明环境变量:
ENV :在docker 启动容器的时候传递给容器的环境变量
1 2 3 4 5 6 7 |
ENV JAVA_HOME=/opt/jdk1.8.0 #设置(容器启动时的)环境变量 ENV JRE_HOME=$JAVA_HOME/jre ENV PATH=$JAVA_HOME/bin:$PATH ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib 注意:(建议用一层环境变量,可以使用反斜杠换行) |
ARG: build过程当中,传递给build 的参数(参数)
1 2 |
ARG xxx=/opt/demo ARG xxx=/opt/demo2 |
运行镜像
RUN :是在build命令的的过程当中运行的(只要定义的RUN都会被运行)
CMD:是在docker run启动镜像的过程中运行的(只能定义一个,定义多个没用)
ENTRYPOINT:只会运行cmd,如果有这个,cmd就没用了
用户身份
USER:用于指定运行image时的或运行Dockerfile中任何RUN,CMD,或ENTRYPOINT指令的程序是的用户名或者UID
健康状态检测
HEALTHCHECK:
1 2 |
HEALTHCHECK --interval=5m --timeout=3s \ #检测试剂5分钟,超时时间3秒钟 CMD curl -f http://loclahost/ || exit 1 #检测命令,如果成功就ok,错误就返回1并且退出 |
挂载
VOLUME
1 |
VOLUME [ "/data" ] #将这个目录作为存储卷进行挂载 |
下面是完整构建镜像代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
FROM centos:7 #你的war/jar包要放的系统镜像,也可以是你自制的本地镜像id 例如:FROM e28fcf3c832f ENV container docker #设置环境变量 WORKDIR /opt/ #切换到镜像里某个目录 RUN mkdir jdk1.8.0 RUN mkdir apache-tomcat-7.0 ADD jdk1.8.0 /opt/jdk1.8.0 ADD apache-tomcat-7.0 /opt/apache-tomcat-7.0 ADD hello.war /opt/apache-tomcat-7.0/webapps ENV JAVA_HOME=/opt/jdk1.8.0 ENV JRE_HOME=$JAVA_HOME/jre ENV PATH=$JAVA_HOME/bin:$PATH ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \ systemd-tmpfiles-setup.service ] || rm -f $i; done); \ rm -f /lib/systemd/system/multi-user.target.wants/*;\ rm -f /etc/systemd/system/*.wants/*;\ rm -f /lib/systemd/system/local-fs.target.wants/*; \ rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ rm -f /lib/systemd/system/basic.target.wants/*;\ rm -f /lib/systemd/system/anaconda.target.wants/*; VOLUME [ "/sys/fs/cgroup" ] #将这个目录作为存储卷进行挂载 CMD ["/usr/sbin/init"] #执行shell命令 EXPOSE 8088 #就是将容器的对应端口服务公开给外界访问,而EXPOSE仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射。 ENTRYPOINT ["/opt/apache-tomcat-7.0/bin/catalina.sh","run"] #和CMD差不多,都是运行指令之类 |
1 2 3 4 5 |
docker build . -t demo:v1.0 #构建镜像并且给镜像打上标签。不打标签就是原始的文字码 启动容器 docker run --name myapp --net bridge -it demo:v1.0 ... |
- 本文固定链接: https://www.yoyoask.com/?p=3820
- 转载请注明: shooter 于 SHOOTER 发表