docker可以帮助我们快速部署安装需要的软件,比如mysql,nginx,elk等,都只需要简单的docker pull
和docker run
等简单命令即可,但是为了满足更多需求,一些个人应用的docker镜像,就需要用dockerfile
来创建。
一. Dockerfile入门
Dockerfile的几个核心命令
FROM
镜像的运行环境,即基础镜像是谁
MAINTAINER
镜像的维护者信息
RUN
基础镜像需要执行哪些命令
ADD
添加文件到镜像中,会自动解压,以及下载网络URL
COPY
拷贝文件或目录到镜像,类似ADD,但不会解压与下载网络URL
WORKDIR
设置工作目录,即cd命令
VOLUME
设置挂载主机目录
EXPOSE
设置容器运行时开放的端口
CMD
启动容器需要的命令
1. FROM
指定构建的镜像的运行环境
FROM centos:7
2. MAINTAINER
指定镜像的维护者与联系信息
MAINTAINER AntzUhl
3. RUN
构建镜像时执行的命令,此处我们可以安装容器需要的工具
直接添加命令
RUN yum install wget
参数拼接命令
RUN ["yum", "install", "wget"]
另外还可以执行其他需要的命令,比如clone库
RUN git clone git@github.com:CasterWx/terraria-docker-server.git
4. ADD
拷贝文件或者目录到镜像中,会自动解压压缩包与下载网络URL到目标地址,可以拷贝要执行的jar或者软件包,之后再使用CMD启动
格式:ADD
ADD antzuhl.jar /optADD http://antzuhl.cn/download/antzuhl.jar /opt
5. COPY
类似于ADD,但是只是拷贝,不会有其他操作。
COPY antzuhl.jar /opt
6. WORKDIR
为RUN,CMD,COPY,ADD等命令设置工作目录
WORKDIR /opt
7. VOLUME
指定容器挂载点到宿主机的目录,类似于docker run
时-v参数
VOLUME ["/opt/antzuhl"]
8. EXPOSE
指定容器运行的服务端口
EXPOSE 7777
9. ENV
配置容器内环境变量信息
ENV MYSQL_ROOT_PASSWORD 123456ENV JAVA_HOME /usr/local/jdk1.8.0_45
10. CMD
启动容器时执行的命令,用于启动容器内的软件包等,同样支持使用数组参数
CMD ["./opt/terraria/terra_script.sh","start"]CMD ./opt/terraria/terra_script.sh start
11. ENTRYPOINT
ENTRYPOINT与CMD命令类似,有多个ENTRYPOINT时,容器启动只会执行最后一个
ENTRYPOINT /bin/bash -C '/start.sh'
二. Dockerfile实战Spring Boot项目
创建一个最基础的Spring boot项目,Dockerfile为我编写的镜像创建Dockerfile文件,apache-maven压缩包为准备的maven包,通过ADD命令添加到镜像内,sell为一个简单的Spring boot代码,端口8080。
# 基础镜像,运行在一个拥有java的环境FROM williamyeh/java8:latest# 维护者信息MAINTAINER AntzUhl # 将maven包添加到镜像内ADD apache-maven-3.3.9-bin.tar.gz /usr/local/bin# 配置maven相关环境变量RUN export PATH=apache-maven-3.3.9/bin:$PATHRUN export PATH=/usr/local/bin/apache-maven-3.3.9/bin:$PATHRUN ln -s /usr/local/bin/apache-maven-3.3.9/bin/mvn /usr/local/bin/mvnRUN ls -l /usr/local/binRUN echo $PATH# 开放端口8080EXPOSE 8080# 创建目录RUN mkdir /opt/sell# 把代码拷贝到创建的目录ADD sell/ /opt/sell# 设置运行环境WORKDIR /opt/sell# mvn打包RUN mvn clean install# 执行打包好的jar文件CMD java -jar target/sell.jar
完成后使用docker build -t sell:test .
开始创建镜像
sell:test为镜像名称,.
代表当前目录。
现在就可以使用docker run
来创建镜像,访问localhost:8080即可。
三. Dockerfile实战创建泰拉瑞亚服务器
此外,还可以使用dockerfile来帮助我们简化一些常用的部署操作,比如泰拉瑞亚服务器的部署
# 基础镜像,centos7FROM centos:7MAINTAINER AntzUhl # 执行用户rootUSER root# 安装依赖RUN yum -y updateRUN yum -y install screen# 开放端口EXPOSE 7777RUN mkdir /opt/terraria/ADD terraria/ /opt/terraria/# 给执行脚本权限RUN chmod 775 /opt/terraria/terra_script.sh# 执行CMD ["./opt/terraria/terra_script.sh","start"]
可参考我的一个泰拉脚本: https://github.com/CasterWx/terraria-docker-server
使用docker build -t terraria:test .
构建镜像即可。