首页 > 其他分享 >使用 Dockerfile 自定义 Docker 镜像

使用 Dockerfile 自定义 Docker 镜像

时间:2023-06-07 20:00:22浏览次数:36  
标签:文件 自定义 jar fileupdown 镜像 Docker Dockerfile 目录

对于一些常用的 Docker 镜像,我们可以从 Docker 官方仓库或者国内的阿里云仓库中获取,比如 mysql、redis、nginx 等等。但是对于一些我们自己开发的程序,要想很方便的在 Docker 中部署,还是需要自己制作镜像。

这里不介绍 Docker 常用命令的使用,网上学习资料很多,这里就直接进行演示。以之前的博客【SpringBoot 文件上传下载工具样例】的 Demo 程序为基础,制作自己的镜像并部署在 Docker 中供其它机器进行访问。


一、程序打包

从【SpringBoot 文件上传下载工具样例】这边博客中下载到 Demo 代码,使用 IDEA 打开工程,打开 application.yml 配置文件,查看里面配置的启动端口和文件存放的目录绝对路径:

server:
  # 启动端口(这里就不修改了)
  port: 9000
spring:
  application:
    name: fileupdown
  servlet:
    multipart:
      # 单个文件的上传大小限制
      max-file-size: 100MB
      # 如果同时上传多个文件时,总大小限制
      max-request-size: 100MB
# 这里将文件上传后存放的目录,设置为 /opt/files/
# 不用担心所配置的目录路径在 docker 中是否存在,
# 如果目录路径不存在,Docker 运行后会自动创建
upload:
  path: /opt/files/

启动端口是 9000 ,这里就保持原样不变。由于是在 Docker 中部署,Docker 镜像运行的肯定是 linux 系统,因此文件上传后存放的目录需要配置为 linux 系统下的目录绝对路径,这里配置的绝对路径为 /opt/files/

可以修改一下 pom 文件,在 build 下新增 finalName 配置,指定打包后的 jar 包名称为 fileupdown.jar

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
    </parent>

    <groupId>com.jobs</groupId>
    <artifactId>fileupdown</artifactId>
    <version>1.0</version>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.26</version>
        </dependency>
    </dependencies>

    <build>
        <!--
        这里将 finalName 配置为 fileupdown,
        这样打包后的 jar 包名称就为:fileupdown.jar
        -->
        <finalName>fileupdown</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

完成以上操作后,就可以打包了,在 target 目录下就能够找到打包后的 fileupdown.jar 文件。


二、制作自定义镜像

上篇博客中,我在自己的虚拟机 192.168.216.128 上已经安装好了 Docker ,这里就使用这个虚拟机。

使用 xshell 登录到 192.168.216.128 中,我使用 root 账号登录,默认进入到的目录是 /root/ 中。

创建一个目录 /root/mkimage/ ,执行命令 mkdir /root/mkimage

使用 xftp 将 fileupdown.jar 上传到 /root/mkimage/ 目录中,然后进入该目录 cd /root/mkimage

创建一个 Dockerfile 文件:vim Dockerfile ,填写以下内容并保存

# 指定基础镜像
FROM java:8-alpine

# 拷贝文件到容器中
COPY ./fileupdown.jar /opt/app.jar

# 暴露端口
EXPOSE 9000

# 入口,java项目的启动命令
ENTRYPOINT java -jar /opt/app.jar

这里基于 java:8-alpine 制作自定义镜像,因为其内部已经安装好了 openjdk1.8 并且系统的编码是 UTF-8,这就节省了很多麻烦事儿。之前我基于 Centos7 和 ubuntu 制作自定义镜像,其内部的编码不是 UTF-8,导致上传的文件如果包含中文名称,则显示的都是问号(?),看着很不爽。基于 java:8-alpine 就不会出现这样的问题。

最后运行命令 docker bulid -t fileupdown:1.0 . 即可制作镜像。需要注意最后的那个点(.)不能省略,表示根据当前目录下的 Dockerfile 文件制作镜像,如果你用来制作镜像的文件名不是 Dockerfile ,而是其它的名字,如 aaa.txt 的话,那么你需要使用这样的命令:docker build -t fileupdown:1.0 -f aaa.txt 表示使用当前目录下的 aaa.txt 制作镜像。

image

然后使用 docker images 查看制作好的镜像:

image


三、运行镜像并验证

镜像已经制作好了,然后使用以下命令运行:

docker run --name fudweb -p 80:9000 -v /app/updownfiles/:/opt/files/ -d fileupdown:1.0

这里使用外部机器的 80 端口映射内部的 9000 端口,另外使用外部机器的 /app/updownfiles/ 目录映射内部的 /opt/files/ ,这样就可以访问外部机器的 80 端口来访问内部的 SpringBoot 程序,另外上传的文件可以保存到外部机器的 /app/updownfiles/ 目录中。

运行完以上命令后,可以使用 docker ps 查看正在运行的容器:

image

此时打开浏览器访问 http://192.168.216.128 就可以访问 SpringBoot 上传页面程序的页面了

image

通过页面上传的文件,在 192.168.216.128 的 /app/updownfiles/ 目录中可以查看到。如果你直接在 /app/updownfiles/ 目录中添加或删除文件,docker 内部的 /opt/files/ 目录也会自动同步更新。

标签:文件,自定义,jar,fileupdown,镜像,Docker,Dockerfile,目录
From: https://www.cnblogs.com/studyjobs/p/17464402.html

相关文章

  • Docker(二):阿里云镜像加速
    1.登陆自己的阿里云账号,找到镜像加速器 2.配置 3.查看docker信息dockerinfo 出现以上信息则配置成功。......
  • Docker(一):Linux系统下Docker的安装与卸载
    一、准备工作1.Linux系统,我这里使用的是云服务器CentOS72.查看系统内核系统内核需要3.0以上 3.系统版本 二、安装过程1.卸载旧的版本yumremovedocker\docker-client\docker-client-latest\docker-comm......
  • 自定义缓存注解
    自定义Springboot缓存注解在使用redis缓存时,我们可能使用Jedis,RedisTemplate或者使用@Cacheable注解。尽管这些方法都能够实现缓存的功能,但是有时在真实的业务当中这些方法可能还不够简洁和灵活,于是我们可以自定义缓存注解来解决问题。SpringBoot中注解的格式......
  • 第3天学习Docker-Docker部署常见应用(MySQL、Tomcat、Nginx、Redis、Centos)
    前提须知:(1)搜索镜像命令格式:dockersearch镜像名(2)设置Docker镜像加速器详见文章:Docker设置ustc的镜像源(镜像加速器)1、部署MySQL拉取镜像(这里拉取mysql5.7版本)[root@localhost~]#dockerpullmysql:5.7创建容器(默认运行)[root@localhost~]#dockerrun-di--name=my_mysql-p330......
  • docker安装spark
    curl-L"https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/docker-composechmod+x/usr/local/bin/docker-composedocker-compose--versiondockerpullsingularities/sparkvidocke......
  • vue3实现自定义指令
    创建一个empty.jsimport{nextTick}from'vue';constemptyImgUrl=newURL('@/assets/images/empty-icon.jpeg',import.meta.url).href;//在vue3中不支持require引入静态图片,这是一种引入方式另外一种是直接importconstempty={install(app,options){app......
  • 运维人员福音!自定义插件为运维提供更多可能
    想要轻松应对业务问题吗?想要想迪哥一样不再焦虑吗?想要实现指标监控自主性吗?倾情推荐嘉为蓝鲸一体化运维平台WeOps让监测更加随心应手只要能用工具解决的问题WeOps都能解决支持跨云跨管理,低负载采用Agent-Proxy-Server模式,轻松实现企业跨云跨网络的管理诉求。Agent启动内存仅需20M,资......
  • docker iptables
    -name:获取是否已经安装dockershell:'systemctlis-activedocker||echo"NoFound"'register:docker_svc#18.09.x版本二进制名字有变化,需要做判断-name:获取docker版本信息shell:"{{base_dir}}/bin/dockerd--version|cut-d''-f3"regist......
  • [Docker/K8S]Docker与K8S的区别
    1定义角度Docker是一种开放源码的应用容器引擎,允许开发人员将其应用和依赖包打包成可移植的容器/镜像中;然后,发布到任何流行的Linux或Windows机器上,也能实现虚拟化。该容器完全使用沙箱机制,彼此之间没有任何接口。k8s,全称kubernetes,是一种开放源码的容器集群管理系统,能......
  • 7、hive shell客户端与属性配置、内置运算符、函数(内置运算符与自定义UDF运算符)
    ApacheHive系列文章1、apache-hive-3.1.2简介及部署(三种部署方式-内嵌模式、本地模式和远程模式)及验证详解2、hive相关概念详解--架构、读写文件机制、数据存储3、hive的使用示例详解-建表、数据类型详解、内部外部表、分区表、分桶表4、hive的使用示例详解-事务表、视图、物......