云部署-基于Docker的部署
目前有一个Spring Boot项目,内容非常的简单,向浏览器输出"Hello Docker!!"这句话。
package com.wisely.ch10;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class Ch10Application {
@RequestMapping("/")
public String home() {
return "Hello Docker!!";
}
public static void main(String[] args) {
SpringApplication.run(Ch10Application.class, args);
}
}
使用clean package命令将该项目打包成jar包
将jar文件传输到阿里云服务器的/var/apps/ch10docker目录下
在同级目录下创建一个Dockerfile文件命令如下:
touch Dockerfile
编辑内容为:
FROM java:8
MAINTAINER wyf
ADD ch10-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
解释如下:
①基镜像为Java,版本为8,JDK的安装请参照我往期的文章。
②MAINTAINER为作者
③将ch10-0.0.1-SNAPSHOT.jar添加到镜像中,并重命名为app.jar
④运行镜像的容器,监听8080端口
⑤启动时运行java -jar app.jar
在/var/apps/ch10docker目录下执行如下命令:
docker build -t wisely/ch10docker .
其中wisely/ch10docker为镜像名称,这里设置wisely为前缀,这也是Docker镜像的一种明明习惯。
最后还有一个".",这时用来指明Dockerfile路径的,"."表示Dockerfile在当前路径下。
编译完成后查看本地镜像
通过下面命令运行
docker run -d --name ch10 -p 8080:8080 wisely/ch10docker
查看当前容器状态
ok,访问http://ip:8080,就可看到结果。
附(Dockerfile主要指令)
(1)FROM
指明了当前镜像继承的基镜像,编译当前镜像时会自动下载基镜像。
示例:
FROM ubuntu
(2)MAINTAINER
指明了当前镜像的作者。
示例:
MAINTAINER tjs
(3)RUN
可以在当前镜像上执行Linux命令并形成一个新的层。RUN是编译时的动作。
示例有如下两种格式,CMD和ENTRYPOINT也是如此:
RUN /bin/bash -c "echo helloworld"
或
RUN ["/bin/bash", "-c", "echo hello"]
(4)CMD
指明了启动镜像容器时的默认行为。一个Dockerfile里只能有一个CMD指令。CMD指令里设定的命令可以在运行镜像时使用参数覆盖。CMD是运行时的动作。
示例:
CMD echo "this is a test"
可被docker run -d image_name echo "this is a test"覆盖
(5)EXPOSE
指明了镜像运行时的容器必须监听指定的端口。
示例:
EXPOSE 8080
(6)ENV
可用来设置环境变量
示例:
ENV myName=tjs
或
ENV myName tjs
(7)ADD
从当前工作目录复制文件到镜像目录中去
示例:
ADD test.txt /mydir/
(8)ENTRYPOINT
可让容器像一个可执行程序一样运行,这样镜像运行时可以像软件一样接收参数执行。ENTRYPOINT是运行时动作。
示例:
ENTRYPOINT ["/bin/echo"]
我们可以向镜像传递参数运行:
docker run -d image_name "this is not a test"
文章转自《Spring Boot实战》