環境:OS X 10.10.5html
maven 3.3.9 java
Docker version 1.12.2git
docker-machine version 0.8.2github
程序示例爲http://www.cnblogs.com/modprobe/p/6001333.html 中提到的服務發現程序spring
相關代碼:https://github.com/li-hong/spring-cloud-demodocker
1、準備工做,安裝docker-toolboxapache
方法:http://www.docker.com/products/docker-toolboxbash
安裝完畢後使用docker-machine建立一個docker運行環境的虛擬機,或者直接運行toolbox生成app
命令:dom
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
這時候準備工做就已經完成了
2、編寫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"] #容器啓動後執行的命令
3、構建鏡像
使用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>
注意幾點
一、dockerHost中的配置爲 使用docker-machine evn命令輸出的DOCKER_HOST
二、imageName中的lhdocker.com爲本身搭建的私有倉庫,搭建方法見:docker registry-v2 搭建私有倉庫
三、若是要上傳到私有倉庫,而且啓用了用戶名密碼登陸,那麼須要在 鏈接到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鏡像並上傳到私有倉庫的操做就完成了
4、遇到的坑
一、沒作好環境準備,直接運行
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>
二、運行 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/
三、多看官方文檔,多思考
5、參看文檔
https://www.gitbook.com/book/wzlee/spring-cloud/details
你們遇到問題能夠留言,一塊兒解決,一塊兒學習