记一次idea+Dockerfile+docker部署


软件版本:idea:2019.3,docker:19.03.9,服务器:centos7.8

1.centos7服务器配置
在服务器上编辑docker文件
vi /usr/lib/systemd/system/docker.service
修改以ExecStart开头的行
ExecStart=/usr/bin/dockerd  -H tcp://0.0.0.0:2375   -H unix://var/run/docker.sock
 
如果是centos7以下的直接添加-H tcp://0.0.0.0:2375
 
修改后保存文件,然后重启docker
systemctl daemon-reload
systemctl  restart docker
 
 
然后开端口或者关闭防火墙,二选其一即可
firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-reload
 
关闭防火墙
chkconfig iptables off
2.idea 安装docker 插件
  添加docker  tcp socket 填写Engine API URL: tcp://ip:2375   其他的默认就可以
 
3.使用docker 部署boot项目
 在springboot项目的根目录下添加docker文件夹并创建Dockerfile文件
文件内容为:
 1 # 基础镜像
 2 FROM java:8
 3 #维护者信息
 4 MAINTAINER CLOVER
 5 # 复制打包完成后的jar文件到/home目录下
 6 ADD krt.jar /home/app.jar
 7 # 挂载/home/file目录到主机
 8 #VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。
 9 #这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
10 VOLUME /home/file
11 # 设置时区
12 RUN echo "Asia/Shanghai" > /etc/timezone
13 #映射8888端口到本机的8099端口
14 EXPOSE  8888
15 #bash方式执行,使krt.jar可访问
16 # RUN新建立一层,在其基础上执行这些命令,执行结束后,commit这一层的修改,构成新的镜像
17 RUN bash -c 'touch /home/krt.jar'
18 # 启动容器时执行
19 #为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT
20 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/home/app.jar"]

 

修改pom文件将build部分修改如下:
   
 1 <build>
 2         <plugins>
 3             <plugin>
 4                 <groupId>org.springframework.boot</groupId>
 5                 <artifactId>spring-boot-maven-plugin</artifactId>
 6                 <!--加入下面两项配置-->
 7                 <executions>
 8                     <execution>
 9                         <goals>
10                             <goal>repackage</goal>
11                         </goals>
12                     </execution>
13                 </executions>
14                 <configuration>
15                     <includeSystemScope>true</includeSystemScope>
16                 </configuration>
17             </plugin>
18             <plugin>
19                 <groupId>com.spotify</groupId>
20                 <artifactId>docker-maven-plugin</artifactId>
21                 <version> 1.2.1</version>
22                 <!--将插件绑定在某个phase执行-->
23                 <executions>
24                     <execution>
25                         <id>build-image</id>
26                         <!--将插件绑定在package这个phase上,也就是说,用户只需要执行mvn package,就会自动执行mvn docker:build-->
27                         <phase>package</phase>
28                         <goals>
29                             <goal>build</goal>
30                         </goals>
31                     </execution>
32                 </executions>
33                 <configuration>
34                     <!--指定生成的镜像名-->
35                     <imageName>clover/${project.artifactId}</imageName>
36                     <!--指定标签-->
37                     <imageTags>
38                         <imageTag>latest</imageTag>
39                     </imageTags>
40                     <!--指定Dockerfile 的位置,${project.basedir}:项目的根路径下-->
41                     <dockerDirectory>${project.basedir}/src/main/resources/docker</dockerDirectory>
42                     <!--指定远程docker api地址-->
43                     <dockerHost>http://192.168.1.4:2375</dockerHost>
44                     <resources>
45                         <resource>
46                             <!--容器中自定义jar包存放的位置,及对应的target目录-->
47                             <targetPath>/</targetPath>
48                             <!--本地jar包所在路径-->
49                             <directory>${project.build.directory}</directory>
50                             <!--需要包含本地jar包名称,对应的是Dockerfile中添加的文件名-->
51                             <include>${project.build.finalName}.jar</include>
52                         </resource>
53                     </resources>
54                     <!--以下两行是为了docker push到DockerHub使用的-->
55                     <!--<serverId>docker-hub</serverId>
56                     <registryUrl>https://index.docker.io/v1</registryUrl>-->
57                 </configuration>
58             </plugin>
59         </plugins>
60         <!-- jar包名称 -->
61         <finalName>app</finalName>
62     </build>

4.配置idea运行Dcokerfile

 
运行配置后了的Dockerfile( 我之前不明白为什么执行了打包为什么只是生成了image没有生成container.困惑了好久,有点混乱;正确的理解应该是在pom的文件中已经定义了打包成image.而Dockerfile才是create container 并运行iamge的)
 
idea的server的docker部分会有日志


访问容器所在服务器ip:映射到服务器的端口/项目名 所以这个项目的访问地址为http://192.168.1.4:8099/app

5.遇到的问题以及备注:
5.1.执行报错,提示:
Building image...
Preparing build context archive...
[==================================================>]1/1 files
Done


Sending build context to Docker daemon...
[==================================================>]  438.0B
Done


Step 1/5 : FROM java:8
---> d23bdf5b1b1b
Step 2/5 : ADD app.jar /home/krt/app.jar
Error response from daemon: ADD failed: stat /home/software/docker/tmp/docker-builder635425878/app.jar: no such file or directory
原因:
ADD    命令 
ADD [SOURCE] [TARGET]
source 是相对于Dockerfile的文件的相对位置的jar包的路径
target 指的是最终运行的容器的目录的位置,一个新的容器是不会有自定义的文件夹/home/docker
所以要么在ADD    命令之前添加文件夹,要么将目标jar包放到基础linux目录的目录下面,比如/home/,/opt/ 等
 
5.2.看到有的人在配置Dockerfile的时候会在Excutable项下的command选项加上-t
command : 指的是在容器运行时加载的其它指令,这里的指令为:
-t       (--tty=false 分配tty设备,该可以支持终端登录)运行的时候执行命令



免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM