docker制作ssm镜像(二)dockerfile

简介

上一篇博客介绍通过将容器视为系统,在系统中安装项目必要的软件,配置环境变量来部署项目
链接: https://blog.csdn.net/qq_41538097/article/details/107058687.
此博客通过dockerfile定制镜像,最后通过dockercompose编排容器,最终达到一键部署目的。

一、dockerfile定制镜像

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

1、dockerfile常用指令

命令 简单说明
FROM 定制的镜像都是基于 FROM 的镜像,如FROM nginx后续的操作都是基于 nginx
RUN 用于执行后面跟着的命令行命令。shell 格式:exec 格式:run每执行一次会创建一层建议用&& 符号连接命令,这样执行后,只会创建 1 层镜像
COPY 从上下文目录中复制文件或者目录到容器里指定路径
ADD 类似COPY,ADD会 自动解压压缩包,推荐使用COPY
CMD CMD 在docker run 时运行,RUN 是在 docker build,存在多个仅最后一个生效
ENTRYPOINT 类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,如果存在多个,仅最后一个生效
ENV 设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量
ARG 构建参数,ARG 设置的环境变量仅对 Dockerfile 内有效
VOLUME 定义匿名数据卷
EXPOSE 仅仅只是声明端口
WORKDIR WORKDIR 指定工作目录,必须是提前创建好的
USER 指定执行后续命令的用户和用户组(用户和用户组必须提前已经存在)
HEALTHCHECK 指定某个程序或者指令来监控 docker 容器服务的运行状态
ONBUILD 延迟构建命令的执行

命令详解参考如下博客链接
链接: https://www.cnblogs.com/panwenbin-logs/p/8007348.html.
在这里插入图片描述

2、基本结构

DockerFile分为四部分组成:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令

1)、基础镜像信息

指明基础镜像以及版本

格式:
  FROM <image>
  FROM <image>:<tag>
  FROM <image>@<digest>
示例:
  FROM mysql:5.6
2)、维护者信息

说明镜像的创造者,通常会包含联系方式

格式:
    MAINTAINER <name>
示例:
    MAINTAINER Jasper Xu
    MAINTAINER sorex@163.com
3)、镜像操作指令

如1中介绍的FROM、RUN、COPY等指令

4)、容器启动时执行指令

如1中的 RUN、ENTRYPOINT命令

3、简单示例

1)、将项目部署在tomcat的基础镜像中
# 基础镜像  tomcat:least
FROM tomcat

# 维护者信息
MAINTAINER 781990434@qq.com

# 镜像操作指令
# 将打包的项目复制到tomcat文件夹中
COPY ssm.war /usr/tomcat/webapps/
# 映射端口
EXPOSE 8080

# 容器启动时执行指令
# 容器启动时启动tomcat并打印日志
ENTRYPOINT /usr/tomcat/bin/startup.sh && tail -f /usr/tomcat/logs/catalina.out
2)、将项目部署在centos镜像中
①、目录结构

创建dockerfiles文件,并将打包好的项目放在同一路径下
在这里插入图片描述

②、命令部署项目

vi dockerfiles 打开项目写入如下命令

FROM centos
MAINTAINER 781990434@qq.com
//我用的mkdir创建切换工作目录,容器内部生成/root/DockerFile/目录,也可以使用 WORKDIR ,yum 如果不添加 -y 会失败,-y代表安装过程中全选yes
RUN mkdir -p /root/DockerFile/ && cd /root/DockerFile/ \
        && yum update -y \
        && yum install wget -y \
        && wget "https://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.57/bin/apache-tomcat-8.5.57.tar.gz" \
        && tar -zxvf apache-tomcat-8.5.57.tar.gz
        &&  wget "https://mirrors.huaweicloud.com/java/jdk/8u171-b11/jdk-8u171-linux-x64.tar.gz" \
        && tar -zxvf jdk-8u171-linux-x64.tar.gz
COPY ssm.war /root/DockerFile/apache-tomcat-8.5.57/webapps/
EXPOSE 8081
//配置Java环境变量
ENV JAVA_HOME=/root/DockerFile/jdk1.8.0_171
ENV PATH=$JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENTRYPOINT /root/DockerFile/apache-tomcat-8.5.57/bin/startup.sh && tail -F /root/DockerFile/apache-tomcat-8.5.57/logs/catalina.out

想替换tomcat版本可以在https://tomcat.apache.org/.查找
想替换jdk版本可以在https://repo.huaweicloud.com/java/jdk/.查找,注意替换环境变量

③、构建镜像
// -t 为镜像起名字设置版本, -f 文件非dockerfile需要用别名, /root/DockerFile/文件存放目录
docker build -t ssm_image:1.0 -f dockerfiles /root/DockerFile/

构建成功
在这里插入图片描述
需要上传镜像到 dockerhub 或 阿里云 的参考博客
链接: https://blog.csdn.net/qq_41538097/article/details/106861717.

④、创建启动容器
docker run -d --name ssm-test -p 4000:8081 --restart always ssm_image:1.0

运行结果如下
在这里插入图片描述
注意:因为我想使用宿主机的4000端口映射容器8081端口,但 tomcat 默认为8080端口,所以在容器启动之后,我进入容器,修改了 tomcat 的server.xml,将默认端口修改为8081,如下可以正常访问
在这里插入图片描述

二、docker compose编排容器

这篇篇幅已经很长了,docker compose编排容器参考我的另一篇博客
链接: https://blog.csdn.net/qq_41538097/article/details/107224883
.

猜你喜欢

转载自blog.csdn.net/qq_41538097/article/details/107196797