zoukankan      html  css  js  c++  java
  • docker微服务部署之:四、安装docker、docker中安装mysql和jdk1.8、手动构建镜像、部署项目

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

    1.Centos7安装Docker

      详见:Centos7安装Docker

    2.Docker中安装jdk1.8

     详见:使用Docker构建jdk1.8

    3.Docker中安装mysql5.7

    详见:docker安装mysql

    在防火墙中开启3306端口,不然启动article项目连接docker中的mysql时,会报如下错误:

    Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    
    The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

    查看端口是否开启,开启端口以及移除指定端口命令如下:

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

    4.部署demo_eureka项目

    我的虚拟机的ip地址为:192.168.31.181

    4.1 把demo_eureka项目打成jar包

    4.1.1 打包前,修改项目配置

    在打包之前,需要在demo_eureka项目中修改如下几个地方:

    修改pom.xml,新增如下内容:

        <build>
            <finalName>app</finalName>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>

    修改application.yml中如下内容

         #defaultZone: http://127.0.0.1:${server.port}/eureka
    #192.168.31.181为虚拟机的IP地址 defaultZone: http://192.168.31.181:${server.port}/eureka

    4.1.2 将demo_eureka项目打成app.jar

    将demo_eureka项目以及后面的demo_article项目、demo_zuul项目都打成app.jar,是因为方便利用Dockerfile部署时方便。

    点击idea窗体左小角的Terminal,然后将项目demo_eureka拖动到Terminal窗体里,接着输入mvn clean package,如图:

    刷新target目录,即可在该目录下看到app.jar。

    4.1.3 防火墙开启7000端口(7000端口为demo_eureka项目中自定义的server.port端口号)

    如果没有开启7000端口,article服务和zuul服务,会注册不到eureka上来。

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

     4.1.4 docker构建eureka镜像,创建并运行eureka容器、查看eureka容器运行日志

    a.构建镜像前的准备工作:

    # 创建用于存放app.jar和Dockerfile文件的目录,取名为mydocker
    $ sudo mkdir /usr/local/mydocker
    $ sudo cd /usr/local/mydocker
    # 将app.jar上传到该目录(/usr/local/mydocker/)
    # 创建Dockerfile文件,文件名必须一模一样
    $ sudo vi Dockerfile
    # 基于jdk1.8镜像构建eureka镜像(因为eureka是打成了jar是通过java -jar来运行) FROM jdk1.
    8
    # 将当前目录的app.jar,复制到eureka镜像的/目录,名为app.jar ADD app.jar /app.jar
    # 之所以用ENTRYPOINT命令,而不是CMD命令,是因为docker run会覆盖掉CMD命令里的内容。该行命令,就是执行java -jar /app.jar ENTRYPOINT [
    "java","-jar","/app.jar"]

    b.构建eureka镜像

    # eureka为构建后的镜像名称,下面最后的.和.前面的空格一定不能少。最后的.表示使用当前目录中的Dockerfile来构建。
    $ sudo docker build -t eureka .
    Sending build context to Docker daemon  46.05MB
    Step 1/3 : FROM jdk1.8
     ---> 1f2578d93bd0
    Step 2/3 : ADD app.jar /app.jar
     ---> 14d818fa91b0
    Step 3/3 : ENTRYPOINT ["java","-jar","/app.jar"]
     ---> Running in d421e50bf8cd
    Removing intermediate container d421e50bf8cd
     ---> 15c87bf6f8e5
    Successfully built 15c87bf6f8e5
    Successfully tagged eureka:latest
    # 上面输出Successfully...表示构建eureka镜像成功,也可通过docker images命令查看是否构建成功
    $
    sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE eureka latest 15c87bf6f8e5 51 seconds ago 645MB
    ...
    # 上面可以看到REPOSITORY下有一个名为eureka的镜像,即表示构建成功

    c.运行eureka容器

    # docker run 表示创建一个新的容器并运行
    # -d 表示以守护模式运行,也就是后台运行,非阻塞式运行
    # --name=eureka 表示运行后的容器名称为eureka
    # -p 7000:7000 表示将宿主机的7000端口和eureka容器的7000之间做个绑定
    # 最后的eureka,是docker images中查看到的镜像名称
    $ sudo docker run -d --name=eureka -p 7000:7000 eureka
    0af7b3701b59048f9f9a901b29aff31b9956b2391c3d299f7e5f6016c8c44ffb
    #出现如上一个很长的字符串,表示运行docker创建了一个eureka容器,并运行eureka容器成功,但至于eureka容器中的eureka服务是否能和我们预期的那么部署成功,还待下一步验证

    d.验证eureka服务

    首先查看eureka容器是否在运行中

    #查看运行中的容器(后面加 -a 可查看所有容器,不管该容器是否在运行中)
    $ sudo docker ps
    CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                    NAMES
    0af7b3701b59        eureka                    "java -jar /app.jar"     17 minutes ago      Up 17 minutes       0.0.0.0:7000->7000/tcp   eureka

    可通过两种方式验证:

    1.通过浏览器访问eureka服务地址,是否能看到eureka界面

    2.通过查看运行日志

    # docker logs 查看docker容器运行日志
    # -f --tail=30 一直查看最后30行的日志
    # eureka 容器的名称
    $ sudo docker logs -f --tail=30 eureka

     5.部署demo_article项目

    5.1 把demo_article项目打成jar包

    5.1.1 打包前,修改项目配置

    在打包之前,需要修改demo_article项目中修改如下几个地方:

    修改pom.xml,新增如下内容:

       <build>
            <finalName>app</finalName>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>

    修改application.yml中相应部分内容为如下:

      ...
        url: jdbc:mysql://192.168.31.181:3306/docker?characterEncoding=UTF8
      ...
          defaultZone: http://192.168.31.181:7000/eureka
      ...

    5.1.2 将demo_article项目打成app.jar

    点击idea窗体左小角的Terminal,然后将项目demo_article拖动到Terminal窗体里,接着输入mvn clean package,回车,刷新target目录,即可在该目录下看到app.jar。

    5.1.3 防火墙开启9001端口(9001端口为demo_article项目中自定义的server.port端口号)

    如果没有开启9001端口,会出现demo_article项目在article容器中启动成功,但是无法访问article服务。

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

    5.1.4 docker构建article镜像、创建和运行article容器、查看article容器运行日志

    a.构建镜像前的准备工作

    $ sudo cd /usr/local/mydocker
    # 将app.jar上传到该目录(/usr/local/mydocker/)
    $ sudo ls
    app.jar Dockerfile

    因为在构建eureka镜像时,已经创建了一个用于存放jar包和Dockerfile的目录叫mydocker,所以不用再创建。

    另外,由于不管是哪个项目,都打包成了名为app.jar,所以Dockerfile文件也可以复用。

    故只需要把demo_article打成的jar包,上传到/usr/local/mydocker目录下,覆盖掉原先的app.jar即可。

    b.构建article镜像

    # article为构建后的镜像名称,下面最后的.和.前面的空格一定不能少。最后的.表示使用当前目录中的Dockerfile来构建。
    $ sudo docker build -t article .
    Sending build context to Docker daemon  46.05MB
    Step 1/3 : FROM jdk1.8
     ---> 1f2578d93bd0
    Step 2/3 : ADD app.jar /app.jar
     ---> 9633e0cb462b
    Step 3/3 : ENTRYPOINT ["java","-jar","/app.jar"]
     ---> Running in a51dd9b611e6
    Removing intermediate container a51dd9b611e6
     ---> 7f5954f085f6
    Successfully built 7f5954f085f6
    Successfully tagged eureka:latest
    # 上面输出Successfully...表示构建article镜像成功,也可通过docker images命令查看是否构建成功
    $ sudo docker images
    REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
    article                    latest              7f5954f085f6        2 minutes ago      651MB
    ...
    # 上面可以看到REPOSITORY下有一个名为article的镜像,即表示构建成功

    c.运行article容器

    # docker run 表示创建一个新的容器并运行
    # -d 表示以守护模式运行,也就是后台运行,非阻塞式运行
    # --name=article 表示运行后的容器名称为article
    # -p 9001:9001 表示将宿主机的9001端口和eureka容器的9001之间做个绑定
    # 最后的eureka,是docker images中查看到的镜像名称
    $ sudo docker run -d --name=article -p 9001:9001 article
    7031e9a5bd25d2708e18b8b986ae3081c09bb29caa4948fd437e7b5a9b47c602
    #出现如上一个很长的字符串,表示运行docker创建了一个article容器,并运行article容器成功,但至于article容器中的article服务是否能和我们预期的那么部署成功,还待下一步验证

    d.验证article服务

    首先查看article容器是否在运行中

    #查看运行中的容器(后面加 -a 可查看所有容器,不管该容器是否在运行中)
    $ sudo docker ps
    CONTAINER ID        IMAGE                     COMMAND                  CREATED              STATUS              PORTS                    NAMES
    7031e9a5bd25        article                   "java -jar /app.jar"     About a minute ago   Up About a minute   0.0.0.0:9001->9001/tcp   article

    可通过三种方式验证:

    1.通过浏览器访问eureka服务地址,查看demo_article服务是否注册到eureka上

    2.通过查看运行日志

    # docker logs 查看docker容器运行日志
    # -f --tail=30 一直查看最后30行的日志
    # article 容器的名称
    $ sudo docker logs -f --tail=30 article 

    3.通过访问demo_article项目的url

    6. 部署demo_zuul项目

    6.1 把demo_zuul项目打成jar包

    6.1.1 打包前,修改项目配置

    在打包之前,需要修改demo_zuul项目中修改如下几个地方:

    修改pom.xml,新增如下内容:

       <build>
            <finalName>app</finalName>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>

    修改application.yml中相应部分内容为如下:

    ...
        defaultZone: http://192.168.31.181:7000/eureka
    ...

    6.1.2 将demo_zuul项目打成app.jar

    点击idea窗体左小角的Terminal,然后将项目demo_zuul拖动到Terminal窗体里,接着输入mvn clean package,回车,刷新target目录,即可在该目录下看到app.jar。

    6.13 防火墙开启8888端口(8888端口为demo_zuul项目中自定义的server.port端口号)

    如果没有开启8888端口,会出现通过网关代理去访问article服务时,出现访问错误情况。

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

    6.1.4 docker构建zuul镜像、创建和运行zuul容器、查看zuul容器运行日志

    a.构建镜像前的准备工作

    $ sudo cd /usr/local/mydocker
    # 将app.jar上传到该目录(/usr/local/mydocker/)
    $ sudo ls
    app.jar Dockerfile

    因为在构建eureka镜像时,已经创建了一个用于存放jar包和Dockerfile的目录叫mydocker,所以不用再创建。

    另外,由于不管是哪个项目,都打包成了名为app.jar,所以Dockerfile文件也可以复用。

    故只需要把demo_article打成的jar包,上传到/usr/local/mydocker目录下,覆盖掉原先的app.jar即可。

    b.构建zuul镜像

    # zuul为构建后的镜像名称,下面最后的.和.前面的空格一定不能少。最后的.表示使用当前目录中的Dockerfile来构建。
    $ sudo docker build -t zuul .
    Sending build context to Docker daemon  46.05MB
    Step 1/3 : FROM jdk1.8
     ---> 1f2578d93bd0
    Step 2/3 : ADD app.jar /app.jar
     ---> 9496a939de7f
    Step 3/3 : ENTRYPOINT ["java","-jar","/app.jar"]
     ---> Running in e682a3f423e5
    Removing intermediate container e682a3f423e5
     ---> 62c091b00c8f
    Successfully built 62c091b00c8f
    Successfully tagged eureka:latest
    # 上面输出Successfully...表示构建article镜像成功,也可通过docker images命令查看是否构建成功
    $ sudo docker images
    REPOSITORY                TAG                 IMAGE ID            CREATED              SIZE
    zuul                      latest              62c091b00c8f        About a minute ago   642MB
    ...
    # 上面可以看到REPOSITORY下有一个名为zuul的镜像,即表示构建成功

    c.运行zuul容器

    # docker run 表示创建一个新的容器并运行
    # -d 表示以守护模式运行,也就是后台运行,非阻塞式运行
    # --name=zuul 表示运行后的容器名称为zuul
    # -p 8888:8888 表示将宿主机的9001端口和zuul容器的8888之间做个绑定
    # 最后的zuul,是docker images中查看到的镜像名称
    $ sudo docker run -d --name=zuul -p 8888:8888 zuul
    94a28b1a9fdd2456aab3cbae3685e3fe77cd1754e2107a6f3bcc0b3d788051d1
    #出现如上一个很长的字符串,表示运行docker创建了一个zuul容器,并运行zuul容器成功,但至于zuul容器中的zuul服务是否能和我们预期的那么部署成功,还待下一步验证

    d.验证zuul服务

    首先查看zuul容器是否在运行中

    #查看运行中的容器(后面加 -a 可查看所有容器,不管该容器是否在运行中)

    $ sudo # docker ps
    CONTAINER ID        IMAGE                     COMMAND                  CREATED              STATUS              PORTS                    NAMES
    94a28b1a9fdd        zuul                      "java -jar /app.jar"     About a minute ago   Up About a minute   0.0.0.0:8888->8888/tcp   zuul

    可通过三种方式验证:

    1.通过浏览器访问eureka服务地址,查看demo_zuul服务是否注册到eureka上

    2.通过查看运行日志

    # docker logs 查看docker容器运行日志
    # -f --tail=30 一直查看最后30行的日志
    # zuul容器的名称
    $ sudo docker logs -f --tail=30 zuul

    3.通过zuul网关代理访问demo_article项目的url

    docker微服务部署之:五、利用DockerMaven插件自动构建镜像

  • 相关阅读:
    前Citrix技术总监:虚拟化将解决云计算安全问题 狼人:
    悲剧:金山毒霸官网被黑客攻破 狼人:
    接口程序设计Windows CE嵌入式系统程序开发
    参数返回Oracle 常用函数:nvl/nullif/case when/wm_concat/replace
    数据恢复[Oracle] Flashback闪回机制
    重复字段Oracle删除重复行
    进程函数一步步理解Linux之信号
    读取数据事务
    菜单函数Android学习整理菜单Menu
    参数实现Oracle SQL中实现indexOf和lastIndexOf功能
  • 原文地址:https://www.cnblogs.com/ztone/p/10569302.html
Copyright © 2011-2022 走看看