用 Docker 现代化你的传统企业!|航海日志 Vol.22

汇总一周容器圈热点资讯,让开发者了解最 in 的容器技术,让企业熟知最实时的国内外容器行业动态。​

通过 Docker 网络研讨会将传统的应用现代化

e4dd70ac-b365-49a1-b138-7c9e81e4672b-6

IT 公司总是花费 80 %的预算来维护现有的应用,而仅花费 20 %的预算用于创新工作。这个比例在过去十年间没有发生任何改变,但是创新的压力一直存在。无论它直接来源于客户的新需求,或者是来源于你的管理链,它的内容都是相同的:你需要花更少的代价做更多的事

值得庆幸的是,Docker 有现代化传统应用的功能。你可以使用现有的、与你业务相同的应用程序,使其效率提高 70 %,更安全,且适用于任何基础架构。

使用自定义资源扩展 Kubernetes 1.7

1

如果想要构建集群应用程序或软件即服务。在开始编写一行应用程序代码之前,你必须解决一系列架构问题,包括安全性,多租户,API 网关,CLI,配置管理和日志记录。

那么又该如何将所有的基础设施从 Kubernetes 中充分利用, 使得在开发中节省一些人力时间, 并专注于实现你专属的服务?

最新的 Kubernetes 1.7 添加了一个名为 CustomResourceDefinitions(CRD)的重要功能,它可以插入您自己的托管对象和应用程序,就像它是一个本地的Kubernetes 组件一样。这样,您可以利用 Kubernetes CLI,API 服务,安全性和集群管理框架,而无需修改 Kubernetes 或了解其内部。我们在这里使用 Iguazio 将 Kubenetes 与我们新的实时“无服务器”项目和数据平台对象无缝集成。

Docker 环境下的 CI/CD

AAEAAQAAAAAAAA2pAAAAJDg0N2RjODQyLTQ0MWQtNGQyMi05MmQwLTAxOTA5Njk3ODFkZA

Docker 的一大优势在于它能够实现无缝的 CI/CD 流程;容器只是一个运行的 Docker 镜像的只读实例,更新容器就像更新镜像文件一样简单,然后我们还可以根据更新的镜像重新部署容器。甚至有免费的工具可以持续监控镜像存储库,并在检测到更新的镜像的瞬间重新部署容器。然而,虽然这简化了容器的运行,但创建和更新镜像仍然需要我们手动操作。

将 CI/CD 概念提升到一个新的水平,即创建一个开发流程,自动化您在软件交付过程中的所有步骤。典型的单一业务流程包括以下基本步骤:

  • 构建 — 启动构建过程,其中源代码被转换为编译的伪像并打包在 Docker 镜像中。
  • 测试 — 使用支持您的框架的任何测试工具在 Docker 容器内运行单元测试。
  • 推送 — 将测试的 Docker 镜像推送到 Docker 注册表服务中,例如 Docker Hub。
  • 部署 — 将 Docker 镜像从注册表服务下载到适用的分段/生产 Docker 环境。
  • 运行 – 从一个或多个镜像实例化容器或服务。

CI/CD 的下一个逻辑扩展是通过 webhook 将开发代码库完全集成到开发管道中;简单地说,这允许在代码存储库中发生事件(例如代码提交或合并)时执行自动构建部署流水线流程。通过这种集成,每当开发人员将代码提交到存储库时,几秒钟后,Docker 容器将与开发人员的更改结果相结合,然后可以将其用于实时集成测试。

ETP(Emerging Technology Partners) 研究和验证了市场上最全面的以容器为中心的 CI/CD 功能解决方案。我们的解决方案允许您将集成测试,UI 测试或性能测试所需的整个环境转化为构建的一部分,从而允许您测试任何提交或 PR。通过我们的解决方案,开发人员和测试人员可以快速找到回归,并在分期前进行修复。采用该方案可以加快开发周期,并且节省时间和精力。

使用 Docker 创建 SQL Server 容器

到目前为止,我关于容器的文章一直在讨论仅使用单一容器的情况。在现实世界中,情况不可能是这样的。在任何时候,主机上都运行许多个容器(我有 30 多个)。

 

