暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Dockerfile编写指北

肥宅与画家 2021-06-25
705

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 <antzuhl1998@gmail.com>

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 opt
ADD 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 123456
ENV 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 <antzuhl998@gmail.com>

# 将maven包添加到镜像内
ADD apache-maven-3.3.9-bin.tar.gz usr/local/bin
# 配置maven相关环境变量
RUN export PATH=apache-maven-3.3.9/bin:$PATH
RUN export PATH=/usr/local/bin/apache-maven-3.3.9/bin:$PATH
RUN ln -s usr/local/bin/apache-maven-3.3.9/bin/mvn usr/local/bin/mvn
RUN ls -l usr/local/bin
RUN echo $PATH

# 开放端口8080

EXPOSE 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来帮助我们简化一些常用的部署操作,比如泰拉瑞亚服务器的部署

# 基础镜像,centos7
FROM centos:7
MAINTAINER AntzUhl <antzuhl1998@gmail.com>
# 执行用户root
USER root
# 安装依赖
RUN yum -y update
RUN yum -y install screen

# 开放端口
EXPOSE 7777

RUN 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 .
构建镜像即可。

文章转载自肥宅与画家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论