docker微服务部署之:四、安装docker、docker中安装mysql和jdk1.8、手动构建镜像、部署项目

在上一篇文章中,我们是手动构建镜像,即:

  • 4.1.2、5.1.2、6.1.2中的将demo_xxx项目打包成app.jar
  • 4.1.4、5.1.4、6.1.4中的:
    • a:创建mydocker目录、上传app.jar至mydocker目录
    • b:执行docker build命令构建镜像

其实以上步骤,都是很繁琐的操作。可利用DockerMaven插件自动构建镜像。

至于要部署微服务项目,除了上述提到的手动构建步骤略过之外,其他步骤,都还是需要执行的。

如何利用DockerMaven插件自动构建呢?

一、(Centos7系统)编辑/lib/systemd/system/docker.service

在Delegate=yes下面增加如下两行代码:

#将ExecStart的配置值清空
ExecStart=
#配置ExecStart的值
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

重启docker

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

二、防火墙开启2375端口

需要开启2375端口,不然idea会连不上docker容器

#添加指定需要开放的端口
$ sudo firewall-cmd --add-port=/tcp --permanent
success
#重新载入添加/移除的端口
$ sudo firewall-cmd --reload
#也可再查下是否开启指定端口
$ sudo firewall-cmd --query-port=/tcp
yes

三、修改demo_eureka、demo_article、demo_zuul三个模块的pom.xml文件

在plugs标签下增加如下内容(注意修改<imageName>标签中的内容,分别为去掉demo_的名称):

  <!-- docker 的 maven 插件,官网:https://github.com/spotify/docker-maven-plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.1.1</version>
<configuration>
<!-- 注意 imageName 一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 -->
<!-- 详见:https://github.com/spotify/docker-maven-plugin
Invalid repository name ... only [a-z0-9-_.] are allowed-->
<!-- 镜像名称,相当于执行docker build -t命令后面跟的镜像名称 -->
<imageName>eureka</imageName>
<!-- 基础镜像名称,相当于Dockerfile中的FROM jdk1.8-->    
<baseImage>jdk1.8</baseImage>
<!-- 执行的命令,相当于Dockerfile中的ENTRYPOINT-->
<entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
<resources>
<!-- 相当于ADD app.jar / -->
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<!-- 需要构建镜像的docker主机ip地址,端口为2375-->
<dockerHost>http://192.168.31.181:2375</dockerHost>
</configuration>
</plugin>

四、删除eureka、zuul、article服务和镜像。(如果前面没有构建镜像和运行容器,可跳过此步)

# 先停止运行中的容器
$ sudo docker stop eureka zuul article
eureka
zuul
article
# 然后删除容器
$ sudo docker rm eureka zuul article
eureka
zuul
article
# 再删除镜像
$ sudo docker rmi eureka zuul article
Untagged: eureka:latest
Deleted: sha256:15c87bf6f8e579d2bee66865f63a532c95c7516757277f1fa78d099830bd322c
Deleted: sha256:14d818fa91b0f3736cdbb6f0f89f137702be31c29019d6ff5175dd399faf3543
Deleted: sha256:9181d039053d8a3db8f2feb8962d5ce40ff7624bed10a91e8ce03d0f70c284b1
Untagged: zuul:latest
Deleted: sha256:62c091b00c8f5577f89e88e9f2c91ad9375bdae2bc98b3c5e0a6d25554e30c06
Deleted: sha256:9496a939de7ff2c4b3386a84e29452a9b017d58ec97c95ce5e3c977b3f110fbe
Deleted: sha256:c733bafbfada2538a77c1cce8af4a7553e5b673ee1b6d9e5ffa634c110361522
Untagged: article:latest
Deleted: sha256:7f5954f085f6dbfce11f030114e0fcfaf8b63e47ec7bf89169b9018dfb68ebaa
Deleted: sha256:9633e0cb462bec49717bed27b97bef3461ef19f379d9caf9dd14e3779f8cb9a5
Deleted: sha256:ea4c46c473a56daf57b2b0cbe03abb92fa43e967e78fd90c5cc31b817e745875
#查看所有容器,发现只剩下jdk1.8和mysql,而eureka、zuul和article容器已经被删除了。
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7ea54b828f3b jdk1. "/bin/bash" hours ago Up hours jdk1.
652a36962b86 centos/mysql--centos7 "container-entrypoin…" hours ago Up hours 0.0.0.0:->/tcp mysql
#查看本地镜像,发现只剩下jdk1.、centos和mysql,而eureka、zuul和article镜像已经被删除了
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jdk1. latest 1f2578d93bd0 hours ago 598MB
centos centos7 9f38484d220f days ago 202MB
centos/mysql--centos7 latest ee80146ff512 weeks ago 453MB

五、在原来的打包命令mvn clean package后面加上 docker:build

除了上述提到的利用自动化部署可略过的步骤之外,其他步骤不变。然后在打包项目的时候,使用如下命令:

在打包的过程中,可以看到,除了完成了把项目打成app.jar之外,还执行了构建镜像操作

在192.168.31.181本地镜像中,查看是否有eureka镜像

$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
eureka latest 9b410097b49e 1 second ago 645MB

demo_article和demo_zuul的打包方式是相似的。

六、其他说明

由于修改/lib/systemd/system/docker.service文件之后,执行了systemctl restart docker重启了docker,所以docker中的mysql容器,暂时是没有启动的,需要手动启动。

查看docker中所有容器的状态:

