Docker 入门指北

Docker 是什么? Docker是个管理容器(Container)的服务,提供「应用层级」的虚拟化技术。 不同于传统虚拟机,Docker 依靠 Linux 上的命名空间(Namespaces)、控制组(Control groups)、Union 文件系统(Union file systems)和容器格式(Container format)等技术,来达到应用资源限制与封装隔离。 传统虚拟机和 Docker 对比: 虚拟机运行在虚拟硬件上,应用运行在虚拟机内核上。而 Dockerd 是宿主机上的一个进程, 应用只是 Dockerd 的一个子进程, 换句话说,应用直接运行在宿主机内核上。 虚拟机需要特殊硬件虚拟化技术支持, 因而只能运行在物理机上。Docker 没有硬件虚拟化, 因而可以运行在物理机、虚拟机, 甚至 Docker 容器内(嵌套运行)。 因为没有硬件虚拟化及多运行一个 Linux 内核的开销,应用运行在 Docker 上比虚拟机上更轻、更快。 笔者注:传统虚拟机和 Docker 是不同级别的虚拟化。虚拟化技术要完整虚拟化一台计算机,容器技术更像是操作系统层面的虚拟化,它只需要虚拟出一个操作系统环境。具体怎么用还要根据实际应用场景来。 Docker 基本概念 镜像(Image) 镜像描述了 Docker 容器运行的初始文件系统,,包含运行应用所需的所有依赖。即可以是一个完整的操作系统。 也可以仅包含应用所需的最小 bin/lib 文件集合。

Gradle 构建跳过测试

1. 介绍 尽管跳过测试通常不是一个好主意,但在某些情况下它可能有用,并且可以为我们节省一些时间。 例如,考虑我们正在开发一个新功能,并且希望在中间版本中看到结果。 在这种情况下,我们可能会暂时跳过测试以减少编译和运行它们的开销。 毫无疑问,忽略测试会导致许多严重的问题。 在这个简短的教程中,我们将了解如何在使用Gradle构建工具时跳过测试。 2. 使用命令行标志 首先,让我们创建一个我们想跳过的简单测试: 1 2 3 4 @Test void skippableTest() { Assertions.assertTrue(true); } 当我们运行构建命令: 1 gradle build 我们将会看到运行的任务: > ... > Task :compileTestJava > Task :processTestResources NO-SOURCE > Task :testClasses > Task :test > .

Nginx 前后端分离配置

为了解耦前后端,我们将前后端分离,但同时增加了架构的复杂度。本文探讨两种基于 Nginx 的前后端分离配置思路。 背景 假设我们有前后端两个应用,需要 Nginx 做流量转发,前端转发给 frontend, 后端转发给 backend 结构如下图: 方案一 使用同一个域名,应用加前缀 应用加前缀,其实相当于在应用上加了命名空间,这样配置下来如下: 前端:app.mangobeta.com/frontend 后端:app.mangobeta.com/backend 架构如图: 这样做的好处是,前后端不存在跨域问题,配置也比较灵活,一次性工作,比较推荐。 Nginx 配置: 1 2 3 4 5 6 7 location /frontend { proxy_pass http://localhost:8081; } location /backend { proxy_pass http://localhost:8082; } 但有时后端不方便加前缀,使用 Nginx rewrite 重写规则也可以。

Jenkins 以 Docker 方式部署 Springboot

本文主要介绍笔者自己使用 Jenkins 自动化打包 Springboot,并以 Docker 方式部署流程。这里没有用到 K8 等管理工具,规模还没到那一步,以下流程经过实践,对于小规模应用还可以。 架构 实现 Jenkins 共2个任务:构建任务和部署任务。 构建任务是源码到 Jar 包再到 Docker 镜像的过程。 部署任务对远程服务器 Docker 更新的过程。 构建任务 拉取代码 Gradle 打包 本文示例采用 jar 包方式 打 Docker 镜像 将应用 jar 包,复制到 Docker 镜像,基础镜像采用 AdoptOpenJDK 官方镜像。只作为运行环境,建议使用 JRE 镜像。 基于基础镜像也可以改造成自己的,比如:

AdoptOpenJDK 是什么?

JDK 主要有2个分支,Oracle JDK 和 OpenJDK,都是 Oracle 维护的。然鹅, JDK 11 开始收费了,不能用于商业业务目的开发。 条款: 您不能:将程序用于除开发、测试、原型设计和演示应用程序之外的任何数据处理或任何以商业、生产或内部业务为目的的行为; 那么只好使用 OpenJDK 了,但是 OpenJDK 本身是没有 LTS (长期支持)版本的,一般只维护3个月,后面出问题咋办,这就体现出 Oracle JDK 的优势了,JDK 8,11 都是 LTS 版本。 想用更好更稳定的版本,掏钱吧! 当然也可以不掏这个钱,这里介绍的本文的主角:AdoptOpenJDK AdoptOpenJDK 是免费的、完全无品牌的 OpenJDK 版本,基于 GPL 开源协议(+Classpath Extension),以免费软件的形式提供社区版的 OpenJDK 二进制包,公司也可安全且放心使用。与由 Oracle 的 OpenJDK 构建版本不同,这些版本会提供更长的支持,像 Java 11 一样,至少提供 4 年的免费长期支持(LTS)计划。