Docker运维笔记三:IDEA使用Docker插件远程部署SpringBoot

探索学习SpringBoot使用IDEA-Docker远程部署过程,已在虚拟机上安装好了Docker,此篇文章从配置docker远程连接端口写起。

一、配置docker远程连接端口

1、修改docker.service文件
  vi /usr/lib/systemd/system/docker.service

找到 ExecStart,在最后面添加 -H tcp://0.0.0.0:2375,如下图所示

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
2、重新加载配置文件,重启服务
#重新加载配置文件
systemctl daemon-reload
# 重启服务
systemctl restart docker.service
# 查看端口是否开启
netstat -nlpt

查看端口是否开启,如下图所示:

[root@localhost ~]# vi /usr/lib/systemd/system/docker.service
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker.service
[root@localhost ~]# netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1016/nginx: master
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      993/sshd     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1087/master  
tcp6       0      0 :::2375                 :::*                    LISTEN      1487/dockerd 
tcp6       0      0 :::22                   :::*                    LISTEN      993/sshd     
tcp6       0      0 ::1:25                  :::*                    LISTEN      1087/master  

3、开放端口
#检查端口是否打开
firewall-cmd --query-port=2375/tcp
#临时打开端口
firewall-cmd --add-port=2375/tcp
#永久打开端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent  

二、IDEA配置

1、安装插件Docker integration,重启
2、连接远程Docker
图片.png

配置好后页面下方会出现Docker工具栏(如IDEA没有点击view-Tool Windows可调出来)

图片.png
3、新建Springboot项目(步骤不赘述)
4、配置pom文件
<build>
        <finalName>${project.parent.artifactId}-${project.parent.version}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <configuration>
                            <tasks>
                                <copy todir="src/main/docker" file="target/${project.artifactId}-${project.version}.${project.packaging}"></copy>
                            </tasks>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
5、在src/main目录下创建docker目录,并创建Dockerfile文件
FROM openjdk:8-jdk-alpine
ADD *.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
6、增加配置
图片.png
图片.png

命令解释:

  • Image tag : 指定镜像名称和tag,镜像名称为 docker-workapi,tag为1.1
  • Bind ports : 绑定宿主机端口到容器内部端口。格式为[宿主机端口]:[容器内部端口]
  • Bind mounts : 将宿主机目录挂到到容器内部目录中。格式为[宿主机目录]:[容器内部目录]。这个springboot项目会将日志打印在容器 /home/developer/app/logs/ 目录下,将宿主机目录挂载到容器内部目录后,那么日志就会持久化容器外部的宿主机目录中。
7、使用Maven打包
图片.png
8、运行Docker
图片.png

过程:先pull基础镜像,然后再打包镜像,并将镜像部署到远程docker运行

8、启动成功
图片.png

可以访问到接口

图片.png
9、日志查看
图片.png

三、使用Nginx反向代理请求Docker容器里运行的jar

1、nginx添加配置后reload
server {
        listen       80;
        server_name  192.168.197.90;
        charset utf-8;
       
        location /yimall {
            alias /www/web/www.yimall.pro/dist;
            try_files $uri $uri/ /index.html last;
            index index.html;
        }

        location /api {
            proxy_pass http://127.0.0.1:8081;
        }

        access_log  /www/logs/www.yimall.log;
        error_log  /www/logs/www.yimall.error.log;
    }
2、docker配置宿主机端口到容器内部端口
情况一:没用到nginx反向代理,直接请求宿主机8081端口

如果是下图,HoastIP不填,其映射结果为 0.0.0.0:8081->8081/tcp,此时宿主机的8081端口开启,需要这样访问 http://192.168.197.90:8081/api/member/get/113

图片.png
图片.png
情况二:用nginx反向代理,请求宿主机80端口,代理到8081端口

如果是下图,HoastIP填127.0.0.1,其映射结果为 127.0.0.1:8081->8081/tcp,此时宿主机的8081端口未对外开放,访问 http://192.168.197.90/api/member/get/113,会被nginx反向代理到 http://127.0.0.1:8081/api/member/get/113,即可访问接口API

图片.png
图片.png

四、遇到的问题

启动容器时,控制台报错如下:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.class]: Invocation of init method failed; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

Caused by: java.net.NoRouteToHostException: Host is unreachable (Host unreachable)

解决:打开服务器3306端口

#临时打开端口
firewall-cmd --add-port=3306/tcp
#永久打开端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容