zoukankan      html  css  js  c++  java
  • 【转】使用Dockerfile构建镜像并push到私有仓库

    环境:OS X 10.10.5

    maven 3.3.9  

    Docker version 1.12.2

    docker-machine version 0.8.2

    程序示例为http://www.cnblogs.com/modprobe/p/6001333.html 中提到的服务发现程序

    相关代码:https://github.com/li-hong/spring-cloud-demo

    一、准备工作,安装docker-toolbox

    方法:http://www.docker.com/products/docker-toolbox

    安装完毕后使用docker-machine创建一个docker运行环境的虚拟机,或者直接运行toolbox生成

    命令:

    docker-machine create --driver virtualbox default

    启动虚拟机

    docker-machine start default

    停止

    docker-machine stop default

    使用ssh登录到default

    docker-machine ssh default

    更多命令使用下面的命令进行查看

    docker-machine help

    查看docker环境

    docker-machine env

    这时候准备工作就已经完成了

    二、编写Dockerfile文件

    FROM java:8  #基础镜像
    VOLUME /tmp  #将本地文件挂载到容器
    ADD server-discovery-1.0-SNAPSHOT.jar app.jar #拷贝文件到容器
    RUN bash -c 'touch  /app.jar' #运行命令
    EXPOSE 8761 # 指定容器需要映射到宿主机器的端口
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] #容器启动后执行的命令

    三、构建镜像

    使用docker-manven-plugin构建maven镜像,可以在github中查看docker-maven-plugin的使用方法

    下面做一个大概的介绍:

    pom中增加一个plugin

    复制代码
     <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>${docker.plugin.version}</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>build</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <imageName>lhdocker.com/${project.artifactId}</imageName>
                        <baseImage>java</baseImage>
                        <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                        <dockerHost>https://192.168.99.100:2376</dockerHost>
                        <dockerCertPath>/Users/lihong/.docker/machine/machines/default</dockerCertPath>
                        <resources>
                            <resource>
                                <targetPath>/</targetPath>
                                <directory>${project.build.directory}</directory>
                                <include>${project.build.finalName}.jar</include>
                            </resource>
                        </resources>
                    </configuration>
                </plugin>
    复制代码

    注意几点

    1、dockerHost中的配置为 使用docker-machine evn命令输出的DOCKER_HOST

    2、imageName中的lhdocker.com为自己搭建的私有仓库,搭建方法见:docker registry-v2 搭建私有仓库

    3、如果要上传到私有仓库,并且启用了用户名密码登录,那么需要在 连接到default中进行登录

    docker-machine ssh default
    
    docker login lhdocker.com

    配置完毕后可以运行下面的命令构建镜像

    mvn clean package docker:build

     成功的话你会看到下面的输出

    构建镜像并上传到私有仓库

    mvn clean package docker:build  -DpushImage

    成功后你会看到下面这些额外的输出

    使用docker -images查看镜像

     进行pull测试

    至此我们使用docker-maven-plugin 构建docker镜像并上传到私有仓库的操作就完成了

    四、遇到的坑

    1、没做好环境准备,直接运行

     mvn clean package docker:build

    遇到下面的错误输出

    [ERROR] Failed to execute goal com.spotify:docker-maven-plugin:0.4.12:build (default) on project server-discovery: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: org.apache.http.conn.HttpHostConnectException: Connect to 127.0.0.1:4243 [/127.0.0.1] failed: Connection refused -> [Help 1]

    解决方式,安装docker-toolbox,并且在pom种配置dockerHost

     <dockerHost>https://192.168.99.100:2376</dockerHost>
     <dockerCertPath>/Users/lihong/.docker/machine/machines/default</dockerCertPath>

    2、运行 mvn clean package docker:build  -DpushImage 又遇到下面的错误

    [ERROR] Failed to execute goal com.spotify:docker-maven-plugin:0.4.12:build (default) on project server-discovery: Exception caught: An HTTPS URI for DOCKER_HOST must be provided to use Docker client certificates -> [Help 1]

    原因:因为registry私有仓库种配置的是自己的证书,docker是不认的,所以在default虚拟机种也需要导入改证书,方法如下

    其中lhdocker.com是做的hosts映射

    scp root@lhdocker.com:/etc/docker/certs.d/lhdocker.com/lhdocker.com.crt /etc/docker/certs.d/lhdocker.com/

    3、多看官方文档,多思考

    五、参看文档

    https://www.gitbook.com/book/wzlee/spring-cloud/details

    转载自:

    https://www.cnblogs.com/modprobe/p/6033807.html

  • 相关阅读:
    使用makeself创建安装文件
    Java类的多态机制
    LintCode 带最小值操作的栈
    js限制checkbox选中个数
    Java Collection框架—List set map 的异同世界
    利用runtime动态生成对象?
    2014-3-4 大规模无缝水陆导航图
    atitit。全局变量的设计与实现 java php的异同
    PHP从入门到精通(四)
    PHP从入门到精通(三)
  • 原文地址:https://www.cnblogs.com/appium/p/11751589.html
Copyright © 2011-2022 走看看