文档章节

使用Dockerfile构建镜像并push到私有仓库

m
 modprobe
发布于 2016/11/08 09:57
字数 796
阅读 746
收藏 0
点赞 0
评论 2

环境: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

 

大家遇到问题可以留言,一起解决,一起学习

本文转载自:http://www.cnblogs.com/modprobe/p/6033807.html

共有 人打赏支持
m
粉丝 1
博文 35
码字总数 0
作品 0
加载中

评论(2)

m
modprobe

引用来自“滑稽阿狸”的评论

大神,我用maven插件push不上去啊。才接触docker4天,你可以把你的整个源代码上传到git吗?我学习学习
你好,push的时候有什么提示
滑稽阿狸
大神,我用maven插件push不上去啊。才接触docker4天,你可以把你的整个源代码上传到git吗?我学习学习
Docker实践(七):Docker Hub(镜像分发、自动化构建)

一、Docker Hub简介 Docker Hub的网址是,提供的是镜像托管服务,它与GitHub类似,利用Docker Hub,我们可以搜索、创建、分享和管理镜像,还可以利用其提供的自动化构建技术直接在集群云服务器...

u010246789
2017/01/09
0
0
Docker--------registry私有仓库搭建 [ Http ]

1. 背景 docker中要使用镜像,一般会从本地、docker Hup公共仓库和其它第三方公共仓库中下载镜像,一般出于安全和外网(墙)资源下载速率的原因考虑企业级上不会轻易使用。那么有没有一种办法可...

技术小胖子
2017/11/08
0
0
Hulk容器服务的镜像CI解决方案

Hulk容器服务的镜像CI解决方案 奇虎360-addops2017-08-089 阅读 解决方案服务ci 前言 纯手工捣鼓Docker镜像 UI页面化、自动化地生产Docker镜像 前言 巧妇难为无米之炊,玩容器,“镜像”就是...

奇虎360-addops
2017/08/08
0
0
docker 学习笔记(一)Docker的介绍与安装使用

Docker的介绍与安装使用 标签(空格分隔): docker的部分 一: docker 的介绍 1.1 docker是什么 供接口。Shim:只负责管理一个容器。runC:是一个轻量级的工具,只用来运行容器。 命名空间,...

flyfish225
05/13
0
0
快速构建docker镜像:maven插件

越来越多的项目开始了docker容器化部署的进化,在容器化之前我们部署一个项目,可能由源代码产出一个jar或者war即可直接发布了,启动之后是一个java进程;容器化之后,由源代码产出的是一个d...

rabbitGYK
04/15
0
0
Docker 镜像及Docker仓库配置 [四]

Docker 镜像及Docker仓库配置 [四] Docker 镜像及Docker仓库配置 [四] 一、Docker 镜像介绍 Docker镜像构建分为两种,一种是,另一种是Dockerfile() Docker镜像手动构建案例: 我们基于镜像...

Abcdocker
06/26
0
0
使用dockerfile 从私有仓库构建镜像,并启动一个jenkins

私有仓库已经搭建好了,先讲解下环境 我的docker registry在mesos slave 上,也就是之前的 可以看到私有的仓库里面已经有了3个镜像,这次我们要使用jenkins这个镜像,这个镜像主要包含了JAV...

jastme
2016/11/25
350
0
Docker Hub结合Github自动化构建镜像

让Github与Docker Hub进行绑定 Docker Hub->Create->Create Automated Build 第一次进行该步骤需要Github的授权。会自动跳到Github同意授权即可。 在Github上创建一个Docker构建项目,在里面...

chenyufeng1991
04/07
0
0
基于Docker容器的,Jenkins、GitLab构建持续集成CI

** 开发者将代码提交(push)到GitLab后,GitLab通过Hook通知jenkins,jenkins自动从GitLab中获取项目最新的源码进行集成和发布。 1. 构建私有的GitLab容器 https://about.gitlab.com/install...

怀远西
2017/05/30
0
0
Docker Hub工作流程-Docker for Web Developers(6)

在Github上创建项目仓库 和创建其他Github项目一样,在Github创建一个仓库,然后在仓库里面增加一个dockerfile,然后提交并推送到Github上。 我已经创建的仓库地址:https://github.com/limi...

最美的回忆
2017/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

sklearn学习笔记之简单线性回归

简单线性回归 线性回归是数据挖掘中的基础算法之一,从某种意义上来说,在学习函数的时候已经开始接触线性回归了,只不过那时候并没有涉及到误差项。线性回归的思想其实就是解一组方程,得到...

wangxuwei
4分钟前
0
0
feign之动态interceptor(二)

背景 上文提到了按照不同的feignClient可以根据多个不同的key来进行多个不同的bean的配置 那么我们如何完成多个interceptor的配置呢? 分析 我们刚提到多个配置的玄机就在FeignClientProper...

Mr_Qi
6分钟前
1
0
Linux Kernel 4.16 系列停止维护,用户应升级至 4.17

知名 Linux 内核维护人员兼开发人员 Greg Kroah-Hartman 近日在发布 4.16.18 版本的同时,宣布这是 4.16 系列的最后一个维护版本,强烈建议用户立即升级至 4.17 系列。 Linux 4.16 于 2018 年...

问题终结者
31分钟前
0
0
Apache配置时.htaccess失效不起作用的原因分析

.htaccess 失效的原因 1. 重写规则有问题,检查自己的重写规则 2.Apache配置问题,配置中没有配置启用 rewrite a2enmod rewrite 3.网站配置文件没有启用配置需要配置 000-default.conf <Dire...

TU-DESGIN
51分钟前
1
0
两个求最大公约数C/C++算法实现

#include<stdio.h> #include<time.h> #include <iostream>using namespace std;//求最大公约数 LCD(Largest Common Division)//短除法 //m=8251, n=6105; int LCD_ShortDiv(int m, ......

失落的艺术
57分钟前
1
0
QueryPerformanceCounter

windows的Sleep函数,睡眠线程指定毫秒数,可以用来做毫秒延时。 对于微秒延时,没有一个现成的函数,但是可以通过 QueryPerformanceFrequency QueryPerformanceCounter 来间接实现。原理就是...

开飞色
今天
1
0
log4j2使用AsyncRoot不显示行号问题处理

<AsyncRoot level="info" includeLocation="true"> <AppenderRef ref="File"/></AsyncRoot><!--1.异步logger,还需要在pom.xml中添加disruptor的依赖。2.includeLocation结合异......

小翔
今天
3
0
安卓手机上 K 歌,声音延迟怎么解决?

这篇文章可以为你提供一个解决录音和播放同步问题的思路,而且解决了声音从手机传输到耳机上有延时的问题。 初识音频 在开始之前,我先简单介绍一下音频相关的基础知识,方便下文理解。 我们...

编辑部的故事
今天
2
0
使用token实现在有效期内APP自动登录功能

使用token实现在有效期内APP自动登录功能 http://sevennight.cc/2016/07/19/auto_login_impl.html

风云海滩
今天
2
0
Spring Boot集成RabbitMQ发送接收JSON

默认情况下RabbitMQ发送的消息是转换为字节码,这里介绍一下如何发送JSON数据。 ObjectMapper 最简单发送JSON数据的方式是把对象使用ObjectMapper等JSON工具类把对象转换为JSON格式,然后发送...

小致dad
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部