使用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.: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: [/127.0.0.1] failed: Connection refused -> [Help ]
解决方式,安装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
大家遇到问题可以留言,一起解决,一起学习
使用Dockerfile构建镜像并push到私有仓库的更多相关文章
- 【转】使用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 ...
- Docker容器学习梳理 - Dockerfile构建镜像
在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其 ...
- DockerFile构建镜像和Docker仓库
利用commit理解镜像构成 注意: docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现 场等.但是,不要使用 docker commit 定制镜像,定制镜像应该 ...
- 使用Dockerfile构建镜像-Docker for Web Developers(5)
1.理解Dockerfile语法 语法命令 命令功能 举例 FROM 所有的dockerfile都必须以FROM命令指定镜像基于哪个基础镜像来制作 FROM ubuntu:14:04 MAINTAIN ...
- 013、Dockerfile构建镜像(2019-01-02 周三)
参考https://www.cnblogs.com/CloudMan6/p/6830067.html Dockerfile构建镜像过程分析 root@docker-lab:~/111# ls ...
- Dockerfile构建镜像
Dockerfile构建镜像的步骤: 从基础镜像运行一个容器 执行一条指令,对容器做出修改 执行类似docker commit的操作,提交一个新的镜像层 再基于刚提交的镜像运行一个新的容器 执行Doc ...
- Dockerfile 构建镜像
一.使用dockerfile构建镜像 基本结构: a.设置基础镜像 当前镜像继承于的基础镜像 FROM centos:latest b.设置维护者信息 没有固定格式 c.设置需要添加到容器中的文件 ...
- Dockerfile构建镜像实战
目录 一.常见Dockerfile指令 二.编写Centos Dockerfile 2.1.编写Dockerfile 2.2.构建 2.3.查看Docker镜像 2.4.运行镜像 三.CMD和ENTR ...
- Docker容器化【Dockerfile编写&&搭建与使用Docker私有仓库】
# Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用 ...
随机推荐
- Kafka的Topic、Partition和Message
Kafka的Topic和Partition Topic Topic是Kafka数据写入操作的基本单元,可以指定副本 一个Topic包含一个或多个Partition,建Topic的时候可以手动指定Par ...
- IPFS系列 多节点搭建 二
IPFS系列 多节点搭建 二 上一篇介绍了IPFS的分布式点对点超媒体传输协议的背景和安装介绍,本篇将继续指导搭建多节点的IPFS私有网络 文件服务.如果没还没开始搭建IPFS节点的小伙伴, 请戳此链 ...
- DbSet.Attach(实体)与DbContext.Entry(实体).State = EntityState.Modified 区别
当你使用这个DbSet.Update方法时,实体框架将你实体的所有属性标记为EntityState.Modified,所以跟踪它们.如果你只想更改部分属性,而不是全部属性,请使用DbSet.Attac ...
- Flutter利用GridView实现网格的商品布局
GridView.count 生成的是静态网格 效果: 代码: import 'package:flutter/material.dart'; void main() { runApp(MyApp() ...
- windows驱动程序中的预处理含义
#pragma code_seg(“PAGE”) 作用是将此部分代码放入分页内存中运行. #pragma code_seg() 将代码段设置为默认的代码段 #pragma code_seg(&q ...
- Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
现在可以访问我们的认证服务器,应用我们已经配置好了. 下面配置让用户可以访问我的认证服务器.再来重写一个方法. EndpointConfigure端点的配置. authenticationManage ...
- 软件定义网络基础---SDN的核心思想
一:SDN包含的核心思想:解耦,抽象,可编程 二:解耦 (一)SDN网络解耦思想 解耦是指将控制平面和数据平面进行分离,主要为了解决传统网络中控制平面和数据平面在物理上紧耦合导致的问题 控制平面和数据 ...
- 算法习题---5.4反片语(Uva156)
一:题目 输入一些单词,找出所有满足以下条件的单词:该单词不能通过字母重排得到输入文本中的另外一个单词.在判断是否满足条件时,字母不区分大小写,但在输出时应该保留输入中的大小写,按字典序进行排列 将输 ...
- 如何做ui自动化---步骤详解
第一步: 得到功能测试的常规用例,查看是否可以进行自动化,要明确,自动化不是为了自动化而自动化,自动化是节省人力,主要做回归测试,如果变动性特别大,不建议做自动化,具体可查看其它文章“什么适合做自动化 ...
- lombok插件/slf4j中字符串格式化
大家在编写springboot项目的过程中可能会接触到lombok这个插件,这个插件可以在编译时帮我生成很多代码. 1.@Data生成Getter和Setter代码,用于类名注释 2.@Getter ...