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端口供服务请求使用

添加规则之后再次请求,总算成功了,不容易。

转载于:https://my.oschina.net/LaravelShao/blog/1603147

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在将本地 Docker 镜像推送至腾讯云 CVM 云服务器之前,需要进行以下几个步骤: 1. 在腾讯云 CVM 云服务器上安装 Docker,并启动 Docker 服务。 2. 在腾讯云 CVM 云服务器上创建 Docker 镜像仓库(如果还没有创建)。 接下来,可以按照以下步骤将本地 Docker 镜像推送至腾讯云 CVM 云服务器: 1. 将本地 Docker 镜像打标签,标明要推送到的 Docker 镜像仓库地址,例如: ``` $ docker tag [本地镜像名称] [腾讯云CVM云服务器镜像仓库地址]/[镜像名称]:[标签] ``` 其中,`[本地镜像名称]` 是本地已经构建好的 Docker 镜像名称;`[腾讯云CVM云服务器镜像仓库地址]` 是在腾讯云 CVM 云服务器上创建的 Docker 镜像仓库地址;`[镜像名称]` 和 `[标签]` 可以自定义。 2. 登录腾讯云 Docker 镜像仓库,例如: ``` $ docker login --username=[腾讯云账号名称] --password=[腾讯云账号密码] [腾讯云CVM云服务器镜像仓库地址] ``` 其中,`[腾讯云账号名称]` 和 `[腾讯云账号密码]` 是腾讯云账号的用户名和密码;`[腾讯云CVM云服务器镜像仓库地址]` 是在腾讯云 CVM 云服务器上创建的 Docker 镜像仓库地址。 3. 推送本地 Docker 镜像到腾讯云 Docker 镜像仓库,例如: ``` $ docker push [腾讯云CVM云服务器镜像仓库地址]/[镜像名称]:[标签] ``` 其中,`[腾讯云CVM云服务器镜像仓库地址]`、`[镜像名称]` 和 `[标签]` 与第一步打标签时保持一致。 推送完成后,在腾讯云 CVM 云服务器上可以使用以下命令拉取 Docker 镜像: ``` $ docker pull [腾讯云CVM云服务器镜像仓库地址]/[镜像名称]:[标签] ``` 同样,`[腾讯云CVM云服务器镜像仓库地址]`、`[镜像名称]` 和 `[标签]` 与前面的步骤保持一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值