使用Docker发布应用

 

新建spring boot应用demo-docker,添加web依赖

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

入口类

复制代码
@RestController
@SpringBootApplication
public class DemoDockerApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoDockerApplication.class, args);
    }
    @RequestMapping("/")
    public String index(){
        return "Hello world!"+new Date();
    }
}
复制代码

使用maven打包

打开demo-docker\target 目录,找到jar文件

接下来使用Xshell连接到CentOS,cd 到目标目录,这里假如为/opt/demo

可以直接吧jar文件拖放到Xshell中,需要在CentOS上安装rz命令,如果没有安装会报错

使用下面的命令安装

yum install -y lrzsz

上传jar包后在demo 目录下创建一个Dockerfile文件

vi Dockerfile

编辑内容如下

FROM java:8
VOLUME /tmp
COPY demo-docker-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8100
ENTRYPOINT ["java","-jar","/app.jar"]

这里的touch命令是更新文件的创建时间

目录结构如下

 

接下来创建镜像

docker build -t demo .

-t 指定生成镜像的标签信息

后面的"."表示当前目录

执行上面的指令输出结果

 

 使用下面命令运行镜像

docker run -d -p 8100:8100 demo

查看运行状态,访问http://localhost:8100

 

Docker指令说明

  • FROM 格式为FROM<image>,或者FROM<image>:<tag>
  • RUN 格式为RUN<command>或RUN["executable","param1","param2"] 前者默认将在shell终端运行命令,即/bin/sh -c;后者则使用exec执行,如RUN ["/bin/bash","-c","echo hello"]
  • CMD 格式为CMD ["executable","param1","param2"] 使用exec执行;或CMD command param1 param2 在/bin/sh中执行;
  • EXPOSE 格式为EXPOSE <port> [<port>...],如 EXPOSE 22 80 443
  • ENV 指定环境变量,格式为ENV <key> <value>,如 ENV PATH /usr/local/nginx
  • ADD 格式为ADD <src> <dest>,将复制指定的<src>路径下的内容到容器的<dest>路径下,<src>可以是Dockerfile所在目录的一个相对路径(文件或目录),也可以是一个URL,还可以是一个tar文件(如果为tar文件,会自动解压到<dest>路径下)
  • COPY 格式为COPY <src> <dest>,复制本地主机的<src>下的内容到镜像的<dest>下,目标路径不存在时会自动创建,当使用本地目录为源目录时,推荐用COPY而不是ADD
  • ENTRYPOINT 指定镜像的默认入口,支持两种格式 ENTRYPOINT ["executable","param1","param2"],或ENTRYPOINT command param1 param2
  • VOLUMN 创建一个数据卷挂载点 格式为 VOLUMN ["/data"]
  • USER 指定运行容器的用户名
  • WORKIDR 为后续的RUN、CMD和ENTRYPOINT指定配置工作目录
posted @   uptothesky  阅读(341)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
点击右上角即可分享
微信分享提示