说明:平常我们使用Docker运行各种容器,极大地方便了我们对开发应用的使用,如MySQL、Redis,以及各种中间件,使用时只要拉镜像,运行容器即可。本文介绍如何创建一个Demo,自定义构建一个镜像。
开始之前,需要在自己的服务器或者虚拟机内安装Git、Maven、JDK和Docker,可参考下面这两篇文章;
-  
Docker安装&卸载
 -  
在云服务器上安装Jenkins(前提)部分
 
创建项目
首先,在GitLab上创建一个仓库,里面写一个Demo代码,如下:
Controller
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/docker")
public class DockerFileController {
    @GetMapping
    public String getDockerFile() {
        return "Hello Dockerfile!";
    }
}
 
启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}
 
Application
server:
  port: 8080
 
pom.xml
<?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>
    <groupId>com.hezy</groupId>
    <artifactId>docker_file_demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.12</version>
        <relativePath/>
    </parent>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
 
启动,测试,没得问题

编写Dockerfile文件
将代码push到远程仓库,登录服务器,用git将代码克隆到服务器里;

进入项目的根目录,编写Dockerfile文件。Dockerfile文件就是需要自定义镜像的脚本文件,文件内包含了一个个指令,说明了构建该镜像所需的环境及操作。相关指令如下:
-  
FROM:指定基础镜像,即代码运行的环境;
 -  
ENV:设置变量,可在下面执行CMD命令时使用,如设置JAVA的环境;
 -  
COPY:拷贝文件;
 -  
RUN:执行Linux的shell命令;
 -  
EXPOSE:指定容器运行的端口,如上面的项目则需要指定为8080,即程序运行的端口;
 -  
ENTRYPOINT:运行程序的CMD命令,如java -jar jar包;
 
如前面的Demo项目,Dockerfile文件内容如下:
# 使用官方 OpenJDK 11 镜像作为基础镜像
FROM openjdk:11
# 将应用程序 JAR 文件复制到容器中
COPY ./target/docker_file_demo-1.0-SNAPSHOT.jar /home/docker_file_demo.jar
# 指定容器启动时运行的命令
CMD ["java", "-jar", "/home/docker_file_demo.jar"]
 
注意文件名,必须是Dockerfile

构建容器
在当前目录,敲下面的命令,将项目打包;
mvn clean package
 
如果你想确认一下jar包有没问题,可以像我一下,进入target目录,手动启动下看报不报错

继续敲下面的命令,构建镜像,制定镜像名(-t)为docker-demo,注意后面有个点(.)
docker build -t docker-demo .
 

首次构建需要下载openjdk,可能有点慢,如下,是我首次构建时的信息,花了5分钟左右;

启动容器
这时敲下面的命令,可以查看是否新增了一个镜像;
docker images
 
或者
docker image ls
 

然后敲下面的命令,使用这个镜像启动一个容器;
docker run --name docker-demo -p 8080:8080 -d docker-demo
 
-  
–name:指定容器名;
 -  
–p:指定映射的端口,外部访问云服务器8080端口,就是访问这个容器内的8080端口,即项目运行的端口;
 

这时,打开浏览器,输入服务器公网IP:8080/docker,敲回车。成功访问,没得问题。

总结
本文介绍了如何构建Docker自定义镜像



















