详解Dockerfile,并构建docker私有库,通过maven自动构建镜像和部署,达到持续集成
上篇给大家简单的介绍了一下docker的架构,已经常用命令.http://blog.csdn.net/qq_38665235/article/details/79182931今天带大家通过Dockerfile构建docker镜像,并构建docker私有仓库,通过maven进行打包自动构建镜像自动部署,达到持续集成目的废话不多说,首先介绍下Dockerfile中常用的命令FROM
上篇给大家简单的介绍了一下docker的架构,已经常用命令.
http://blog.csdn.net/qq_38665235/article/details/79182931
今天带大家通过Dockerfile构建docker镜像,并构建docker私有仓库,通过maven进行打包自动构建镜像自动部署,达到持续集成目的
废话不多说,首先介绍下Dockerfile中常用的命令
FROM
格式为: FROM name
指依赖的基础镜像是....
RUN
ADD
复制文件 格式为:
ADD ['src', 'dksrc']
ARG
CMD
容器的启动命令,只会执行一条.如果有多个,最后一条会被执行 目前支持三种格式:
CMD ["executable","param1","param2"] (推荐使用)
CMD ["param1","param2"] (为ENTRYPOINT指令提供预设参数)
CMD command param1 param2 (在shell中执行)
COPY
COPY src dksrc
COPY ["src","dksrc"]
COPY 不支持url和压缩包
ENTRYPOINT
ENV
这个命令很重要,只用来设置环境变量 格式为:
ENV KEY VALUE
ENV KEY=VALUE
EXPOSE
EXPOSE PORT
EXPOSE PORT1 PORT2 PORT3
MAINTAINER
这个用处不大,用来指定维护者信息,
VOLUME
指定挂在点
大概常用的几个命令介绍完了,下面带大家构建一下
FROM java:8
VOLUME /home/gang
ADD gang-spring-cloud-eureka-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"]
这是我的Dockerfile 在home目录下面, 下面我们通过docker build -t name . 进行构建,其中最后的点代表Dockerfile在本目录.
docker build -t test/testeureka:0.1 .
如图所示出现
Successfully built f0acb0fed231
即表示构建成功,我们在看下本地的镜像 通过docker images
docker images
此时本地已经有了testeureka这个镜像了
很简单,
docker run -d -p 5000:5000 --restart=always --name registry2 registry:2
默认启动的是5000端口
这个时候我们就可以吧刚刚创创建的镜像push到我们的私有仓库上了.
docker push name
但是我们会发现执行失败,
因为默认是docker hub,所以我们要设置镜像标签
docker tag name localhost:5000/name
这个时候在执行push就可以了.
docker push name localhost:5000/name
但是我们怎么查看私有仓库中的镜像呢?
# curl -XGET http://registry:5000/v2/_catalog
# curl -XGET http://registry:5000/v2/image_name/tags/list
通过这两个命令就可以查看,当我们需要pull镜像时候就可以从私有仓库中直接拉去,这样方便许多
docker-maven-plugin
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.3</version>
<configuration>
<!--镜像名称-->
<imageName>eurak1</imageName>
<!--相当于from基于父镜像-->
<baseImage>java</baseImage>
<entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
发现需要连接docker服务,于是改pom.xml为下
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.3</version>
<configuration>
<!--镜像名称-->
<imageName>eurak1</imageName>
<!--相当于from基于父镜像-->
<baseImage>java</baseImage>
<!--远程docker服务地址-->
<!--<dockerHost>http://192.168.68.128:2375</dockerHost>-->
<entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
但是发现还是不行,还是报错,连接192.168.68.128超时,怎么回事呢,明明开着docker服务的????
后来发现,就像redis一样需要开启远程访问,其实好多技术思想都是一样的.只不过每个技术的实施方式不同而已
于是设置docker开启远程连接.以后再进行打包部署
已经构建成功了,我们再看192.168.68.128上的docker镜像,
已经有这个镜像了.其实是docker-maven-plugin这个插件帮我们写了一个Dockerfile 然后去远程docker上执行的构建,我们也可以指定自己的Dockerfile,达到自动部署目的
通过配置
<dockerDirectory>
即可加载自定义的Dockerfile
我们也可以通过配置maven中的settings文件,达到构建完成后自动上传到docker仓库中.即可持续集成
个人能力有限,只能介绍这么多了,有错误之处望见谅.下篇为大家介绍如何开启docker远程连接,个人认为此处有坑
更多推荐
所有评论(0)