美文网首页自动化测试
Dockerfile的使用以及使用Maven工程TCP构建远程镜

Dockerfile的使用以及使用Maven工程TCP构建远程镜

作者: RmondJone | 来源:发表于2019-10-17 10:37 被阅读0次

    一、Dockfile是什么?

    Dockefile是一个可以用于编译出Docker镜像的一组自定义指令集合

    二、如何通过Dockerfile编译出Docker镜像?

    这里有必要介绍一个Maven插件dockerfile-maven-plugin,dockerfile-maven-plugin是一个用于构建和推送Docker镜像的Maven插件。下面详细介绍如何利用这个插件构建远程镜像

    (1) 打开Docker远程2375端口

    Docker提供了Remote API,可以通过REST接口进行Docker服务的控制,包括pull/push等所有操作,结果与本机的操作完全一样。使用Docker Remote API可以通过脚本进行Docker集群的自动化控制。

    linux上打开远程端口可以参考以下链接:Docker之开启远程访问的实现

    在MAC上却不能按照上述方式实现,所以MAC需要通过socat实现,实现命令如下

    $ 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端口已经打开

    $ 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

    1、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>
    

    2、在工程根目录新建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上搜索

    (3) 配置当前电脑环境变量

    window为例,配置DOCKER_HOST指向Docker服务器的2375端口,以tcp连接

    Docker环境变量

    (4) 运行Maven Dockerfile编译命令构建远端镜像

    image

    (5) 编译成功之后,即可前往Docker服务器查看刚刚编译的镜像是否存在

    image

    相关文章

      网友评论

        本文标题:Dockerfile的使用以及使用Maven工程TCP构建远程镜

        本文链接:https://www.haomeiwen.com/subject/bermmctx.html