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插件自动构建镜像

  • 相关阅读:
    Parameter Binding in ASP.NET Web API
    Which HTTP methods match up to which CRUD methods?
    ErrorHandling in asp.net web api
    HttpStatusCode
    Autofac Getting Started(默认的构造函数注入)
    Autofac Controlling Scope and Lifetime
    luvit 被忽视的lua 高性能框架(仿nodejs)
    undefined与null的区别
    VsCode中使用Emmet神器快速编写HTML代码
    字符串匹配---KMP算法
  • 原文地址:https://www.cnblogs.com/ztone/p/10569302.html
Copyright © 2011-2022 走看看