当前位置:   article > 正文

如何构建Docker自定义镜像

如何构建Docker自定义镜像

说明:平常我们使用Docker运行各种容器,极大地方便了我们对开发应用的使用,如MySQL、Redis,以及各种中间件,使用时只要拉镜像,运行容器即可。本文介绍如何创建一个Demo,自定义构建一个镜像。

开始之前,需要在自己的服务器或者虚拟机内安装Git、Maven、JDK和Docker,可参考下面这两篇文章;

创建项目

首先,在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!";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

启动类

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);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Application

server:
  port: 8080
  • 1
  • 2

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

启动,测试,没得问题

在这里插入图片描述

编写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"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意文件名,必须是Dockerfile

在这里插入图片描述

构建容器

在当前目录,敲下面的命令,将项目打包;

mvn clean package
  • 1

如果你想确认一下jar包有没问题,可以像我一下,进入target目录,手动启动下看报不报错

在这里插入图片描述

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

docker build -t docker-demo .
  • 1

在这里插入图片描述

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

在这里插入图片描述

启动容器

这时敲下面的命令,可以查看是否新增了一个镜像;

docker images
  • 1

或者

docker image ls
  • 1

在这里插入图片描述

然后敲下面的命令,使用这个镜像启动一个容器;

docker run --name docker-demo -p 8080:8080 -d docker-demo
  • 1
  • –name:指定容器名;

  • –p:指定映射的端口,外部访问云服务器8080端口,就是访问这个容器内的8080端口,即项目运行的端口;

在这里插入图片描述

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

在这里插入图片描述

总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/255856
推荐阅读
相关标签
  

闽ICP备14008679号