利用Dockerfile制作springboot应用镜像并运行镜像

dockerfile是docker指定镜像的脚本,由一行行命令语句组成,并且支持以#开头作为注释。一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。具体的dockerfile指令解释请看这篇文章。本篇文章利用dockerfile生成一个springboot的应用镜像,并用docker run命令启动。

1.项目文件简介

1.1 PeopleController文件

控制层,直接返回请求,很简单,没有任何逻辑。

@RestController
@Slf4j
@RequestMapping("/people")
public class PeopleController {

    
    @GetMapping("/all")
    public ResponseEntity<String> findAll(){
        return ResponseEntity.ok().body("hello world");
    }
}

1.2配置文件

配置文件主要配置了项目的端口号,log日志配置地址,以及项目的context-path

server.port=9650
logging.config=ext/conf/logback.xml
server.servlet.context-path=/docker/rest/v1

1.3pom文件

下面代码给了所用依赖以及maven打包时需要的插件

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>copy-conf</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <encoding>UTF-8</encoding>
                            <outputDirectory>${project.build.directory}/ext/conf</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>ext/conf</directory>
                                    <includes>
                                        <include>logback.xml</include>
                                    </includes>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

2.Dockerfile文件

dockerfile文件是我们的重点,我们利用它来生成image。

FROM java:8-jre
ADD ./target/docker-springboot-0.0.1-SNAPSHOT.jar app.jar
ADD ./target/ext/conf/logback.xml ext/conf/logback.xml
LABEL maintainer="honorzhang@tju.edu.cn"
EXPOSE 9650
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

FROM是一个Dockerfile的第一个指令,是需要的基础镜像;

ADD是把我们运行的jar包添加到docker目录中,并改名为app.jar,后一个是把日志配置文件复制到docker中;

ENTRYPOINT指定容器启动时的默认运行的命令。

3.生成镜像

docker build -t docker-springboot:v1.0 .                                          

在Dockerfile所在目录下,运行上面的命令。

  • -f:指定要使用的 Dockerfile 路径,本文中在同一个目录下。

  • --tag, -t:镜像的标签以及名字,可以在一次构建中为一个镜像设置多个标签。

我们在使用 docker build 命令去构建镜像时,往往会看到命令最后会有一个 . 号。它究竟是什么意思呢?很多人以为是用来指定 Dockerfile 文件所在的位置的,但其实 -f 参数才是用来指定 Dockerfile 的路径的,那么 . 号究竟是用来做什么的呢?

Docker 在运行时分为 Docker 引擎(服务端守护进程)客户端工具,我们日常使用各种 docker 命令,其实就是在使用 客户端工具Docker 引擎 进行交互。当我们使用 docker build 命令来构建镜像时,这个构建过程其实是在 Docker 引擎 中完成的,而不是在本机环境。如果在 Dockerfile 中使用了一些 ADD 等指令来操作文件,如何让 Docker 引擎 获取到这些文件呢?

这里就有了一个 镜像构建上下文 的概念,当构建的时候,由用户指定构建镜像时的上下文路径,而 docker build 会将这个路径下所有的文件都打包上传给 Docker 引擎,引擎内将这些内容展开后,就能获取到上下文中的文件了。

构建成功,查看镜像信息

4.运行镜像

docker run  --name docker-springboot -p 9650:9650 docker-springboot:v1.0   
  • --name 指定容器的名称
  • -p端口映射,-p hostport:containerport

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值