文章目录

  • 前言
  • 一、dockerfile是什么?
  • 二、基础命令
  • 1.FROM
  • 2.MAINTAINER
  • 3.EXPOSE
  • 3.COPY
  • 4.WORKDIR
  • 5.VOLUME
  • 6.ENV
  • 7.ENTRYPOINT
  • 三 示例
  • 四 构建镜像
  • 五 运行
  • 总结



前言

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来实现自动化部署。