赞
踩
说明:平常我们使用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!";
}
}
启动类
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>
启动,测试,没得问题
将代码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自定义镜像
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。