我需要一种方法来简单的开启、运行多个容器。可行的两种办法:

  • 应用服务器驱动
  • 容器主机驱动

在应用服务器驱动方法中,应用程序服务器将与容器主机通信,构建运行容器并获取它的详细信息(例如端口号)。

这种点对点的模式效果良好,因为只有在需要的情况下,容器才能被启动和使用,从而节省了主机上的资源。但是,这意味着必须等待容器成功启动以后,应用程序才能开始工作。OK,我知道启动容器的过程很快,但是我所要达到的目的是减少部署时间。

如果我们知道需要多少个容器?如果我们希望在容器部署后,应用能直接与它们相连接?

接下来我会向你们介绍–使用 docker compose 一次性构建多个容器的所有步骤。

Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。

作为 SQL Server 开发者,我们只对应用程序感兴趣,但这并不意味着我们获得 compose 的优势。

我要做的是按步骤启动运行 SQL Server 的 5 个容器,所有这些容器都使用不同的sa密码监听不同的端口。

在执行命令之前的准备工作。我将在我的 C:\驱动器上创建几个文件夹,这些文件夹将用于保存 compose 和 dockerfile:

mkdir C:\docker  
mkdir C:\docker\builds\dev1  
mkdir C:\docker\compose  

在 C:\docker\builds\dev1 目录中,我将放入数据库文件和 dockerfile

buildlocation

注:- 注意 dockerfile 的名称(dockerfile.dev1)

以下是我 dockerfile 的代码:

# building our new image from the microsft SQL 2017 image
FROM microsoft/mssql-server-windows
 
 
# creating a directory within the container
RUN powershell -Command (mkdir C:\\SQLServer)
 
 
# copying the database files into the container
# no file path for the files so they need to be in the same location as the dockerfile
COPY DevDB1.mdf C:\\SQLServer
COPY DevDB1_log.ldf C:\\SQLServer
 
COPY DevDB2.mdf C:\\SQLServer
COPY DevDB2_log.ldf C:\\SQLServer
 
COPY DevDB3.mdf C:\\SQLServer
COPY DevDB3_log.ldf C:\\SQLServer
 
COPY DevDB4.mdf C:\\SQLServer
COPY DevDB4_log.ldf C:\\SQLServer
 
COPY DevDB5.mdf C:\\SQLServer
COPY DevDB5_log.ldf C:\\SQLServer
 
 
# attach the databases into the SQL instance within the container
ENV attach_dbs="[{'dbName':'DevDB1','dbFiles':['C:\\SQLServer\\DevDB1.mdf','C:\\SQLServer\\DevDB1_log.ldf']}, \ 
    {'dbName':'DevDB2','dbFiles':['C:\\SQLServer\\DevDB2.mdf','C:\\SQLServer\\DevDB2_log.ldf']}, \ 
    {'dbName':'DevDB3','dbFiles':['C:\\SQLServer\\DevDB3.mdf','C:\\SQLServer\\DevDB3_log.ldf']}, \ 
    {'dbName':'DevDB4','dbFiles':['C:\\SQLServer\\DevDB4.mdf','C:\\SQLServer\\DevDB4_log.ldf']}, \ 
    {'dbName':'DevDB5','dbFiles':['C:\\SQLServer\\DevDB5.mdf','C:\\SQLServer\\DevDB5_log.ldf']}]"

在 C:\docker\compose 目录下,我创建了一个 docker-compose.yml 文件用于定义我想在容器中运行的服务。

改文件的代码:

