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

【转】使用Dockerfile构建镜像并push到私有仓库的更多相关文章

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

    环境:OS X 10.10.5 maven 3.3.9 Docker version 1.12.2 docker-machine version 0.8.2 程序示例为http://www.cnblo ...

  2. Docker容器学习梳理 - Dockerfile构建镜像

    在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其 ...

  3. DockerFile构建镜像和Docker仓库

    利用commit理解镜像构成 注意: docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现 场等.但是,不要使用 docker commit 定制镜像,定制镜像应该 ...

  4. 使用Dockerfile构建镜像-Docker for Web Developers(5)

    1.理解Dockerfile语法 语法命令 命令功能 举例 FROM 所有的dockerfile都必须以FROM命令指定镜像基于哪个基础镜像来制作 FROM ubuntu:14:04 MAINTAIN ...

  5. 013、Dockerfile构建镜像(2019-01-02 周三)

    参考https://www.cnblogs.com/CloudMan6/p/6830067.html   Dockerfile构建镜像过程分析   root@docker-lab:~/111# ls  ...

  6. Dockerfile构建镜像

    Dockerfile构建镜像的步骤: 从基础镜像运行一个容器 执行一条指令,对容器做出修改 执行类似docker commit的操作,提交一个新的镜像层 再基于刚提交的镜像运行一个新的容器 执行Doc ...

  7. Dockerfile 构建镜像

    一.使用dockerfile构建镜像 基本结构: a.设置基础镜像 当前镜像继承于的基础镜像 FROM centos:latest  b.设置维护者信息 没有固定格式  c.设置需要添加到容器中的文件 ...

  8. Dockerfile构建镜像实战

    目录 一.常见Dockerfile指令 二.编写Centos Dockerfile 2.1.编写Dockerfile 2.2.构建 2.3.查看Docker镜像 2.4.运行镜像 三.CMD和ENTR ...

  9. Docker容器化【Dockerfile编写&&搭建与使用Docker私有仓库】

    # Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用 ...

随机推荐

  1. select count(1)和 select count(*)

    ),其实就是计算一共有多少符合条件的行. 1并不是表示第一个字段,而是表示一个固定值. 其实就可以想成表中有这么一个字段,这个字段就是固定值1,),就是计算一共有多少个1. 同理,),也可以,得到的值 ...

  2. 计蒜客——Nise-Anti-AK Problem

    Nise-Anti-AK Problem #include<iostream> using namespace std; int b[1000]; int main() { ios::sy ...

  3. C++2.0新特性(八)——<Smart Pointer(智能指针)之unique_ptr>

    一.概念介绍 unique_ptr它是一种在异常发生时可帮助避免资源泄露的smart pointer,实现了独占式拥有的概念,意味着它可确保一个对象和其他相应资源在同一时间只被一个pointer拥有, ...

  4. 新版本Mariadb安装后相关问题的解决

    给新机器Ubuntu安装的Mariadb后无法登录,通过网上各种方法修改root用户密码,仍然无法解决,耗费几个小时! 经过看日志和查手册,发现原因如下: ubuntu确实安装没有启用root用户,所 ...

  5. CodeMirror在线代码编辑器使用

    CodeMirror官网地址为:https://codemirror.net/ CodeMirror作为一款代码编辑器,其应用场景主要是在线网站写代码.如现在的leetcode.洛谷.code-vs等 ...

  6. [C++] 类的成员变量和成员方法

    类具有成员变量和成员方法 成员变量用来描述某个对象的具体特征,是静态的,也称为成员属性,这些属性一般设置为私有,仅供类的内部使用. 成员方法用来描述某个对象的具体行为,是动态的,也成为成员函数,这些属 ...

  7. #C++初学记录(动态规划 被3整除的子序列)

    原题:牛客网 动态规划dynamic programming 的入门级题目 题目描述 : 给你一个长度为50的数字串,问你有多少个子序列构成的数字可以被3整除 答案对1e9+7取模 输入描述: 输入一 ...

  8. curl保留cookie

    curl -c cookie.txt http://localhost:9001/login.json?c=65CE13E16CF394D curl -b @cookie.txt http://loc ...

  9. SQL中左连接on and条件和where条件执行先后顺序

    left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录. right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录. inner join: 内连接,又 ...

  10. opencv yuvNV21转RGB

    void yuv420Torgb() { FILE *fp = fopen("D:\\1.yuv","rb"); ; ; uchar *yuvdata = / ...