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镜像

 FROM ubuntu:14.04
#刷新包缓存 并且 安装wget工具
RUN apt-get update && apt-get install -y wget
#设置工作目录
WORKDIR /home
# 安装jdk
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"
RUN tar xzf jdk-8u141-linux-x64.tar.gz
# 配置环境变量
ENV JAVA_HOME /home/jdk1..0_141
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib
ENV PATH $PATH:$JAVA_HOME/bin
# Set the timezone.
RUN echo "Asia/Shanghai" > /etc/timezone
RUN dpkg-reconfigure -f noninteractive tzdata
RUN locale-gen zh_CN.UTF- &&\
DEBIAN_FRONTEND=noninteractive dpkg-reconfigure locales
RUN locale-gen zh_CN.UTF-
ENV LANG zh_CN.UTF-
ENV LANGUAGE zh_CN:zh
ENV LC_ALL zh_CN.UTF-
# Make logs dir
RUN mkdir -p /opt/xw-blogs/logs
#expose
EXPOSE
EXPOSE
# Add the jar and run
ADD xw-blogs.jar /opt/xw-blogs/xw-blogs.jar
WORKDIR /opt/xw-blogs
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. .    [root@izwz918nqae9soh0p70seuz ~]# cd /root/bin
    . [root@izwz918nqae9soh0p70seuz bin]# ls
    . blogs_build.sh blogs_run.sh deploy.sh mall_backend.sh mall_frontend.sh restart_nginx.sh
    . [root@izwz918nqae9soh0p70seuz bin]# cat blogs_build.sh
    .
    .
    . #!/bin/bash
    . # author xw
    .
    . # create_date 2018年11月6日
    . "===========进入git项目mmall目录============="
    . cd /app/gitRepository/blogs
    .
    . echo "==================删除之前的tag====================="
    .
    . rm -rf *
    .
    . echo "==========git切换分之到mmall-v1.0==============="
    . #git clone --branch master git@gitee.com:weiqinshian/blogs.git
    . git clone --branch v$ git@gitee.com:weiqinshian/blogs.git
    .
    . echo "===========编译并跳过单元测试===================="
    . cd blogs/blogs
    . mvn clean package docker:build -Ptest -DskipTests=true
    . [root@izwz918nqae9soh0p70seuz bin]#

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

.    [root@izwz918nqae9soh0p70seuz bin]# cat blogs_run.sh
. if [[ $# -lt ]];then
. echo "para required : version_name"
. exit
. fi
. docker run --name blogs$ -p : -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
. [root@izwz918nqae9soh0p70seuz bin]#

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

2.6 查看阿里云docker镜像仓库

后台管理微服务(二)——docker的使用的更多相关文章

  1. springcloud(十二)-springcloud-config统一管理微服务配置

    1.为什么要统一管理微服务配置 对于传统的单体应用,常使用配置文件管理所有配置.例如一个SpringBoot开发的单体应用,可将配置内容放在application.yml文件中.如果需要切换环境,可设 ...

  2. 微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程 ...

  3. 字节跳动内部微服务架构-Docker实战学习笔记分享 真香

    前言 基于 Spring Cloud 的微服务设计和开发,已经越来越多地得到了更多企业的推广和应用,而 Spring Cloud 社区也在不断的迅速发展壮大之中,近几年时间,Spring Cloud ...

  4. 微服务与Docker介绍

    什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...

  5. CI Weekly #3 | 关于微服务、Docker 实践与 DevOps 指南

    CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...

  6. Istio Service Mash管理微服务

    Istio Service Mash管理微服务 今天的文章通过Istio开源项目展示如何为Kubernetes管理的微服务提供可见性,弹性,安全性和控制. 服务是现代软件体系结构的核心.比起复杂庞大的 ...

  7. .NET Core微服务二:Ocelot API网关

    .NET Core微服务一:Consul服务中心 .NET Core微服务二:Ocelot API网关 .NET Core微服务三:polly熔断与降级 本文的项目代码,在文章结尾处可以下载. 本文使 ...

  8. 9.Spring Cloud Config统一管理微服务配置

    Spring Cloud Config统一管理微服务配置 9.1. 为什么要统一管理微服务配置 9.2. Spring Cloud Config简介 Spring Cloud Config为分布式系统 ...

  9. 小D课堂 - 新版本微服务springcloud+Docker教程_汇总

    小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介 小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型 小D课堂 - 新版本微服务s ...

随机推荐

  1. AC日记——一元三次方程求解 洛谷 P1024

    题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差 ...

  2. "从客户端中检测到有潜在危险的 Request.Form 值"的解决方案汇总

    #事故现场 在一个asp.net 的项目中,前端通过ajax将富文本中的文字内容post到服务端的一个ashx中,在ashx中尝试读取参数值时, 结果报错:“从客户端中检测到有潜在危险的 Reques ...

  3. 洛谷——P1988 火炬

    P1988 火炬 题目描述 2008北京奥运会,你想成为四川汶川的一名火炬手,经过层层选拔,终于到了最后一关,这一关是一道很难的题:任意给定一个正整数N(N<=100000),求一个最小的正整数 ...

  4. linux grep 查找文件内容

    自试: wang@wang:~$ grep -i "*args*" ~/IGV01-SW/src/bzrobot_diagnostics/bzrobot_lightbelt_man ...

  5. Kalendae使用总结

    2019-03-06 16:50:18 git官方教程:https://github.com/Twipped/Kalendae js.css:https://pan.baidu.com/s/1Ye-d ...

  6. MachineLearningInAction

    2017-01-07 20:14:45 前面两周主要都是在复习然后考试,每天其实过得也挺苦逼的.基本上项目和学习上的是都没有接触了:复习了随机过程和数字信号处理和信号检测和估值:主要都是复习一些理论上 ...

  7. GDB调试动态链接库

    http://cyukang.com/2012/06/25/gdb-with-libso.html http://cyukang.com/2011/05/06/valgrind.html

  8. Redis绑定多个ip地址

    Redis绑定多个ip地址 学习了:https://www.zhihu.com/question/20346112/answer/17157379 注意,用空格进行分隔 bind 127.0.0.1 ...

  9. Android的包管理机制浅析(二)

    上篇刚好说到获取到了签名信息,以下进入安装过程,直接上源代码: private void installNewPackageLI(PackageParser.Package pkg, int pars ...

  10. Eclipse 安装(Oxygen版本)

    Eclipse 安装(Oxygen版本) Eclipse 最新版本 Eclipse Neon,这个首次鼓励用户使用 Eclipse Installer 来做安装,这是一种由Eclipse Oomph提 ...