记一次坎坷的docker实践

最近在学springCloud微服务,突然想把微服务部署到docker上,于是就开始有了如下坎坷的经历。

springCloud原理配置什么的,我不做过多赘述了,就挑重点讲吧。

首先是环境,在windows上装docker,会附送这三个玩意记一次坎坷的docker实践_第1张图片,一般只用前两个,第三个据说不稳定啥的,我也没试过,第一个就是docker启动的客户端,第二个就是虚拟机(linux)。。。我都是第一次用。。。

先说说我遇到的问题吧,在项目pom.xml文件中(这个项目在本地测试通过)加入了如下代码:


                com.spotify
                docker-maven-plugin
               
                    bookshop-Repository
                    java
                   
                        latest
                   

                    true
                    ["java", "-jar", "/${project.build.finalName}.jar"]
                   
                       
                            /
                            ${project.build.directory}
                            ${project.build.finalName}.jar
                       

                   

               

               
                   
                        package
                       
                            build
                       

                   

               

           

在我预想中应该是顺顺利利能编译过的,因为我是抄来的,但是,无论是本机还是上传到虚拟机进行mvn clean install -DskipTest都会爆以下错误:

Failed to execute goal com.spotify:docker-maven-plugin:1.1.1:build (default) on project bookshop-Repository: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: com.spotify.docker.client.shaded.org.apache.http.client.ClientProtocolException: Cannot retry request with a non-repeatable request entity: Connection reset by peer: socket write error -> [Help 1]

接下来几天陆陆续续我就在想办法解决这个问题。。。试了好多方法都搞不定,正当我快放弃的时候。突然灵机一动,docker不是容器技术嘛,容器运行的都是image,而先前在pom中加的那段代码就是将jar包重新打包生成image。。。所以,就有了如下操作,

1、我在本地打jar包;

2、我把jar包和所需配置文件传到虚拟机;

3、我在虚拟机执行docker build制造image ;

4、执行docker-compose up命令启动容器。

然后就成功了,所以说绝望的时候就是快成功的时候,never give up!!!下面我尽量详细的说一说操作过程:

1、docker安装好(for windows 7 64位)

2、并且使用docker pull java 、docker pull consul(因为我的服务是注册在consul)

使用docker images能看到如下的图,证明装好了


3、添加Docker的network,相同network中的镜像可以直接通过名称访问
docker network create t1

4、在本地把jar包打好并放入公共目录(此目录就是本机和虚拟机公共目录,我懒得上传了,差不多意思可以了)

5、在公共目录下创建Dockerfile文件,代码如下:(其实意思和pom中的差不多)

FROM java
VOLUME /tmp
ADD bookshop-Repository-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'

ENTRYPOINT ["java", "-Dvertx.disableDnsResolver=true", "-jar", "/app.jar"]

6、在公共目录下创建docker-compose.yml文件,代码如下(用于docker-compose up 命令)

version: "0.1"
services:
  consul:
    image: consul
    container_name: consul
    ports:
      - "8500:8500"
    net: t1


  book-Repository:
    image:   bookshop_repository
    container_name:   book-Repository
    ports:
      - "9001:9001"
    links:
      - consul

    net: t1

此时公共目录下应该有三个文件

记一次坎坷的docker实践_第2张图片

7、移步至docker 客户端,目录切到公共目录下,执行docker build -t bookshop-repository .

记一次坎坷的docker实践_第3张图片记一次坎坷的docker实践_第4张图片

8、执行docker-compose up -d (-d其实是后台执行,不加也可以)

9、根据配置consul是在8500端口,bookshop-repository在9001端口,测试通过~~

记一次坎坷的docker实践_第5张图片

记一次坎坷的docker实践_第6张图片

注:192.168.99.100是docker地址,在启动的时候你可以看到。

记一次坎坷的docker实践_第7张图片


后记,这次尝试绕了点圈子,不过还是成功了,但毕竟是野路子,通常情况下还是应该docker-maven-plugin来进行编译,后续有空我还将继续尝试。

你可能感兴趣的:(Docker)