Dockerfile的使用以及使用Maven工程TCP構建遠程鏡像

1、Dockfile是什麼?

Dockefile是一個能夠用於編譯出Docker鏡像的一組自定義指令集合java

2、如何經過Dockerfile編譯出Docker鏡像?

這裏有必要介紹一個Maven插件dockerfile-maven-plugin,dockerfile-maven-plugin是一個用於構建和推送Docker鏡像的Maven插件。下面詳細介紹如何利用這個插件構建遠程鏡像linux

(1) 打開Docker遠程2375端口

Docker提供了Remote API,能夠經過REST接口進行Docker服務的控制,包括pull/push等全部操做,結果與本機的操做徹底同樣。使用Docker Remote API能夠經過腳本進行Docker集羣的自動化控制。
git

linux上打開遠程端口能夠參考如下連接:Docker之開啓遠程訪問的實現
github

在MAC上卻不能按照上述方式實現,因此MAC須要經過socat實現,實現命令以下docker

$ docker pull alpine/socat
$ docker run -d --restart=always \
    -p 2375:2375 \
    -v /var/run/docker.sock:/var/run/docker.sock \
    alpine/socat \
    tcp-listen:2375,fork,reuseaddr unix-connect:/var/run/docker.sock
複製代碼

若是驗證docker遠程APi是否打開,使用命令,若是打印日誌以下,則表示遠程APi端口已經打開apache

$ curl 192.168.27.180:2375/version
{"Version":"1.11.2","ApiVersion":"1.23","GitCommit":"56888bf","GoVersion":"go1.5.4",
"Os":"linux","Arch":"amd64","KernelVersion":"4.4.12-moby",
"BuildTime":"2016-06-06T23:57:32.306881674+00:00"}
複製代碼

(2) 新建Maven工程,編寫自定義Dockerfile

一、pom.xml以下

<?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>apollo-docker</groupId>
    <artifactId>apollo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <dockerfile-maven-version>1.4.12</dockerfile-maven-version>
    </properties>

    <build>
        <plugins>
            <!--Docker自動化部署插件-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>${dockerfile-maven-version}</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>build</goal>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <repository>${project.artifactId}</repository>
                    <contextDirectory>${project.basedir}</contextDirectory>
                    <buildArgs>
                        <RUN_SHELL>${project.basedir}/apollo-run.sh</RUN_SHELL>
                    </buildArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
複製代碼

二、在工程根目錄新建Dockerfile,內容以下,關於Dockerfile命令參照這篇文章Dokcerfile指令介紹

#下載openjdk jre linux環境
FROM maven:3.6.1-jdk-8-alpine
#標註做者信息
MAINTAINER guohanlin@xyz.cn
#配置linux服務器須要的環境
RUN apk add --no-cache git bash openssh-client tzdata #指定到工做目錄
WORKDIR /usr/src/app/apollo #配置環境
ENV TZ Asia/Shanghai
#定義工程遠程地址
ARG GIT_URL
ENV GIT_URL $GIT_URL
#定義分支
ARG BRANCH
ENV BRANCH $BRANCH
#工程Java VM 啓動參數
ARG VM_OPTIONS
ENV VM_OPTIONS $VM_OPTIONS
#須要啓動的服務
ARG SERVER_NAME
ENV SERVER_NAME $SERVER_NAME
#遷移啓動腳本至工做目錄
ADD ${RUN_SHELL} /usr/src/app/apollo #開始運行啓動腳本
CMD [ "bash", "apollo-run.sh" ] # replace this with your application's default port
EXPOSE $SERVER_NAME
複製代碼

關於基礎鏡像,能夠去Docker Hub上搜索bash

(3) 配置當前電腦環境變量

window爲例,配置DOCKER_HOST指向Docker服務器的2375端口,以tcp鏈接服務器

Docker環境變量

(4) 運行Maven Dockerfile編譯命令構建遠端鏡像

(5) 編譯成功以後,便可前往Docker服務器查看剛剛編譯的鏡像是否存在

相關文章
相關標籤/搜索