GVKun编程网logo

Dockerfile 部署 springboot 项目 流程(dockerfile构建springboot项目)

13

如果您想了解Dockerfile部署springboot项目流程和dockerfile构建springboot项目的知识,那么本篇文章将是您的不二之选。我们将深入剖析Dockerfile部署sprin

如果您想了解Dockerfile 部署 springboot 项目 流程dockerfile构建springboot项目的知识,那么本篇文章将是您的不二之选。我们将深入剖析Dockerfile 部署 springboot 项目 流程的各个方面,并为您解答dockerfile构建springboot项目的疑在这篇文章中,我们将为您介绍Dockerfile 部署 springboot 项目 流程的相关知识,同时也会详细的解释dockerfile构建springboot项目的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

Dockerfile 部署 springboot 项目 流程(dockerfile构建springboot项目)

Dockerfile 部署 springboot 项目 流程(dockerfile构建springboot项目)

编写 Dockerfile 文件

FROM openjdk:8-jre-alpine
MAINTAINER projectName

ENV PARAMS=""

#添加到本地,如果需要把jar包放到容器内部,则需要添加这行
#ADD target/isafe-admin.jar /admin.jar


#时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo ''Asia/Shanghai'' >/etc/timezone

#ENTRYPOINT ["java", "-jar", "$PARAMS /admin.jar"]
ENTRYPOINT ["sh","-c","java -jar /home/jar/admin.jar --spring.profiles.active=pro $PARAMS"]

在 Dockerfile 文件目录下运行 docker 命令   

docker build -t admin:v1 .

注意最后有一个点

运行成功后,在 images 里就已经有了,

 

启动镜像

把 springboot 的 jar 包放到 宿主机 /home/test 目录下

docker run -d -p18081:8081 -v /home/test:/home/jar --name webadmin admin:v1 /bin/bash

查看日志

docker logs -f --tail 20 admin:v1

20 分钟学会 Docker 部署 SpringBoot 项目

20 分钟学会 Docker 部署 SpringBoot 项目

我们的开源博客项目 eblog 已经更新完毕了。今天,我们使用 docker 的安装方式,来安装一下我们的项目,实验环境是 centos 7 系统上,本实验适用部署大部分 Springboot 项目。

eblog 项目地址:

https://github.com/MarkerHub/eblog

安装 docker

#安装
yum install docker

#检验安装是否成功
[root@localhost opt]# docker --version
Docker version 1.13.1, build 7f2769b/1.13.1

#启动
systemctl start docker

#换镜像源
sudo vim /etc/docker/daemon.json
内容如下:
{
 "registry-mirrors": ["https://m9r2r2uj.mirror.aliyuncs.com"]
}
保存退出,重启docker

#重启
systemctl restart docker

安装 redis

首先上 dockerHub 搜索 redis,点击进入详情页之后,拉到下面就可以看到 how to use,如果需要选择特定的版本,有 Supported tags 给我们选择,然后如果拉取最新的版本的话,拉倒下面就教程。

  • https://hub.docker.com/_/redis
#拉取redis的镜像
docker pull redis
#查看本地redis镜像
docker images
#运行redis
docker run --name myredis -p 6379:6379 -d redis redis-server --appendonly yes
  • docker run 表示运行的意思
  • --name myredis 表示起个名字叫 myredis
  • -p 6379:6379 表示把服务器的 6379 映射到 docker 的 6379 端口,这样就可以通过服务器的端口访问 docker 的端口
  • -d 表示以后台服务形式运行 redis
  • redis redis-server --appendonly yes 表示开启持久化缓存模式,可以存到硬盘

安装 mysql

  • https://hub.docker.com/_/mysql

MYSQL_ROOT_PASSWORD=admin 表示 root 的初始密码

mysql:5.7.27 表示操作的是 mysql 的 5.7.27 版本,没有后面的版本号的话,默认是拉取最新版本的 mysql。

docker pull mysql:5.7.27
docker run --name mymysql -e MYSQL_ROOT_PASSWORD=admin -d -p 3306:3306  mysql:5.7.27 

连上 mysql,创建数据库 eblog,然后把数据库脚本导入进去。 脚本位置:https://github.com/MarkerHub/eblog/blob/master/eblog.sql

安装 RabbitMq

一行命令搞定,注意 RABBITMQ_DEFAULT_PASS=password 是设置密码的意思哈。

docker run -d --hostname my-rabbit --name myrabbit -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management

安装 ElasticSearch

docker 安装 Elasticsearch6.4.3 版本 及中文插件安装。

系统配置

不配置的话,可能会启动失败

具体报错:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]。

解决:

  • sudo sysctl -w vm.max_map_count=262144

启动 ES

  • docker run -p 9200:9200 -p 9300:9300 -d --name es_643 elasticsearch:6.4.3

进入镜像

  • docker exec -it es_643 /bin/bash

es 配置文件位置: /usr/share/elasticsearch/config/elasticsearch.yml

安装中文分词插件

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.3/elasticsearch-analysis-ik-6.4.3.zip

退出并重启镜像

  • exit
  • docker restart es_643

构建 eblog 的 docker 镜像

接下来,我们需要先去 clone eblog 博客项目,对项目进行打包成 jar 包。

clone https://github.com/MarkerHub/eblog.git
cd eblog
# 打包
mvn clean package -Dmaven.test.skip=true

然后把项目 eblog-0.0.1-SNAPSHOT.jar 包上传到服务器中 同 eblog-0.0.1-SNAPSHOT.jar 的目录,创建一个名称为 Dockerfile 文件。

内容如下:

  • Dockerfile
FROM java:8
EXPOSE 8080

VOLUME /tmp

ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/{TZ} /etc/localtime && echo "{TZ}" > /etc/timezone

ADD eblog-0.0.1-SNAPSHOT.jar  /app.jar
RUN bash -c ''touch /app.jar''
ENTRYPOINT ["java","-jar","/app.jar"]
  • FROM java:8 表示基于 jdk8 环境
  • EXPOSE 8080 表示对外暴露的端口是 8080
    • VOLUME /tmp 表示挂载到 /tmp 目录
  • ADD eblog-0.0.1-SNAPSHOT.jar/app.jar 表示把 jar 包复制到镜像服务里面的根目录,并改名称 app.jar
  • RUN bash -c ''touch /app.jar'' 表示执行创建 app.jar
  • ENTRYPOINT ["java","-jar","/app.jar"] 表示执行启动命令 java -jar

接下来,我们安装 Dockrfile 的命令,把 eblog-0.0.1-SNAPSHOT.jar 构建成 docker 的镜像。

#构建镜像,注意后面有个点哈。
docker build -t eblog .
#查看镜像
docker images

这步骤完成之后,我们就可以在准备工作就已经完成啦,接下来,我们就直接启动我们的项目哈。

启动 eblog 项目

启动命令如下:

docker run -p 8080:8080 -p 9326:9326 --name eblog --link es_643:ees --link myrabbit:erabbit --link mymysql:emysql --link myredis:eredis -d eblog

-p 8080:8080 -p 9326:9326 :9326 是因为即时聊天需要用到的 ws 端口 --link es:ees 表示关联容器,把容器 es 起别名为 ees

查看 eblog 打印日志

docker logs -f eblog

这时候我们查看就可以通过 8080 端口访问我们的项目了!!!

到此项目运行成功!!

 

 yum -y install lrzsz

systemctl status firewalld.service

 

 

docker 迁移后,还需要启动的 

docker run -p 8080:8080 -d myblog

62-docker-compose 结合 dockerfile 部署 springboot 应用

62-docker-compose 结合 dockerfile 部署 springboot 应用

dockerfile 内容:

# 基础镜像
FROM  openjdk:8-jre
# author
MAINTAINER lw

# 挂载目录
VOLUME /home/ybss
# 创建目录
RUN mkdir -p /home/ybss
# 指定路径
WORKDIR /home/ybss

ADD ./jar/lib /home/ybss/lib
ADD ./jar/*.yml /home/ybss/
# 复制jar文件到路径
COPY ./jar/run.jar /home/ybss/run.jar
# 启动认证服务
ENTRYPOINT ["java","-jar","-Dserver.port=9200","-Dspring.profiles.active=dev","run.jar"]

docker-compose.yml 内容:

version : ''3.8''
services:
  ybss-auth:
    container_name: ybss-auth
    build:
      context: ./ybss/auth
      dockerfile: dockerfile
    ports:
      - "19200:9200"
    volumes:
      - /home/ybss/ybss/auth/jar:/home/ybss

networks:
  ybss_default:
    driver: bridge

volumes 挂载目录 /home/ybss/ybss/auth/jar,有更新时,只需要把更新 jar 和文件替换即可。

部署脚本 shell:

#!/bin/sh
auth(){
  chmod 777 -R ./ybss/auth/*
  docker-compose up -d ybss-auth
}
stop(){
	docker-compose stop
}
case "$1" in
"auth")
	auth
;;
"s")
	stop
;;

62-docker-compose 结合dockerfile 部署springboot应用

62-docker-compose 结合dockerfile 部署springboot应用

dockerfile内容:

# 基础镜像
FROM  openjdk:8-jre
# author
MAINTAINER lw

# 挂载目录
VOLUME /home/ybss
# 创建目录
RUN mkdir -p /home/ybss
# 指定路径
WORKDIR /home/ybss

ADD ./jar/lib /home/ybss/lib
ADD ./jar/*.yml /home/ybss/
# 复制jar文件到路径
COPY ./jar/run.jar /home/ybss/run.jar
# 启动认证服务
ENTRYPOINT ["java","-jar","-Dserver.port=9200","-Dspring.profiles.active=dev","run.jar"]

docker-compose.yml 内容:

version : ''3.8''
services:
  ybss-auth:
    container_name: ybss-auth
    build:
      context: ./ybss/auth
      dockerfile: dockerfile
    ports:
      - "19200:9200"
    volumes:
      - /home/ybss/ybss/auth/jar:/home/ybss

networks:
  ybss_default:
    driver: bridge

volumes挂载目录/home/ybss/ybss/auth/jar,有更新时,只需要把更新jar和文件替换即可。

部署脚本shell:

#!/bin/sh
auth(){
  chmod 777 -R ./ybss/auth/*
  docker-compose up -d ybss-auth
}
stop(){
    docker-compose stop
}
case "$1" in
"auth")
    auth
;;
"s")
    stop
;;

docker - dockerfile构建一个简单的springboot应用镜像

docker - dockerfile构建一个简单的springboot应用镜像

      在前面的 《docker - 构建一个简单的docker镜像》中,介绍了两种构建镜像的方法,其中,通过dockerfile文件构建镜像是在实际生产中常用的;除此之外,还通过 docker - Dockerfile常用指令 和  docker - 常用命令 两篇文章介绍了dockerfile的指令和docker的常用命令,接下来,我们将会使用所学的知识构建一个简单的springboot应用。

    该springboot应用对外暴露了一个api,对外暴露8080端口,日志文件写在应用当前目录,部分代码以及配置文件如下:

@Slf4j
@SpringBootApplication
@RestController
public class SpringbootDockerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDockerApplication.class, args);
    }

    @RequestMapping("/docker")
    public String docker() {
        log.info("access docker home at " + LocalTime.now());
        return "Hello Docker!";
    }
}

application.properties

spring.application.name=springboot-docker
server.port=8080
logging.file=app.log

把jar和dockerfile文件上传到一个springboot-docker目录中

[root@localhost springboot-docker]# ls
Dockerfile  springboot-docker-1.0.jar

Dockerfile:

FROM openjdk:8u181-jdk-alpine
ARG workdir=/app
VOLUME ${workdir}
WORKDIR ${workdir}
ADD springboot-docker-1.0.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
  • FROM openjdk:8u181-jdk-alpine : 从docker仓库中获取基础镜像
  • ARG workdir=/app : 添加变量,该变量只在当前的dockerfile中有效,如果换成ENV,则在容器中生效。这里需要注意的是,ARG和ENV对哪些指令是起效的,可以参考  docker - Dockerfile常用指令 
  • VOLUME ${workdir} : 把宿主机的目录(该目录可以通过docker inspect dockerName查看)挂载到容器中的/app这个目录,这样可以在宿主机中查看该目录的内容。还有一个很重要的原因,就是数据持久化,如果不挂载,当容器关闭删除后,数据将会跟着被删除。这里因为/app是应用所在的目录,该目录会产生日志等其它内容。
  • WORKDIR ${workdir} :指定工作目录,下面的指令操作将在这个指定目录中执行。还有一点是,当通过交互模式的exec命令进入到该容器时,默认当前路径是/app
  • ADD springboot-docker-1.0.jar app.jar : 添加文件到WORKDIR
  • EXPOSE 8080 : 暴露8080端口,需要通过容器IP和端口访问应用。如果想通过宿主机的IP和端口访问应用,需要在RUN容器的时候绑定。可以参考docker - Dockerfile常用指令 的run命令
  • ENTRYPOINT: 运行容器后执行的第一条命令,这里通过java -jar命令运行应用。

接下通过BUILD命令构建镜像

[root@localhost springboot-docker]# docker build -t springboot-docker:1.0 .

Sending build context to Docker daemon  17.85MB
Step 1/7 : FROM openjdk:8u181-jdk-alpine
 ---> 97bc1352afde
Step 2/7 : ARG workdir=/app
 ---> Using cache
 ---> a3818e8696c2
Step 3/7 : VOLUME ${workdir}
 ---> Using cache
 ---> e2faefe34aa6
Step 4/7 : WORKDIR ${workdir}
 ---> Using cache
 ---> 144b537c1b57
Step 5/7 : ADD springboot-docker-1.0.jar app.jar
 ---> Using cache
 ---> daca849e1012
Step 6/7 : EXPOSE 8080
 ---> Using cache
 ---> 123da0847dd3
Step 7/7 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
 ---> Using cache
 ---> de46a3f96d91
Successfully built de46a3f96d91
Successfully tagged springboot-docker:1.0

查看当前本地仓库的镜像,已经构建springboot-docker:1.0镜像

[root@localhost springboot-docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
springboot-docker   1.0                 de46a3f96d91        38 minutes ago      121MB
openjdk             8u181-jdk-alpine    97bc1352afde        5 weeks ago         103MB

运行镜像

docker run -p 8080:8080 -d --name springboot-docker springboot-docker:1.0

通过-p参数,把容器中的8080端口映射到宿主机中的8080端口。--name,给容器起一个名字

可以查看springboot应用的启动情况

docker logs -f springboot-docker 

查看容器的运行情况

docker inspect springboot-docker

只看一些关键的信息

"Mounts": [
            {
                "Type": "volume",
                "Name": "90df5c82f11290eddfc86faead12e4a79649672845b2a816e04f868da76851a3",
                "Source": "/var/lib/docker/volumes/90df5c82f11290eddfc86faead12e4a79649672845b2a816e04f868da76851a3/_data",
                "Destination": "/app",
                "Driver": "local",
            }
        ],
"Networks": {
	"bridge": {
		"Gateway": "172.17.0.1",
		"IPAddress": "172.17.0.2",
	}
}

    宿主机中的 /var/lib/docker/volumes/90df5c82f11290eddfc86faead12e4a79649672845b2a816e04f868da76851a3/_data 目录挂载到 容器的 /app目录

    容器的IP地址 172.17.0.2

    运行成功后,在宿主机中通过命令访问服务

curl 172.17.0.2:8080/docker

    也可以通过宿主机的IP或者localhost访问,因为已经绑定

curl 127.0.0.1:8080/docker

 

 

关于Dockerfile 部署 springboot 项目 流程dockerfile构建springboot项目的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于20 分钟学会 Docker 部署 SpringBoot 项目、62-docker-compose 结合 dockerfile 部署 springboot 应用、62-docker-compose 结合dockerfile 部署springboot应用、docker - dockerfile构建一个简单的springboot应用镜像等相关知识的信息别忘了在本站进行查找喔。

本文标签: