您的位置:首页 > 运维架构 > Docker

Docker Maven插件本地构建镜像发布至远程服务器

2018-03-31 22:13 906 查看
环境使用阿里云ECS服务器及Ubuntu 16.04进行测试

Ubuntu 16.04安装Docker

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


2.安装后查看版本信息

docker -v




3.可以从镜像仓库拉取一个测试镜像

docker pull hello-world




4.查询可用镜像

docker images




5.启动docker服务

service docker start


6.启动测试镜像

docker run hello-world




创建测试工程

1.使用IDEA生成一个基础的Spring Boot工程

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>


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


4.提供一个测试接口

@RestController
public class DemoController {

@RequestMapping("/hello")
public String hello(){
return "hello world docker";
}
}


5.构建镜像并发布到远程服务器

mvn clean package docker:build




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




7.再次尝试构建镜像发布到远程服务器,还是报连接失败

mvn clean package docker:build




解决方法:

实在不知道那还有问题,就尝试在阿里云ECS管理控制台有没有相关设置,突然看到有一个安全组配置,添加一个安全组规则





8.第三次尝试构建镜像发布到远程服务器,总算推送成功



9.查询可用镜像,存在刚才构建的镜像

docker images




10.启动当前镜像

docker run -p 8080:8080 micro-deploy-docker:latest


11.请求测试接口http://X.X.X.X:8080/hello,发现无法访问,这时需要在阿里云的安全组中开放8080端口供服务请求使用



添加规则之后再次请求,总算成功了,不容易。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息