如果您想了解Dockerfile部署springboot项目流程和dockerfile构建springboot项目的知识,那么本篇文章将是您的不二之选。我们将深入剖析Dockerfile部署sprin
如果您想了解Dockerfile 部署 springboot 项目 流程和dockerfile构建springboot项目的知识,那么本篇文章将是您的不二之选。我们将深入剖析Dockerfile 部署 springboot 项目 流程的各个方面,并为您解答dockerfile构建springboot项目的疑在这篇文章中,我们将为您介绍Dockerfile 部署 springboot 项目 流程的相关知识,同时也会详细的解释dockerfile构建springboot项目的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- Dockerfile 部署 springboot 项目 流程(dockerfile构建springboot项目)
- 20 分钟学会 Docker 部署 SpringBoot 项目
- 62-docker-compose 结合 dockerfile 部署 springboot 应用
- 62-docker-compose 结合dockerfile 部署springboot应用
- docker - 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 项目
我们的开源博客项目 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 应用
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应用
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 - 构建一个简单的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应用镜像等相关知识的信息别忘了在本站进行查找喔。
本文标签: