后台管理微服务(二)——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/resourcesdirectory>
                
                <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-blogsfinalName>
         <plugins>
        
            <plugin>  
              <artifactId>maven-resources-pluginartifactId>  
                <executions>  
                  <execution>  
                      <id>copy-resourcesid>  
                     <phase>validatephase>  
                       <goals>  
                           <goal>copy-resourcesgoal>  
                     goals>  
                <configuration>  
                    <outputDirectory>${project.build.directory}outputDirectory>  
                    <resources>  
                        <resource>  
                        
                            <directory>src/main/resources/profiles/${profiles.active}directory>  
                            <filtering>truefiltering>  
                        resource>  
                    resources>  
                  configuration>  
  
                 execution>  
            executions>  
         plugin>        
          <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.springframeworkgroupId>
                        <artifactId>springloadedartifactId>
                        <version>1.2.0.RELEASEversion>
                    dependency>
                dependencies>
            plugin>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
            <plugin>
                <groupId>com.spotifygroupId>
                <artifactId>docker-maven-pluginartifactId>
                <version>0.4.11version>
                <configuration>
                <serverId>docker-aliyunserverId>
                <registryUrl>${docker.repostory}registryUrl>
                
                    <imageName>${project.repository}/${project.codeName}/${project.moduleName}imageName>
                            <forceTags>trueforceTags>
                    <imageTags>
                        <imageTag>${project.version}imageTag>
                        <imageTag>latestimageTag>
                    imageTags>
                    <dockerDirectory>src/main/dockerdockerDirectory>!-- Dockerfile文件地址 -->
                    <resources>
                        <resource>
                                   
                                   
                            <directory>${project.build.directory}directory>
                                    
                            <include>${project.build.finalName}.jarinclude>
                        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镜像仓库

相关