dockerfile如何快速构建容器(java服务)
常见的Docker容器构建方式就是基于现有的docker的基础镜像在此基础上添加一些容器启动的命令和程序包文件然后使用docker build镜像生成常见的基础镜像可以在docker的国内镜像源地址进行下载以下就是我们国内常见的有加速的镜像源地址阿里云专属源 公共备用源中国科学技术大学开源镜像站“registry-mirrors”: [“https://docker.m.daocloud.io”,“https://docker.1ms.run”,“https://docker.mirrors.ustc.edu.cn”]这些镜像源地址直接放在/etc/docker/daemon.json文件中这里一定要注意json文件的格式少了逗号会导致docker服务起不来重启docker服务就可以正常拉取镜像源的常规镜像比如jdk8的镜像eclipse-temurin:8-jdk小贴士最近才知道docker.service文件是放在/lib/systemd/system/目录下的但是他的启动命令仍然是systemctl start …和常规放在/etc/systemd/system目录下的服务效果一样如果修改了它的相关配置文件/etc/docker/daemon.json也需要执行systemctl daemon-reload命令来重新使配置生效以前常用的都是/etc/systemd/system目录构建系统镜像构建基础的cento-7.9系统并带有jdk1.8运行环境构建镜像的dockerfile的格式如下FROM centos:centos7.9.2009# 换成阿里云归档源CentOS 7 已 EOL官方源已失效RUNmv/etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup\curl-o/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo#RUN sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-* \RUN yum clean all RUN yuminstall-yjava-1.8.0-openjdk-devel RUNln-sf/usr/share/zoneinfo/Asia/Shanghai /etc/localtime ENVJAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk\PATH$PATH:/usr/lib/jvm/java-1.8.0-openjdk/bin CMD[java,-version]然后执行构建命令命令来构建基础镜像dockerbuild-tcentos7.9.2009-jdk8:20261026.-f./Dockerfile构建过程中如果出现过连接超时的报错不要中断一般都是连接阿里云的网络超时了但是我们配置了其他的镜像源地址构建命令会执行重试的如下图构建完成后的效果如图验证镜像的可用性输出我们刚才在dockerfile里面定义的CMD命令java -version的结果如下图所示构建程序运行镜像使用刚才构建的操作系统镜像为基础镜像继续构建java程序运行的镜像文件编写dockerfile的常规步骤就是先写一个From 基础镜像源然后执行RUN关键字创建系统内的用户、创建系统用户目录、安装必要的基础包、拷贝需要执行的文件到容器内部的目录以下是我这边构建镜像的dockerfile内容格式#引入刚才构建的基础镜像FROM centos7.9.2009-jdk8:20261026 RUNgroupadd-g2021cwos RUNuseradd-gcwos-u2021-s/bin/bash-mcwos RUNmkdir-p/app RUNchown-R2021:2021 /app#(基础镜像里已经替换过不需要重复执行)RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup \# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoRUN yuminstallfontconfig-yUSERcwos ENVHOME/home/cwos ENV JAVA_APP_JAR /app/app.jar ENVBEST_PERFORMANCE_MAX_MEMORY4000COPY run-java.sh /app/run-java.sh COPY cbs-ibis-5.0.3.202606171445.jar${JAVA_APP_JAR}EXPOSE9779执行命令构建dockerbuild--networkhost-tcentos7.9.2009-jdk8-ibis:1.0.0.20261026.-f./Dockerfile结果如下截图特别说明build命令中直接构建的是当前目录直接用.代替的就是直接在Dockerfile所在的目录下构建目录下不能存在太多不用的文件最好只包含dockerfile文件中RUN命令需要用到的文件我当前执行构建的目录结构如下之前踩过一个坑在构建镜像的目录下文件太多执行镜像构建命令第一步就看到生成的镜像文件的大小18G如果只包含dockerfile里面编写的内容构建的容器大小为514M如下图所示这个目录下的dockerfile文件内容如下其实和上面的那个差不多