上篇给大家简单的介绍了一下docker的架构,已经常用命令.

http://blog.csdn.net/qq_38665235/article/details/79182931

今天带大家通过Dockerfile构建docker镜像,并构建docker私有仓库,通过maven进行打包自动构建镜像自动部署,达到持续集成目的

废话不多说,首先介绍下Dockerfile中常用的命令

FROM

 格式为:   FROM  name

 指依赖的基础镜像是....

RUN

指要执行的命令

ADD
复制文件  格式为:  

ADD ['src', 'dksrc']

注意: src可以是一个路径,也可以是一个url,还可以是一个压缩包,如果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 
用于构建参数和CMD相似 可以设置多条只有最后一条会被执行
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这个镜像了
但是我们从dockerGub上pull镜像的时候太慢了.所有我推荐自己建立私有仓库,我们可以吧这个私有仓库看做是maven的私服.仓库中的镜像看做是jar.这样或许好理解多了.

现在我们构建私有仓库
很简单,
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 git maven 就可以快速的部署,以及持续集成,

下面咱们通过docker部署一个spring-cloud-eureka  的微服务,经过查找资料,找到一个maven插件
docker-maven-plugin
当然也是看了周立大神的著作,学到的.

下面是我的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>
                    <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>


这时候我们在ideal中运行mvn clean package docker:build 发现报错  

发现需要连接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远程连接,个人认为此处有坑

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