docker制作ssm镜像(二)dockerfile
文章目录简介一、dockerfile定制镜像1、dockerfile常用指令2、基本结构1)、基础镜像信息2)、维护者信息3)、镜像操作指令4)、容器启动时执行指令3、简单示例1)、将项目部署在tomcat的基础镜像中2)、将项目部署在centos镜像中①、目录结构②、命令部署项目③、构建镜像④、创建启动容器二、docker compose编排容器简介上一篇博客介绍通过将容器视为系统,在系统中安装
文章目录
简介
上一篇博客介绍通过将容器视为系统,在系统中安装项目必要的软件,配置环境变量来部署项目
链接: 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,一个dockerfile存在多个cmd,仅最后一个生效 |
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
.
更多推荐
所有评论(0)