服务器前提环境:服务器安装docker、配置docker远程连接端口
vi /usr/lib/systemd/system/docker.service
需要修改的部分:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
修改后:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
重启docker,使修改生效
systemctl daemon-reload
systemctl restart docker
开放2375端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --reload
IDEA前提环境:以2019.3.3版本为例,该版本自带了Docker的plugin,在如下位置填写服务器地址即可
使用Maven插件为SpringBoot应用构建Docker镜像
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 跳过单元测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.14</version>
<configuration>
<imageName>renren/admin</imageName>
<dockerHost>http://服务器IP:2375</dockerHost>
<dockerDirectory>${project.basedir}</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
<!-- 运行命令 mvn clean package docker:build 打包并生成docker镜像 -->
</plugin>
</plugins>
</build>
编写Dockerfile
FROM java:8
EXPOSE 8080
VOLUME /tmp
ADD renren-admin.jar /app.jar
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
RUN bash -c 'touch /app.jar'
# 启动命令 读取prod配置
ENTRYPOINT ["java","-jar","/app.jar","--spring.profiles.active=prod"]
在Terminal窗口运行命令 mvn clean package docker:build 打包并生成docker镜像
查看服务器docker镜像 docker images
启动容器
docker run -p 8080:8080 --name renren-admin --link mysql:db --net mysql_default -v /mydata/app/renren-admin/logs:/mydata/app/renren-admin/logs -d renren/admin
--link 容器名:别名 --net xxx_default
Docker 在启动一个容器时,会为其创建一个默认网络-containerName_defaul
,所以使用--link
方式互联容器时由于默认不在一个网络中,会报上述错误,解决办法即添加--net XX_default
,使新的container与link目标在同一个网络中。
java代码相关配置,数据库连接使用别名
将日志挂载到宿主机
查看日志,启动成功