对于想了解springboot部署docker项目的读者,本文将提供新的信息,我们将详细介绍springboot部署到docker,并且为您提供关于20分钟学会Docker部署SpringBoot项目
对于想了解springboot 部署 docker 项目的读者,本文将提供新的信息,我们将详细介绍springboot部署到docker,并且为您提供关于20 分钟学会 Docker 部署 SpringBoot 项目、docker 中部署 springboot 项目,并且外部访问、docker 的学习笔记 (二)- 部署一个 springboot 项目、docker 部署 springboot 项目的有价值信息。
本文目录一览:- springboot 部署 docker 项目(springboot部署到docker)
- 20 分钟学会 Docker 部署 SpringBoot 项目
- docker 中部署 springboot 项目,并且外部访问
- docker 的学习笔记 (二)- 部署一个 springboot 项目
- docker 部署 springboot 项目
springboot 部署 docker 项目(springboot部署到docker)
DockerFile
FROM centos
ENV LANG C.UTF-8
COPY java /opt/java
RUN mkdir config
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["/opt/java/bin/java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
操作步骤
Springboot 制作镜像
1 环境
要求必须要由 docker 环境,并且版本为
目前环境为 root:192.168.3.212
1.1 查看 docker 版本号
docker --version
2 打包 docker 镜像
2.1 复制文件夹
不允许修改 /home/springboot 下的任何内容,每个项目复制一个文件夹,/home/springboot 类似一个模板。
/home/gs:每个项目一个文件夹
cp -r /home/springboot /home/gs
2.2 进入 docker 文件夹
cd /home/gs/
2.3 copy jar 包
把 jar 包 复制到 /home/gs 下
2.4 打成镜像
aa: 镜像名,每个项目自己命名自己的项目名, 镜像名只能小写。
fos.jar 是 jar 包名字
“docker build .” 后面必须有一个空格
docker build . -t aa --build-arg JAR_FILE=fos.jar --no-cache
2.5 创建并启动容器
docker run -d -p 8083:8080 -v /opt/conf:/config aa:latest /bin/bash --name abc
8083: 宿主机端口 , 当端口冲突时,换个名字。
8080:为服务端口,根据项目自己指定。
/opt/conf:/config:红色的是本地目录
--name abc: 容器名字
2.6 验证配置文件目录
2.6.1 写入本地磁盘
echo "sdfsfd" > /opt/conf/aa
2.6.2 登陆 docker 容器
docker ps: 查看当前运行的容器
docker exec -it 58014e967dd1 /bin/bash:登陆容器
2.6.3 查看容器里的 aa 文件
cat /opt/config/aa
3 验证
3.1 查看日志
docker logs 77684fe303a6,查看日志是否启动成功。
3.2 访问地址
8083: 宿主机端口
http://192.168.3.212:8083
4 导出镜像
4.1 保存
docker save -o 项目名.tar 镜像名
4.2 导入
docker load < springadmin.tar
5 例外
5.1 注意事项
copy 里的源目录必须在当前目录里
5.2 前后端分离项目
把项目 copy 到 webapps 下
打开 Dockerfile
#当有静态文件项目时,删除 #, 修改 staticDir 为真实目录
#COPY staticDir /opt/tomcat9/webapps/
5.3 镜像启动端口被占
docker run -d -p 8083:8080 -v /opt/conf:/opt/config aa:latest /bin/bash --name abc
8083: 修改宿主机端口为其他端口。
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
docker 中部署 springboot 项目,并且外部访问
1、docker 安装好之后,先下载几个常用镜像,比如 java,docker pull java:8,因为运行项目需要用到 java 环境,先把 java 镜像下载下来,方便以此为基础构建新的镜像。
2、准备 springboot 的 jar 包。这个其实是基本操作,在 eclipse 里新建一个 spring boot 项目,在其 pom.xml 文件目录下执行 cmd 命令
mvn clean install -Dmaven.test.skip
便打好了 jar 包,在 target 目录下可以找到 jar 包,名为 demo.jar
3、准备 dockerfile 文件,注意此文件没有后缀,编辑内容,在里面加上
FROM java:8
workdir /app
add /demo.jar ./demo.jar
env LOGPATH=/app/log/demo.log \
PROT=8080
cmd java -jar /app/demo.jar
简单解释下 dockerfile 里面的内容, from 是指以一个基础镜像为基础,这里以一个基础镜像 java8 为基础。workdir 是工作目录。add 是指把这个 demo.jar 添加到容器里面 第一个 demo.jar 是宿主机里面准备好的 jar,第二个 demo.jar 是 cp 到 docker 里面的 jar 包。cmd 命令是,是指打好了镜像之后,运行这个 jar 包启动项目。
4、在 linux 目录下新建文件夹,存放这些文件,我新建的文件夹叫做 my,这里叫啥都行
mkdir my
进入文件夹
cd my
把 demo.jar 和 dockerfile 拷贝到 my 里面去(拷贝方法可以用 xshell 里的 xftp)
5、在这个目录下执行命令,我起名字叫做 mydocker,这个可以随便起名字。这个是构建镜像的命令,注意后面有个点,代表在此目录下。
docker build -t mydocker .
6、运行 docker
docker run -d -p 4567:8080 mydocker
注意端口号顺序,4567 是指在 doucker 暴露在外部的端口,8080 是指 docker 里面的项目的端口
7、访问 192.168.124.16:4567/get 就可以了。
192.168.124.16 是我的虚拟机的 ip,4567 是端口号,get 是我的项目里面定义的一个接口名称
docker 的学习笔记 (二)- 部署一个 springboot 项目
部署一个 springboot 项目
1. 在 dockerHub 上面拉取镜像
docker pull jetty
2. 运行容器
docker run --name dems -v /opt/data:/tmp -p 8080:8080 -v /etc/localtime:/etc/localtime -d java java -jar -Duser.timezone=Asia/Shanghai /tmp/demo.jar
注释:--name 容器名称
-v /opt/data 项目 jar 放的位置
-p 端口映射 8080 映射到服务器的 8080 端口 -p 80:8080 表示将容器的 8080 端口映射到主机的 80 端口
3. 查看日志
docker logs -f --tail=100 容器名
4. 若果报错,可以删除之前的容器,重新开始
docker rm 容器名称
5. 可以查找一些镜像
docker search 镜像名称
6. 访问项目
docker 部署 springboot 项目
# 安装docker
[菜鸟教程](http://www.runoob.com/docker/macos-docker-install.html)
# springboot项目
maven依赖
```xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>boottest</groupId>
<artifactId>com.ityang.boot</artifactId>
<version>1.0-SNAPSHOT</version>
<name>boottest</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
```
启动和rest服务类
```java
@SpringBootApplication
@RestController
public class StartApp {
public static void main(String[] args) {
SpringApplication.run(StartApp.class, args);
}
@RequestMapping("/")
public String index() {
return "hello spring boot";
}
}
```
启动项目,浏览器访问 localhost:8080

# 编写Dockerfile
在项目 `/src/main`目录下新建目录docker,在`/src/main/docker`下新建文件 Dockerfile,内容为:
```
# 基础镜像 这里使用国内网易镜像
FROM hub.c.163.com/dwyane/openjdk:8
#挂载宿主/tmp目录到容器的/tmp目录
VOLUME /tmp
# 拷贝文件(maven打包后的jar文件),并重命名为 app.jar
ADD com.ityang.boot-1.0-SNAPSHOT.jar app.jar
# 启动容器后执行一些命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
```
# 项目添加docker-maven-plugin插件
```xml
<!-- Docker maven plugin start -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<!--[a-z 0-9] 不然docker:build会报错-->
<imageName>dockerspringboot</imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Docker maven plugin end -->
```
需要注意的是,镜像名称必须为 a-z(小写)和0-9 的值,否则docker:build 报错
# 构建镜像文件
执行命令:
```
$ mvn clean package docker:build
```
或者分开执行:
```
$ mvn clean package
$ mvn docker:build
```
部分控制台信息:
```
[INFO] --- docker-maven-plugin:0.4.13:build (default-cli) @ com.ityang.boot ---
[INFO] Copying /Users/yangzhenlong/projs/my/boot-test/target/com.ityang.boot-1.0-SNAPSHOT.jar -> /Users/yangzhenlong/projs/my/boot-test/target/docker/com.ityang.boot-1.0-SNAPSHOT.jar
[INFO] Copying /Users/yangzhenlong/projs/my/boot-test/src/main/docker/Dockerfile -> /Users/yangzhenlong/projs/my/boot-test/target/docker/Dockerfile
[INFO] Building image dockerspringboot
Step 1/4 : FROM hub.c.163.com/dwyane/openjdk:8
---> 96cddf5ae9f1
Step 2/4 : VOLUME /tmp
---> Running in 0dab3c046923
Removing intermediate container 0dab3c046923
---> 2e62fad6a16a
Step 3/4 : ADD com.ityang.boot-1.0-SNAPSHOT.jar app.jar
---> a966ed4c8748
Step 4/4 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
---> Running in 4ec1c4990022
Removing intermediate container 4ec1c4990022
---> 02b677ad12e1
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built 02b677ad12e1
Successfully tagged dockerspringboot:latest
[INFO] Built dockerspringboot
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.475 s
[INFO] Finished at: 2018-11-17T01:24:57+08:00
[INFO] ------------------------------------------------------------------------
```
# 通过docker镜像启动容器
查看镜像
```
$ docker images
```
|REPOSITORY | TAG | IMAGE ID | CREATED | SIZE|
|---|---|---|---|---|
|dockerspringboot | latest | 02b677ad12e1 | 8 seconds ago | 657MB|
启动容器
```
$ docker run -p 8080:8080 -d dockerspringboot
cbc89f9e0cd584f1405d7177098423f5b576d668f7aee6ff7dfb5b4e34154862
```
解释:
```
-p 8080:8080 #容器端口映射到宿主端口,格式为:主机(宿主)端口:容器端口
-d #后台运行容器,并返回容器ID
```
查看运行的容器
```
$ docker ps
```
CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES
---|---|---|---|---|---|---
cbc89f9e0cd5 | dockerspringboot | "java -Djava.securit…" | 58 seconds ago | Up 58 seconds | 0.0.0.0:8001->8001/tcp | frosty_lichterman
浏览器访问 loalhost:8080

今天的关于springboot 部署 docker 项目和springboot部署到docker的分享已经结束,谢谢您的关注,如果想了解更多关于20 分钟学会 Docker 部署 SpringBoot 项目、docker 中部署 springboot 项目,并且外部访问、docker 的学习笔记 (二)- 部署一个 springboot 项目、docker 部署 springboot 项目的相关知识,请在本站进行查询。
本文标签: