原创

使用Idea部署SpringBoot应用到Docker

这里仅仅是个简单的入门部署,SpringBoot应用并没有配置Mysql和Redis其他的连接操作。后面的教程会逐渐发布。
百度云ECS Centos7
Docker version 1.13.1, build 7f2769b/1.13.1

准备条件

  • SpringBoot应用一个
  • Docker已经安装过,没有安装过的查看 Docker的安装
  • 我这里的Docker是处于运行状态的,因此一会的命令是重启Docker,而不是运行Docker,查看 Docker的常用命令

    开放Docker的远程连接

    修改配置文件

    先备份docker配置:
cp /usr/lib/systemd/system/docker.service /usr/lib/systemd/system/docker.service_bak

编辑docker.service :

 vi /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd-current 后增加 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

完整的配置文件

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service
Requires=docker-cleanup.timer

[Service]
Type=notify
NotifyAccess=main
EnvironmentFile=-/run/containers/registries.conf
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
          --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
          --default-runtime=docker-runc \
          --exec-opt native.cgroupdriver=systemd \
          --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
          --init-path=/usr/libexec/docker/docker-init-current \
          --seccomp-profile=/etc/docker/seccomp.json \
          $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $ADD_REGISTRY \
          $BLOCK_REGISTRY \
          $INSECURE_REGISTRY \
      $REGISTRIES
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
KillMode=process

[Install]
WantedBy=multi-user.target

如果你的配置文件和我的不太一样,则可能是版本的原因,可以参考:Docker开启远程访问(CentOS系统)
其他版本Docker开放Remote API
说明:这里面有个坑,我这个版本的Docker不能加注释,我加了句注释再重启Docker的时候就会报错,如下错误:

[root@instance-ubphse5x ~]# systemctl restart docker
Failed to restart docker.service: Unit is not loaded properly: Invalid argument.
See system logs and 'systemctl status docker.service' for details.

其他错误:
centos7下docker启动出错
我的deamon.json 长这样,里面什么内容也没有:

千万不要像网上说的什么重装Docekr,如果你安装完Docker是正常启动的,这个时候修改了配置文件就出现错误,说明是配置文件的问题,我们之前已经将配置文件备份过了,可以重新拉过来启动下,正常的话就是修改的有问题。因此一定检查配置文件,以免重复劳作。

重新启动服务

重启docker网络

 sudo systemctl daemon-reload

重启docker服务

 systemctl restart docker

测试2375是否通

服务器本地测试

curl http://127.0.0.1:2375

如下:

[root@instance-ubphse5x ~]# curl http://127.0.0.1:2375
{"message":"page not found"}

外网测试:
服务器ip:2375
如: http://182.61.22.136:2375/
返回的结果和上面相同。这里有个坑,我是用360浏览器访问不到,使用Google浏览器却可以。看下图:

如果你访问不到,就要检查两个地方

  1. 服务器2375端口是否开放 ,Linux下Centos7对外开放端口
  2. 检查服务器安全组策略。不同的服务器厂商策略不同。阿里和腾讯默认是不开放这些端口的而且有默认的安全组策略,但是百度智能云确时开放的,将服务器的所有端口都哦开放,而且没有默认的安全组。具体的设置需要登陆控制台去查看设置情况。

IntelliJ IDEA 相关

安装idea的docker插件

setting -> Plugins 中安装 docker插件

注意:安装完后需要重启Idea才能生效

配置idea连接docker服务

点击+,添加一个连接

我们通过tcp的方式连接到docker服务。信息配置好后,idea会自动检测。然后会输出connection successful

然后再工具栏选择docker的窗口,点击运行,这个时候我们就可以在Idea中操作Docker了!

点击绿色箭头,就可以启动Docker,我们可以查看到容器和镜像的相关信息,如下图:

配置Docker的启动项

说明:好多网上的文章都需要在pom文件中进行添加插件,其实完全没有这个必要。因为,那个插件的作用就是将打好的jar包复制出来,或者是做一些重命名的操作。我们在这里就没必要去做那一步操作,因此不需要修改pom文件的内容。

创建 Dockerfile 文件

我们在项目的根目录下常创建一个名字 Dockerfile 的文件,此文件没有后缀,项目结构如下:

先将下面的内容复制进去,可以按照说明修改。

# 基础镜像
FROM java:8

VOLUME /tmp
#向镜像中增加文件
ADD target/*.jar FirstBoot.jar
# 项目里面的端口,因为这是个web项目。所以项目起来就会有一个对外服务的端口,此时  5617:9999 9999就是这个容器的端口
EXPOSE 9999

ENTRYPOINT ["java","-jar","/FirstBoot.jar"]

命令的参数可以参考这篇文章:
编写 DockerFile

配置docker一键运行

点击Run->Run->Edit Configurations->点击+号->选择Docker->Dockerfile->然后按下图所示填写信息,填完点ok即可,如下图


点击 + 输入命令即可

如下:

clean install -Dmaven.test.skip=true

运行

选中,运行即可。

成功截图:

springboot启动打印截图

我们通过ip+端口即可访问项目

错误排查

我们通过命令窗口可以看看日志输出信息

根据错误,可以排查错误。
错误一: docker-runc not installed on system
执行以下命令

cd /usr/libexec/docker/

ln -s docker-runc-current docker-runc

参考文章
有时候时区也会出错:
主机、Docker时间与时区设置总结

本文参考文章:
IDEA中通过docker插件部署springboot项目

idea 中用Dockerfile部署 spring-boot maven应用

这篇文章也写的不错:

IDEA 一键部署spring boot项目到阿里云docker容器中

正文到此结束(点击广告是对作者最大的支持)