文章目录

  • 简介
  • 一、dockerfile定制镜像
  • 1、dockerfile常用指令
  • 2、基本结构
  • 1)、基础镜像信息
  • 2)、维护者信息
  • 3)、镜像操作指令
  • 4)、容器启动时执行指令
  • 3、简单示例
  • 1)、将项目部署在tomcat的基础镜像中
  • 2)、将项目部署在centos镜像中
  • ①、目录结构
  • ②、命令部署项目
  • ③、构建镜像
  • ④、创建启动容器
  • 二、docker compose编排容器


简介

上一篇博客介绍通过将容器视为系统,在系统中安装项目必要的软件,配置环境变量来部署项目
此博客通过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

延迟构建命令的执行

docker service文件 dockersfile_docker service文件

2、基本结构

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

1)、基础镜像信息

指明基础镜像以及版本

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

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

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

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

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

如1中的 RUN、ENTRYPOINT命令

3、简单示例

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

# 维护者信息

# 镜像操作指令
# 将打包的项目复制到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文件,并将打包好的项目放在同一路径下

docker service文件 dockersfile_java_02

②、命令部署项目

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

FROM centos
//我用的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/

构建成功

docker service文件 dockersfile_java_03


需要上传镜像到 dockerhub 或 阿里云

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

运行结果如下

docker service文件 dockersfile_java_04


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

docker service文件 dockersfile_java_05

二、docker compose编排容器

这篇篇幅已经很长了,docker compose编排容器可以参考我的另一篇博客