$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7ea54b828f3b jdk1.8 "/bin/bash" 14 hours ago Exited (137) 28 minutes ago jdk1.8
652a36962b86 centos/mysql-57-centos7 "container-entrypoin…" 45 hours ago Exited (0) 28 minutes ago mysql

可以看到,mysql的status为Exited 表示为非启动状态

# 启动mysql容器
$ sudo docker start mysql
mysql
# 查看运行中的容器,UP表示运行中
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
652a36962b86 centos/mysql--centos7 "container-entrypoin…" hours ago Up About a minute 0.0.0.0:->/tcp mysql

docker微服务部署之:六、Rancher管理部署微服务

docker微服务部署之:五、利用DockerMaven插件自动构建镜像的更多相关文章

  1. docker微服务部署之:六、Rancher管理部署微服务

    docker微服务部署之:五.利用DockerMaven插件自动构建镜像 一. 什么是Rancher Rancher是一个开源的企业级容器管理平台.通过Rancher,企业再也不必自己使用一系列的开源 ...

  2. docker微服务部署之:四、安装docker、docker中安装mysql和jdk1.8、手动构建镜像、部署项目

    docker微服务部署之:三,搭建Zuul微服务项目 1.Centos7安装Docker 详见:Centos7安装Docker 2.Docker中安装jdk1.8 详见:使用Docker构建jdk1. ...

  3. docker微服务部署之:七、Rancher进行微服务扩容和缩容

    docker微服务部署之:六.Rancher管理部署微服务 Rancher有两个特色用起来很方便,那就是扩容和缩容. 一.扩容前的准备工作 为了能直观的查看效果,需要修改下demo_article项目 ...

  4. docker微服务部署之:三,搭建Zuul微服务项目

    docker微服务部署之:二.搭建文章微服务项目 一.新增demo_eureka模块,并编写代码 右键demo_parent->new->Module->Maven,选择Module ...

  5. docker微服务部署之:二、搭建文章微服务项目

    docker微服务部署之:一,搭建Eureka微服务项目 一.新增demo_article模块,并编写代码 右键demo_parent->new->Module->Maven,选择M ...

  6. docker微服务部署之:一,搭建Eureka微服务项目

    先说明一下docker需要搭建的微服务的基本情况: 项目情况:一个demo_parent项目,下面三个子模块:demo_eureka(eureka服务).demo_article(文章服务).demo ...

  7. .NET 微服务——CI/CD(2):自动打包镜像

    准备工作 一.开启docker的tcp 我的服务器是linux,以端口2376为例,找到docker.service,在ExecStart下新增这段代码即可: -H tcp://0.0.0.0:237 ...

  8. 微服务实战(六):选择微服务部署策略 - DockOne.io

    原文:微服务实战(六):选择微服务部署策略 - DockOne.io [编者的话]这篇博客是用微服务建应用的第六篇,第一篇介绍了微服务架构模板,并且讨论了使用微服务的优缺点.随后的文章讨论了微服务不同 ...

  9. Chris Richardson微服务翻译:微服务部署

    Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服务部署( ...

随机推荐

  1. 技术讨论]mongodb驱动的正确使用方法

    原文地址:http://cnodejs.org/topic/5190d61263e9f8a542acd83b mongo数据库在nodejs平台有2个常用驱动,mongodb和mongoose,mon ...

  2. Redis开发、管理实战

    一.数据类型 String : 字符类型 Hash: 字典类型 List: 列表 Set: 集合 Sorted set: 有序集合 二.全局Key操作 KEYS * 查看KEY支持通配符 DEL 删除 ...

  3. 4-memset函数总结

    头文件:cstring 或 memory 一般用处: memset(arr, 0, sizeof(aar));    //初始化为0 memset(arr, -1, sizeof(aar));   / ...

  4. 12个优秀的国外Material Design网站案例

    眼看2017年就快完了,你是不是还没完全搞懂Material Design呢?是嫌说明文档太长,还是觉得自己英文不好?都没关系,小编今天给大家整理了一份干货满满的学习笔记,并列举了一些国外的Mater ...

  5. 关于Android控件EditText的属性InputType的一些经验,java组合多个参数

    关于Android控件EditText的属性InputType的一些经验 2013-11-14 15:08:02|  分类: 默认分类|举报|字号 订阅       1.InputType属性在代码中 ...

  6. java通过经纬度计算两个点的之间的距离的算法

    通过两个点的经纬度计算距离 从google maps的脚本里扒了段代码,没准啥时会用上.大家一块看看是怎么算的. private const double EARTH_RADIUS = 6378.13 ...

  7. C++友元函数、友元类

    1.什么是友元函数? 友元函数就是可以直接访问类的成员(包括私有数据)的非成员函数,也就是说他并不属于这个类,他是一种外部的函数. 一个外部函数只能通过类的授权成为这个类友元函数,这就涉及到一个关键字 ...

  8. 程序员不常用Linux命令集

    1) 关闭指定网卡,如关闭网卡eth0 ifconfig eth0 down 也可以使用ifdown,通常ifdown是一个指向ifup的软链接,而ifup为一个脚本文件. 2) 命令自启动,如希望机 ...

  9. Hook ptrace 调试加入了ptrace函数的程序

    Hook ptrace 调试加入了ptrace函数的程序 #import <substrate.h> #if !defined(PT_DENY_ATTACH)#define PT_DENY ...

  10. [leetcode] 8. Maximum Depth of Binary Tree

    可能是因为我是按难度顺序刷的原因,这个其实在之前的几道题里面已经写过了.题目如下: Given a binary tree, find its maximum depth. The maximum d ...