1.创建Spring-boot项目
首先在IDE中创建一个SpringBoot项目,我这里命名为docker-demo
由于只做测试用,maven只引入web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
我这里只创建一个Controller用来测试:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("get")
public String get(String a) {
return a;
}
}
两个配置文件application-dev.yaml和application-prod.yaml分别对应不同的环境的配置文件,内容分别如下。
application-dev.yaml:
server:
port: 8080
application-prod.yaml:
server:
port: 80
2.编写Dockerfile文件
在项目路径下加入Dockerfile文件,内容如下:
FROM java:8
COPY entrypoint.sh /
RUN chmod 755 /entrypoint.sh
COPY ./target/docker-demo-0.0.1-SNAPSHOT.jar /home/work/prologue/docker-demo-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["/entrypoint.sh"]
我是用java:8镜像作为基础镜像的,你也可以手动做自己的基础镜像。 entrypoint.sh脚本内容如下:
#!/bin/bash
echo "start prologue!!!!!!!"
echo "active_profile $ACTIVE_PROFILE !!!"
java -Xms4096m -Xmx4096m -jar /home/work/prologue/docker-demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=$ACTIVE_PROFILE
if [[ $? != 0 ]]; then
echo Failed to start java >&2
exit 1
fi
#docker run -d --name dockerdemo -p 8080:80 -e ACTIVE_PROFILE="prod" dockerdemo
其中 ACTIVE_PROFILE 是设置的环境变量,用来指定当前环境,来加载相应的配置文件。后边我们可以通过docker run命令来传递该变量。
3.构建镜像
进入项目根路径,执行maven命令来打包项目:
mvn clean package -DskipTests
通过以下命令来构建镜像:
docker build -t dockerdemo .
构建成功后,我们命令 docker images 就可以看到有了dockerdemo镜像
也可以通过docker images | grep dockerdemo 直接查找该镜像
4.启动容器
采用如下命令启动容器
docker run -d --name dockerdemo -p 8080:80 -e ACTIVE_PROFILE="prod" dockerdemo
参数解释如下
-d: 后台运行容器,并返回容器ID;
--name dockerdemo:指定容器名称为dockerdemo;
-e ACTIVE_PROFILE="prod":设置环境变量,即指定运行文件为prod;
-p 8080:80 :指定端口映射,由于我们采用的是prod文件,即项目启动端口号为80,所以映射容器端口号为80;
5.访问
由于我们设置的映射的宿主机端口号为8080
我们在宿主机上访问:
http://127.0.0.1:8080/test/get?a=111
能够正确返回结果