记一次坎坷的docker实践

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

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

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

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

<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <configuration>
                    <imageName>bookshop-Repository</imageName>
                    <baseImage>java</baseImage>
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <forceTags>true</forceTags>
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>

            </plugin>

在我预想中应该是顺顺利利能编译过的,因为我是抄来的偷笑,但是,无论是本机还是上传到虚拟机进行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

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

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


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

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



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



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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值