# specify the compose file format
# this depends on what version of docker is running
version: '3'
 
 
# define our services, all database containers
# each section specifies a container... 
# the dockerfile name and location...
# port number & sa password
services:
  db1:
    build:
        context: C:\docker\builds\dev1
        dockerfile: dockerfile.dev1
    environment:
      sa_password: "Testing11@@"
      ACCEPT_EULA: "Y"
    ports:
      - "15785:1433"
  db2:
    build:
        context: C:\docker\builds\dev1
        dockerfile: dockerfile.dev1
    environment:
      sa_password: "Testing22@@"
      ACCEPT_EULA: "Y"
    ports:
      - "15786:1433"
  db3:
    build:
        context: C:\docker\builds\dev1
        dockerfile: dockerfile.dev1
    environment:
      sa_password: "Testing33@@"
      ACCEPT_EULA: "Y"
    ports:
      - "15787:1433"
  db4:
    build:
        context: C:\docker\builds\dev1
        dockerfile: dockerfile.dev1
    environment:
      sa_password: "Testing44@@"
      ACCEPT_EULA: "Y"
    ports:
      - "15788:1433"
  db5:
    build:
        context: C:\docker\builds\dev1
        dockerfile: dockerfile.dev1
    environment:
      sa_password: "Testing55@@"
      ACCEPT_EULA: "Y"
    ports:
      - "15789:1433"

注: – 要检查哪个版本的 docker 与哪个 compose 文件格式兼容,https://docs.docker.com/compose/compose-file/ 查看兼容表。

既然我们创建好了文件,让我们运行我们的第一个 compose 命令。

docker-compose

注: -这是一个测试命令,如果安装了它,您应该能看到一个帮助参考(您可以跳过下一部分)。

docker-compose-error

那么我们需要安装。运行:

Invoke-WebRequest "https://github.com/docker/compose/releases/download/1.14.0/docker-compose-Windows-x86_64.exe" -UseBasicParsing -OutFile $Env:ProgramFiles\docker\docker-compose.exe

上面命令中的1.14.0是最新版本。要检查最新版本,请跳转到这个(https://github.com/docker/compose/releases)。

安装完成后,请验证版本:

docker-compose version

docker-compose-version

在运行 compose 命令之前,进到 C:\docker\compose 目录下。

cd C:\docker\compose

现在我们可以运行 compose 命令。使用 compose 构建容器的命令非常简单:

docker-compose up -d

该脚本基于 docker-compose.yml,并构建了 5 个引用 dockerfile.dev1 的容器。

我可以通过运行以下指令来确认:

docker ps

composecontainersrunning

完成,五个容器正在运行!通过使用 docker compose,我们可以使用一个命令构建运行 SQL 的多个容器。这对构建开发环境帮助很大,我们部署了应用程序之后,它们可以立即连接到容器中的 SQL。

这一期的『航海日志』就到这里,下期再浪~

参考链接

  • https://blog.docker.com/2017/07/modernize-traditional-applications-docker-webinar-recap/
  • https://thenewstack.io/extend-kubernetes-1-7-custom-resources/
  • https://www.linkedin.com/pulse/cicd-docker-environments-neil-cresswell
  • https://dbafromthecold.com/2017/07/12/creating-sql-server-containers-with-docker-compose/

作者介绍

夏岩:DaoCloud 技术顾问,伪の全栈工程师 && 语言爱好者。

杨雪颖 Misha:DaoCloud 技术顾问,能文能撸码の通用型选手,兼 Labs 吉祥物。

DaoCloud 公司简介:「DaoCloud 道客」云原生领域的创新领导者,成立于 2014 年底,拥有自主知识产权的核心技术,致力于打造开放的云原生操作系统为企业数字化转型赋能。产品能力覆盖云原生应用的开发、交付、运维全生命周期,并提供公有云、私有云和混合云等多种交付方式。成立迄今,公司已在金融科技、先进制造、智能汽车、零售网点、城市大脑等多个领域深耕,标杆客户包括交通银行、浦发银行、上汽集团、东风汽车、海尔集团、屈臣氏、金拱门(麦当劳)等。目前,公司已完成了 D 轮超亿元融资,被誉为科技领域准独角兽企业。公司在北京、武汉、深圳、成都设立多家分公司及合资公司,总员工人数超过 400 人,是上海市高新技术企业、上海市“科技小巨人”企业和上海市“专精特新”企业,并入选了科创板培育企业名单。

未经允许不得转载:DaoCloud道客博客 » 用 Docker 现代化你的传统企业!|航海日志 Vol.22

申请试用