zoukankan      html  css  js  c++  java
  • 后台管理微服务(二)——docker的使用

    1. docker概述

    1.1 Docker是什么

    Docker 是软件工业的集装箱技术

    Docker 是一个容器引擎,docker提供了一套完整的容器解决方案。

    Docker 是一个能将开发的程序自动部署到容器的开源引擎。

    1.2 什么是容器

    容器是一种历史悠久的虚拟化技术。

    容器是一种虚拟化技术。

    容器本质上就是运行在宿主机上的一个进程,只不过在启动这个进程之前做了一些特殊的处理,让这个进程进入了一种全新的虚拟环境,与宿主机分开,这个进程或子进程认为自己运行在一个独立的世界里。

    如:linux 系统的lxc,openvz

    1.3 容器和虚拟机的区别

    虚拟机除了应用和依赖库之外,还需要包含完整的操作系统,资源占用比容器多。

    虚拟机需要模拟硬件的行为对内存、CPU的损耗更大。

     

    1.4 Docker 技术的作用

      1 简化配置,快速部署,提升开发效率

     docker能将jdk、tomcat 等软件和项目一起打包成为一个docker镜像,如果我们需要在另外一台机子上面部署项目,直接从镜像仓库中下载镜像,使用docker run命令 运行镜像就可以了,简化了jdk等软件的配置,如果,没有docker在一个新环境部署java项目 需要安装 jdk等软件,还需要配置环境变量等。 

      2 隔离应用

       docker可以减少了不同项目之间的互相影响,我可以在一台服务器上部署运行2个不同项目的docker镜像,这些docker镜像中的jdk、tomcat版本完全可以不同 

      3 符合微服务的理念

       Docker 可以很好地和微服务结合起来,从概念上来说,一个微服务便是一个提供一整套应用程序的部分功能,Docker 便可以在开发、测试和部署过程中一直充当微服务的容器,docker 是非常适合微服务的技术。 

    2. 实战:推送docker镜像到阿里云镜像仓库 

    2.1 编写dockerfile文件

    此文件用于生成docker镜像

     1 FROM ubuntu:14.04     
     2 #刷新包缓存 并且 安装wget工具  
     3 RUN apt-get update && apt-get install -y wget  
     4 #设置工作目录  
     5 WORKDIR /home  
     6 # 安装jdk  
     7 RUN wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"  
     8 RUN tar xzf jdk-8u141-linux-x64.tar.gz    
     9 # 配置环境变量  
    10 ENV JAVA_HOME /home/jdk1.8.0_141   
    11 ENV JRE_HOME $JAVA_HOME/jre  
    12 ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib  
    13 ENV PATH $PATH:$JAVA_HOME/bin   
    14 # Set the timezone.
    15 RUN echo "Asia/Shanghai" > /etc/timezone
    16 RUN dpkg-reconfigure -f noninteractive tzdata
    17 RUN locale-gen zh_CN.UTF-8 &&
    18  DEBIAN_FRONTEND=noninteractive dpkg-reconfigure locales
    19 RUN locale-gen zh_CN.UTF-8
    20 ENV LANG zh_CN.UTF-8
    21 ENV LANGUAGE zh_CN:zh
    22 ENV LC_ALL zh_CN.UTF-8
    23 # Make logs dir
    24 RUN mkdir -p /opt/xw-blogs/logs
    25 #expose 
    26 EXPOSE 22
    27 EXPOSE 8081
    28 # Add the jar and run
    29 ADD xw-blogs.jar /opt/xw-blogs/xw-blogs.jar
    30 WORKDIR /opt/xw-blogs
    31 ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -Xbootclasspath/a: -jar xw-blogs.jar

    2.2 在maven的pom.xml文件中引入docker相关配置

    下面是pom文件中build节点代码

       <build>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <!-- 资源根目录排除各环境的配置,使用单独的资源目录来指定 -->
                    <excludes>
                        <exclude>profiles/test/*</exclude>
                        <exclude>profiles/prod/*</exclude>
                        <exclude>profiles/uat/*</exclude>
                        <exclude>profiles/dev/*</exclude>
                    </excludes>
                </resource>
                <resource>
                    <directory>src/main/resources/profiles/${profiles.active}</directory>
                </resource>
            </resources>
            <finalName>xw-blogs</finalName>
             <plugins>
            <!-- 指定资源文件夹,将该文件夹的文件都 放到和jar 同级目录 -->
                <plugin>  
                  <artifactId>maven-resources-plugin</artifactId>  
                    <executions>  
                      <execution>  
                          <id>copy-resources</id>  
                         <phase>validate</phase>  
                           <goals>  
                               <goal>copy-resources</goal>  
                         </goals>  
                    <configuration>  
                        <outputDirectory>${project.build.directory}</outputDirectory>  
                        <resources>  
                            <resource>  
                            <!-- 将src/main/resources/profiles/${profiles.active}文件夹的文件都 放到和jar 同级的目录 -->
                                <directory>src/main/resources/profiles/${profiles.active}</directory>  
                                <filtering>true</filtering>  
                            </resource>  
                        </resources>  
                      </configuration>  
      
                     </execution>  
                </executions>  
             </plugin>        
              <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <dependencies>
                        <dependency>
                            <groupId>org.springframework</groupId>
                            <artifactId>springloaded</artifactId>
                            <version>1.2.0.RELEASE</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>0.4.11</version>
                    <configuration>
                    <serverId>docker-aliyun</serverId>
                    <registryUrl>${docker.repostory}</registryUrl>
                    
                        <imageName>${project.repository}/${project.codeName}/${project.moduleName}</imageName><!-- 镜像名称 -->
                                <forceTags>true</forceTags>
                        <imageTags>
                            <imageTag>${project.version}</imageTag>
                            <imageTag>latest</imageTag>
                        </imageTags>
                        <dockerDirectory>src/main/docker</dockerDirectory>!-- Dockerfile文件地址 -->
                        <resources>
                            <resource>
                                       <!--  <targetPath>/</targetPath> -->
                                       <!-- ${project.build.directory},项目构建输出目录,默认为target/ -->
                                <directory>${project.build.directory}</directory>
                                        <!-- ${project.build.directory},打包出来的jar名称,默认为${project.artifactId}-${project.version} -->
                                <include>${project.build.finalName}.jar</include>
                            </resource>
                        </resources>
                    </configuration>
                </plugin>
            </plugins>
        </build>  

    2.3 生成docker镜像的shell脚本

    1. 1.    [root@izwz918nqae9soh0p70seuz ~]# cd /root/bin  
      2.    [root@izwz918nqae9soh0p70seuz bin]# ls  
      3.    blogs_build.sh  blogs_run.sh  deploy.sh  mall_backend.sh  mall_frontend.sh  restart_nginx.sh  
      4.    [root@izwz918nqae9soh0p70seuz bin]# cat blogs_build.sh   
      5.      
      6.      
      7.    #!/bin/bash  
      8.    # author xw  
      9.      
      10.    # create_date 2018年11月6日   
      11.    "===========进入git项目mmall目录============="  
      12.    cd /app/gitRepository/blogs  
      13.      
      14.    echo "==================删除之前的tag====================="  
      15.      
      16.    rm -rf *  
      17.      
      18.    echo "==========git切换分之到mmall-v1.0==============="  
      19.    #git clone --branch  master git@gitee.com:weiqinshian/blogs.git  
      20.    git clone --branch  v$1  git@gitee.com:weiqinshian/blogs.git  
      21.      
      22.    echo "===========编译并跳过单元测试===================="  
      23.    cd  blogs/blogs  
      24.    mvn clean package docker:build -Ptest -DskipTests=true  
      25.    [root@izwz918nqae9soh0p70seuz bin]# 

    2.4 运行镜像生成容器的shell脚本

    1.    [root@izwz918nqae9soh0p70seuz bin]# cat blogs_run.sh   
    2.    if [[ $# -lt 1 ]];then  
    3.    echo "para required : version_name"  
    4.    exit  
    5.    fi  
    6.    docker run --name  blogs$1 -p 9009:7077 -d -v /app/conf/application.properties:/app/config/blogs/application.properties  -v /app/config/blogs/log4j.properties:/opt/xw-blogs/log4j.properties  -v /app/logs:/opt/xw-blogs/logs   docker.xw.com.cn/gravityforce/blogs /bin/bash  
    7.    [root@izwz918nqae9soh0p70seuz bin]#  

    2.5 使用docker 命令将镜像推送到阿里云镜像仓库

     

    2.6 查看阿里云docker镜像仓库

     

  • 相关阅读:
    现代软件工程 第一章 概论 第3题——韩婧
    现代软件工程 第一章 概论 第2题——韩婧
    小组成员邓琨、白文俊、张星星、韩婧
    UVa 10892 LCM的个数 (GCD和LCM 质因数分解)
    UVa 10780 幂和阶乘 求n!中某个因子的个数
    UVa 11859 除法游戏(Nim游戏,质因子)
    Codeforces 703C Chris and Road 二分、思考
    Codeforces 703D Mishka and Interesting sum 树状数组
    hdu 5795 A Simple Nim SG函数(多校)
    hdu 5793 A Boring Question 推公式(多校)
  • 原文地址:https://www.cnblogs.com/weiqinshian/p/10471967.html
Copyright © 2011-2022 走看看