使用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://my.oschina.net/u/3023307/blog/783544

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Docker镜像上传到私有仓库,需要按照以下步骤进行操作: 1. 登录到私有仓库使用终端或命令行界面登录到私有仓库。这通常涉及使用"docker login"命令,并提供仓库的URL、用户名和密码。 2. 构建Docker镜像:在本地环境中构建Docker镜像。可以使用Dockerfile来定义构建规则,并使用"docker build"命令进行构建构建完成后,会生成对应的镜像ID。 3. 为镜像添加标签:为将要上传的镜像添加标签,以便将其与私有仓库中的目标仓库进行关联。使用"docker tag"命令,将本地镜像ID与目标仓库名称和版本进行关联。 4. 上传镜像私有仓库使用"docker push"命令将带有标签的镜像上传到私有仓库。这将使用之前的登录凭据,将镜像上传到您指定的目标仓库。 5. 验证镜像上传:登录到私有仓库,查看上传的镜像是否出现在仓库中。可以使用仓库的Web界面或相应的命令行工具进行验证。 需要注意以下几点: - 确保您具有上传镜像的权限,这包括正确的用户名和密码,以及私有仓库的访问权限。 - 镜像的标签需要与目标仓库名称和版本相关联,以便在上传时进行正确的识别和归类。 - 上传镜像的时间取决于网络连接的速度和镜像的大小。较大的镜像可能需要更长的时间上传。 通过按照上述步骤操作,您应该能够将Docker镜像成功上传到私有仓库中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值