使用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浏览器却可以。看下图:
如果你访问不到,就要检查两个地方
- 服务器2375端口是否开放 ,Linux下Centos7对外开放端口
- 检查服务器安全组策略。不同的服务器厂商策略不同。阿里和腾讯默认是不开放这些端口的而且有默认的安全组策略,但是百度智能云确时开放的,将服务器的所有端口都哦开放,而且没有默认的安全组。具体的设置需要登陆控制台去查看设置情况。
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应用
这篇文章也写的不错: