www.91084.com

GVKun编程网logo

springboot 部署 docker 项目(springboot部署到docker)

11

对于想了解springboot部署docker项目的读者,本文将提供新的信息,我们将详细介绍springboot部署到docker,并且为您提供关于20分钟学会Docker部署SpringBoot项目

对于想了解springboot 部署 docker 项目的读者,本文将提供新的信息,我们将详细介绍springboot部署到docker,并且为您提供关于20 分钟学会 Docker 部署 SpringBoot 项目、docker 中部署 springboot 项目,并且外部访问、docker 的学习笔记 (二)- 部署一个 springboot 项目、docker 部署 springboot 项目的有价值信息。

本文目录一览:

springboot 部署 docker 项目(springboot部署到docker)

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 项目

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 项目,并且外部访问

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 项目

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 部署 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

![](https://oscimg.oschina.net/oscnet/b1ed223e407ea40cfd31e65821d527a36af.jpg)
# 编写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

![](https://oscimg.oschina.net/oscnet/5779408f950dcdc744ceb32915a4646d99b.jpg)

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

本文标签: