Docker构建Java镜像及使用

前言
最近在项目中使用到了一些docker技术,因为没有专业的运维人员,所以在部署版本应用的时候,都是自己在进行打包部署。经过一段时间的操作和使用,在这里和大家分享一下自己的心得,也算是做一下总结吧。
准备工作
首先,我们的项目是基于Java语言开发的,也是使用大名鼎鼎的spring boot这套框架来构建的。那我们首先需要准备一个spring boot应用工程,还需要相对应的jdk版本,反正我们还是使用的jdk8。然后就是编写一个需要构建镜像的Dockerfile文件。其他的就是一些基本环境准备了,比如说docker环境啥的了。
Java工程
作为演示,我就直接使用spring initializer快速生成一个Java工程。当然,大家在自己使用的过程中,完全可以按照自己原来的工程创建方式来构建。在工程中,随便定义一个接口,有响应就行。方便后面进行测试验证。至于后续部署打包的配置,原来是啥样就啥样,不用去更改,只需要在后续的构建镜像中修改对应的启动命令就行了。完全不影响我们的编码和配置。下面是一些工程示例:

项目pom文件:

<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>
    <groupId>top.layne</groupId>
    <artifactId>layne-docker</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>layne-docker</name>
    <url>http://maven.apache.org</url>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.8</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </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>
        </dependency>
    </dependencies>

    <build>
        <finalName>layne-docker</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
示例接口:
package top.layne.docker.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * 控制器
 *
 * @author Layne
 * @date 2024/9/7
 */
@RequestMapping("docker")
@RestController
public class DockerController {
    /**
     * ping
     *
     * @return
     */
    @RequestMapping("ping")
    public Object ping() {
        return "pong";
    }
}
Dockerfile文件
在工程打好包后,我们就需要将部署包构建为docker镜像文件。那在构建镜像的时候,我们就需要一个Dockerfile文件来告诉docker怎么进行一个镜像的生成,比如说一些环境配置啊,部署包的路径啊,暴露的一些端口配置啊,启动命令啥的。那我们这里就需要告诉docker,我们部署的Java应用是需要一个jdk的运行环境,端口的话需要暴露8080,设置一个应用的工作目录/app,服务启动命令`java -jar layne-docker.jar`。

项目中如果是使用的脚本启动的话,只需要将启动命令替换成对应的脚本启动命令就行了

如:ENTRYPOINT [“./springboot-start.sh”,“start”,“test”]

Dockerfile文件:

# 配置jdk基础镜像
FROM openjdk:8u342
# 设置环境变量
ENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN.UTF-8
ENV LC_ALL=zh_CN.UTF-8
ENV TZ=Asia/Shanghai
# 暴露服务端口
EXPOSE 8080

# 设置工作目录
WORKDIR /app

# 拷贝本地文件到容器中
COPY ./ .

#启动命令
ENTRYPOINT ["java","-jar","layne-docker.jar"]
构建镜像
在工程打好部署包,Dockerfile文件也配置好后,我们就可以开始构建应用的镜像文件了。首先,我们把部署包和Dockerfile文件一起上传到具有Docker环境的服务器中。一般这个服务器也就是我们应用需要部署的机器了。然后通过docker build命令来执行构建镜像的命令。比如我这里:`docker build -f Dockerfile -t layne-docker-test:1.0 .`,这条指令代表的意思就是我需要构建一个docker镜像,镜像名称叫做layne-docker-test,版本号是1.0。

上传文件:

# 使用rz -y上传jar包和Dockerfile
layne@layne-ubuntu-22-3:~/app$ rz -y
rz waiting to receive.
Starting zmodem transfer.  Press Ctrl+C to cancel.
Transferring Dockerfile...
  100%     352 bytes  352 bytes/sec 00:00:01       0 Errors  
Transferring layne-docker.jar...
  100%   17236 KB    17236 KB/sec    00:00:01       0 Errors  
# 查看文件
layne@layne-ubuntu-22-3:~/app$ ll
total 17252
drwxrwxr-x  2 layne layne     4096  98 00:40 ./
drwxr-x--- 17 layne layne     4096  98 00:28 ../
-rw-r--r--  1 layne layne      352  97 23:41 Dockerfile
-rw-r--r--  1 layne layne 17650310  97 22:53 layne-docker.jar

docker build 镜像

# 执行构建镜像命令 docker build -f Dockerfile -t layne-docker-test:1.0 .
layne@layne-ubuntu-22-3:~/app$ docker build -f Dockerfile -t layne-docker-test:1.0 .
Sending build context to Docker daemon  17.65MB
Step 1/9 : FROM openjdk:8u342
 ---> b273004037cc
Step 2/9 : ENV LANG=zh_CN.UTF-8
 ---> Running in 755f1b0d64c9
Removing intermediate container 755f1b0d64c9
 ---> 16d81d0f30a2
Step 3/9 : ENV LANGUAGE=zh_CN.UTF-8
 ---> Running in 4728c8eed89a
Removing intermediate container 4728c8eed89a
 ---> ea937a011201
