Docker Maven插件本地构建镜像发布至远程服务器
环境:使用阿里云ECS服务器及Ubuntu 16.04进行测试
1 Ubuntu 16.04安装Docker
1.1安装步骤
# step 1: 安装必要的一些系统工具,添加apt支持https的URLs(如不存在/usr/lib/apt/methods/https这个文件,先安装apt-transport-https包)
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
1.2安装后查看版本信息
docker -v
1.3可以从镜像仓库拉取一个测试镜像
docker pull hello-world
1.4查询可用镜像
docker images
1.5启动docker服务
service docker start
1.6启动测试镜像
docker run hello-world
2 创建测试工程
2.1使用IDEA生成一个基础的Spring Boot工程
2.2在pom文件中添加docker-maven-plugin插件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.laravelshao.springboot</groupId>
<artifactId>deploy-docker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>deploy-docker</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--docker maven 插件-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>micro-deploy-docker</imageName>
<!--注意 修改成远程服务器地址-->
<dockerHost> http://X.X.X.X:2375</dockerHost>
<dockerDirectory>docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.4</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
2.3在工程根目录下添加docker文件夹并添加Dockerfile文件
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /opt/common
ADD deploy-docker-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8080
2.4提供一个测试接口
@RestController
public class DemoController {
@RequestMapping("/hello")
public String hello(){
return "hello world docker";
}
}
2.5构建镜像并发布到远程服务器
mvn clean package docker:build
2.6查看相关博客后发现远程服务器必须开启docker远程api
解决方法:
①在/etc/systemd/system目录下新建目录docker.service.d,并新建文件http-proxy.conf,添加以下内容保存
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
②重新载入配置
systemctl daemon-reload
③重启docker服务
service docker restart
④查看docker进程,发现配置已经更新
ps -ef | grep docker
2.7再次尝试构建镜像发布到远程服务器,还是报连接失败
mvn clean package docker:build
解决方法:
实在不知道那还有问题,就尝试在阿里云ECS管理控制台有没有相关设置,突然看到有一个安全组配置,添加一个安全组规则
2.8 第三次尝试构建镜像发布到远程服务器,总算推送成功
mvn clean package docker:build
2.9查询可用镜像,存在刚才构建的镜像
docker images
2.10启动当前镜像
docker run -p 8080:8080 micro-deploy-docker:latest
2.11请求测试接口http://X.X.X.X:8080/hello,发现无法访问,这时需要在阿里云的安全组中开放8080端口供服务请求使用
添加规则之后再次请求,总算成功了,不容易。
文章来源:
Author:LaravelShao
link:https://my.oschina.net/LaravelShao/blog/1603147