【轉】使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM