文章目录
前言
docker流行的今天,许多项目在交付或者开源项目中都会附属一个东西-dockerfile,有了这个文件,你可以构建自己的镜像,在移植部署时,系统会自动帮你完成环境设置。方便简单
提示:以下是本篇文章正文内容,下面案例可供参考
一、dockerfile是什么?
Dockerfile是一个创建镜像所有命令的文本文件, 包含了一条条指令和说明, 每条指令构建一层, 通过docker build命令,根据Dockerfile的内容构建镜像,因此每一条指令的内容, 就是描述该层如何构建.有了Dockefile, 就可以制定自己的docker镜像规则,只需要在Dockerfile上添加或者修改指令, 就可生成docker 镜像.
二、基础命令
1.FROM
docker镜像类似于积木,是一层一层搭建而成。所以想要构建最终的镜像文件,那么需要使用基础镜像文件作为地基,本次目的是将可运行的jar包构建为镜像,那么使用openjdk作为基础镜像文件FROM openjdk:8
2.MAINTAINER
维护者信息,可以标注作者和邮箱MAINTAINER manc 827766234@qq.com
3.EXPOSE
docker容器内部端口EXPOSE 9527
3.COPY
将宿主机文件复制到docker容器下,宿主机文件目录必须和dockerfile文件目录下COPY package.json /usr/src/app
4.WORKDIR
配置工作目录,就是cd 到某个目录下执行命令WORKDIR /usr/data
5.VOLUME
目录挂载,将docker容器中的目录和宿主机目录挂载WORKDIR /usr/data /usr/local/tomcat
6.ENV
设置环境变量,如设置java环境变量,配置mysql账户密码ENV JAVA_HOME /opt/jdk
7.ENTRYPOINT
容器命令指令 ENTRYPOINT 的作用和用法和CMD一样,但是又不同: 1.CMD命令会被docker run的命令覆盖而ENTRYPOINT不会 2.CMD和ENTRYPOINT都存在时,CMD的指令变成了ENTRYPOIN的参数,并且此CMD提供的参数被docker run后面的命令覆盖 3.可以使用json写法和shell命令写法ENTRYPOINT ["java","-jar","-Xms256m","-Xmx512m","<jar包名>"]
三 示例
FROM openjdk:8
MAINTAINER manc 827766234@qq.com
WORKDIR /
EXPOSE 8080
ENTRYPOINT ["java","-jar","-Xms256m","-Xmx512m","<jar包名>"]
四 构建镜像
在dockerfile目录下移入需要构建的jar包,会默认使用当前目录的Dockerfile进行编译镜像,编译后的镜像名为imagename:v1
docker build -t imagename:v1 .
五 运行
以交互式方式启动容器,容器命名为contaniername,容器端口映射宿主机端口为8080,目录挂载data下
docker run -itd --name containername -p 8080:8080 -v /usr/data:usr/local/tomcat imagename bash
总结
dockfile解决了程序移植运行等问题,让程序交付后部署变得简单,但是这种方式在多个镜像部署和程序自动化运行时步骤变得繁琐,后面会出jenkins+dockerfile+.sh来实现自动化部署。