Step 4/9 : ENV LC_ALL=zh_CN.UTF-8
 ---> Running in ac8d41bb7a93
Removing intermediate container ac8d41bb7a93
 ---> 3d45873454a3
Step 5/9 : ENV TZ=Asia/Shanghai
 ---> Running in d8c995bb1587
Removing intermediate container d8c995bb1587
 ---> 068f3ce94784
Step 6/9 : EXPOSE 8080
 ---> Running in 2e48bd628e47
Removing intermediate container 2e48bd628e47
 ---> 9491375594d4
Step 7/9 : WORKDIR /app
 ---> Running in c1b63d3aa83e
Removing intermediate container c1b63d3aa83e
 ---> e619e9e805b9
Step 8/9 : COPY ./ ./
 ---> f955c8e6e299
Step 9/9 : ENTRYPOINT ["java","-jar","layne-docker.jar"]
 ---> Running in 0677934829d1
Removing intermediate container 0677934829d1
 ---> b76b892bab21
Successfully built b76b892bab21
Successfully tagged layne-docker-test:1.0

查看镜像:

layne@layne-ubuntu-22-3:~/app$ docker images
REPOSITORY          TAG       IMAGE ID       CREATED          SIZE
layne-docker-test   1.0       b76b892bab21   11 seconds ago   544MB
openjdk             8u342     b273004037cc   2 years ago      526MB
启动容器:
layne@layne-ubuntu-22-3:~/app$ docker run --name layne-docker-test-1.0 -p 8080:8080 -d layne-docker-test:1.0
3e30aa38a58624fd698456cdbdac174692ae8e873b51f474ebc57e0ed72f1407
查看容器:
layne@layne-ubuntu-22-3:~/app$ docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED         STATUS         PORTS                                       NAMES
3e30aa38a586   layne-docker-test:1.0   "java -jar layne-doc…"   3 seconds ago   Up 3 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   layne-docker-test-1.0

查看日志:
layne@layne-ubuntu-22-3:~/app$ docker logs 3e30aa38a586

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.7.8)

2024-09-08 00:42:45.115  INFO 1 --- [           main] top.layne.docker.Application             : Starting Application v1.0-SNAPSHOT using Java 1.8.0_342 on 3e30aa38a586 with PID 1 (/app/layne-docker.jar started by root in /app)
2024-09-08 00:42:45.119  INFO 1 --- [           main] top.layne.docker.Application             : No active profile set, falling back to 1 default profile: "default"
2024-09-08 00:42:46.446  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2024-09-08 00:42:46.470  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2024-09-08 00:42:46.470  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.71]
2024-09-08 00:42:46.568  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2024-09-08 00:42:46.568  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1348 ms
2024-09-08 00:42:47.124  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2024-09-08 00:42:47.137  INFO 1 --- [           main] top.layne.docker.Application             : Started Application in 2.568 seconds (JVM running for 3.231)

验证接口:
# 通过curl访问接口地址
layne@layne-ubuntu-22-3:~/app$ curl localhost:8080/docker/ping
# 响应结果pong
ponglayne@layne-ubuntu-22-3:~/app$ 
layne@layne-ubuntu-22-3:~/app$ 
后语
总而言之,通过一段时间的docker指令操作,对于docker的一些基本指令也慢慢熟悉了。对于应用的镜像构建,容器的启动这些操作指令也都基本会操作使用了。当然,这中间有很多的操作,我们都可以使用一些脚本啊或者一些自动化部署工具来代替手工操作。但是在我们学习的过程中,这样一步步自己手动敲出来的会更加有印象。

喜欢的朋友可以扫描下方二维码点个关注,谢谢您的阅读。在这里插入图片描述

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
创建Java镜像的步骤如下: 1. 首先,你需要准备一个Dockerfile文件,该文件包含了构建镜像的指令和配置信息。你可以根据你的Java项目的需要进行相应的配置。一个示例的Dockerfile可以参考引用中提供的链接。 2. 接下来,你可以使用Docker命令构建镜像使用`docker build -t 镜像名:标签 .`命令来构建镜像。其中,镜像名可以使用用户名/镜像名的方式命名,标签可以是一个版本号或其他标识符。例如,使用`docker build -t anna/docker-package-only-build-demo:1.0-SNAPSHOT .`命令构建镜像。这个命令会告诉Docker在当前目录下获取Dockerfile,并将构建镜像命名为anna/docker-package-only-build-demo,标签为1.0-SNAPSHOT。这个命令的示例可以参考引用中提供的命令。 3. 等待构建完成后,你就可以使用镜像来部署和运行你的Java项目了。可以使用`docker run`命令来运行镜像,并指定需要运行的Java项目。具体的运行命令将根据你的Java项目的需要而定。 通过以上步骤,你可以成功创建一个Docker镜像来部署你的Java项目。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Docker学习(二十一)构建 java 项目基础镜像](https://blog.csdn.net/qq_33204709/article/details/129429590)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [为Java应用创建Docker镜像的三种方式](https://blog.csdn.net/maxinchun0215/article/details/129145867)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Layne_lei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值