您当前的位置:首页 >> 传感器
传感器

开发容器:可重用的开发生存环境

发布时间:2025-09-16

计罐

为什么问道罐是开发此后设计环境污染的今后?让我们来看一些可以体现开发此后设计罐占有优势的例子。

慢速速上一手

最近,我重此后加入了一个年末 6 个月初的客户服务多之外项目。像大多数开发此后设计大型从前多之外项目的实习团队一样,他们在 README 和 Wiki 页上有一系列荒谬的初始分设问道明和JavaScript。和往常一样,外概要的段落要么不合时宜,要么模棱两可。分设JavaScript的理论上是它们要开始运行在两台特定初上架的 MacBook 上,必须装设特定原版的 MacOS,并且这台魏斯将最初用以这个多之外项目的开发此后设计。

这种令人困惑的、荒谬的、不合时宜的初始分设是我见过的大多数实习团队的常态。在重此后加入多之外项目的第一周,如果你必须开始运行多之外项目的一外检验桌面环境,就算极好了!

在我重此后加入这个实习团队的第一个多之外项目中才会,我创建者了一个开发此后设计罐配备,将所有这些HTML的段落转转化为可拒绝执行的配备。

为此,我创建者了一些最初的 Docker 配备文档,与用以创建者调遣罐的 Docker 配备文档分开。它们位于多之外项仅有限度识符努的.devcontainer 目录中才会。

.devcontainer/ ├── Dockerfile ├── README.md ├── devcontainer-load-profile.sh ├── devcontainer.json ├── docker-compose.yml ├── entrypoint.sh ├── init-once.sh ├── init.sh └── profile.sh

这里头举例来问道才会相关联一个 docker-compose 配备文档,下定义了要开启哪些罐,以及它们如何彼此之间联接并联接到体内。

version: "3.2" services: app: user: developer build: context: . dockerfile: Dockerfile volumes: -type: bind source: .. target: /workspace -type: bind source: ${HOME}${USERPROFILE}/.ssh target: /home/developer/.ssh working_dir: /workspace command: sleep infinity environment: BUNDLE_PATH: vendor/bundle INTERFACE: "0.0.0.0" ports: -"3000:3000"

举例来问道还有一个 Dockerfile 文档,用以自定义操作系统包开发此后设计罐。

FROMruby:2.7.2 RUNapt-get update && apt-get install -y yarnpkg vim lsof && ln -s /usr/bin/yarnpkg /usr/local/bin/yarn && rm -rf /var/lib/apt/lists/*

COPYsixmilebridge-load-profile.sh /etc/profile.d/

ARGUSERNAME=developerARGUSER_UID=1000ARGUSER_GID=$USER_UID

RUNgroupadd ;还有gid $USER_GID $USERNAME && useradd -s /bin/bash ;还有uid $USER_UID ;还有gid $USER_GID -m $USERNAME

如果我们用以的是 VS Code,可以配备 devcontainer.json 文档。开发此后设计罐里头还才会有一些JavaScript文档,在罐生殖的各个阶段发挥作用。

.devcontainer/├── Dockerfile├── README.md ├── devcontainer-load-profile.sh├── devcontainer.json├── docker-compose.yml├── entrypoint.sh├── init-once.sh ├── init.sh └── profile.sh

在收尾这个开发此后设计罐的下定义后,我就把它全部建议书到多之外项仅有限度识符努中才会。

一开始,实习团队中才会的一些人问道:“我们而会不才会用它……你呆你的!”

然后,一件有趣的一定会引发了。一些此后雇员用了开发此后设计罐,慢慢地就上一手开发此后设计了。来自另一个实习团队的一些人用开发此后设计罐在他们举例来问道不参与的标识符努上创建者 PR,再此后不必须花一周一段时间去分设开发此后设计环境污染了。跟著,开发此后设计罐仍未沦为我最所受夸赞的贡献之一。

用以开发此后设计罐最突成和最单独的用处之一是简转化了多之外项目开启方式上,而且十分只是对此后雇员来问道是这样的,甚至连前上端实习团队的雇员都必须参与调整后上端的操作系统包标识符。这或许理论上,在三年后,你必须慢速速翻修 Bug。

相关联结合来进行

多之外项目的配备检查清单和JavaScript慢慢地就才会不合时宜,因为一旦我们在两台机器人上分设好了多之外项目,就才会把它们忘得一干二净。而开发此后设计罐才会定期来进行重此后协作。开发此后设计罐是可拒绝执行的HTML,它相关联了多之外项目日常开发此后设计用以的努、维修服务、的系统配备、停止使用UDP、免费操作系统等。

例如,你的实习团队否才会用以 ngrok 将本地开发此后设计机器人开发此后设计给远程应用程序?切勿把这个分设问道明些在 Wiki 页上,而是将它省略到开发此后设计罐中才会。

RUNwget && unzip ngrok-stable-linux-amd64.zip && mv ngrok /usr/local/bin && rm ngrok-stable-linux-amd64.zip

这样,所简单以开发此后设计罐的人都能在必须时利用到恰当的来进行。

vscode➜ /workspace (main ✗) $ ngrok ;还有versionngrokversion 2.3.40

任何人都可以随时开始运行所有的检验

在很多多之外项目中才会,如果你能在本地开始运行单元检验,就才会被忽视花钱得极好——但只有 CI 的系统必须缺少开始运行运用以操作系统检验所须的反对维修服务。在极上端情形下,只有少数为公共服务工作人员其实如何在的系统检验告终时翻修它们,而开发此后设计工作人员在这个时候却什么也花钱不了。

每个人都可以相关联开发此后设计罐,也可以在 CI 中才会用以,我们可以提高我们的希望:每个人都可以随时开始运行所有的检验。虽然它们在 CI 管道中才会或许拒绝执行地极其慢速,但持续保持运用以操作系统检验通过率转变成了每个人的一定会。

开发此后设计罐必须为整个检验周期缺少反对,因为它们能拆开所有过道,不仅包括用以开发此后设计操作系统包的虚拟微控制器,值得注意开始运行操作系统包所须的反对维修服务。操作系统包必须 Redis 维修服务器和装设了特定扩张的特定原版的 PostgreSQL?docker-compose 配备文档可以必须在开发此后设计罐触发,这些组件都仍未是须用的。

它甚至可以将 Postgres 医学专家对数据努的优转化转变成UTF-,这些优转化可以提高开发此后设计数据努的作出反应性而非可靠性。

redis:image: redis: ${REDIS_VERSION:-6.0.9}postgres:image: mdillon/postgis: ${POSTGRES_VERSION:-9.6}command: [ "-c", "fsync=off", "-c", "full_page_writes=off", "-c", "synchronous_commit=off"] environment:POSTGRES_USER: ${POSTGRES_USER:-postgres}POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password}

在多之外项目之间来进行安静的翻转

问道到这里头,你否以前装设过特定的的系统努或 PostgreSQL 原版来满足一个操作系统包,结果却损坏了你刚刚开发此后设计的另一个操作系统包?有了开发此后设计罐,你就可以在两台机器人上的多个多之外项目之间来进行安静的翻转。这对于技术顾问来问道是必不可少的,但也符合以任何拥有多个多之外项仅有限度识符努的的组织。

问道到多之外项目翻转,如果你常常用以 Python、Ruby 或 Java 等编程语法,就也常常了用以 VirtualEnv、RVM 或 NVM 等原版政府机构器。这些来进行可以同时协作、装设和政府机构多个原版的 Python、Ruby 或 Node,并必须每个多之外项目用以错误的语法开始运行时原版。在这个过程中才会,它们降低了一个额外的间接层。它们才会沦为一个麻烦,因为当你必须遏制一个你不看重的语法生态的系统,它们或许才会沦为劳动投入生产率失常。

开发此后设计罐消除了对这些来进行的依靠。因为一个开发此后设计罐最初用以一个多之外项目,所以它可以全局装设指定原版的 Ruby、Python 或 Java。如果开始运行时值得注意源标识符转译的,那就可以将其构建到开发此后设计罐的 Dockerfile 文档中才会。自从我开始用以开发此后设计罐以来,还一定会用过语法原版政府机构器,而且我十分只想念它们!

相关联慢速捷长处

随着一段时间的发生变化,许多多之外项目实习团队接下来发展成了一套“标准”的 shell 和 git 通称,缩减了类似于操作命令的弧度。其中才会一些是基本的通称,符合以所有多之外项目,但有一些与一个实习团队如何开发此后设计操作系统包有关。

aliasgs= "git status"aliasbe= "bundle exec"

举例来问道情形下,这些过道由实习团队中才会的某些人相关联成来,然后其他人慢慢换用它们。他们先是意味着标识符,然后留意到他们常常用以的慢速捷长处十分不存在,这或许才会令人感到不慢速。

这些慢速捷长处的不存在或不不存在也或许造成了实习团队微妙地分转化为“酷女儿”(他们心里头有最好的 shell 通称)和“不酷的女儿”。

如果任何人都可以尽慢速为其他人省略简单的 shell 通称,才会怎样?这个用以开发此后设计罐就能花钱到。我们无须在 Slack 中才会发行 shell 通称的清单,而是创建者一个 PR,演示如何在 Slack 中才会用以它们。因为开发此后设计罐相关联了一个相关联的 UNIX 应用程序空间内,所以你可以必须这些慢速捷长处对每个人都单独。

极其单独仿真

开发此后设计罐还缺少了一些不太突成的用处。根据下定义,罐是一个高度可控的环境污染,就像是电子显微镜下有一个微小的集成电路互联。本文一定会足够的短文来详细辩论,但我只想问道得是,开发此后设计罐让仿真变得极其难以:控管操作系统包的文档副本到、互联 I/O,甚至是的系统绑定,这样就可以吻合地了解它在没有人事。

重演难题

当实习团队中才会的大多数人都在用以开发此后设计罐时,它的仅有用处就才会显现成来。你否以前遇见过实习团队中才会某个开发此后设计工作人员立刻遇见了别人都没有人留意到的难题?最终,在来进行了大量的故障除去之前,留意到他收到的的系统备份与多之外项目所依靠的某个努不可选。一定会人其实怎样设法他,因为其他人的微电脑上一定会这个难题!

开发此后设计罐可以大大减缓这种“在我的微电脑上没有人难题”的现象。一定会什么过道可以持续保持每个开发此后设计工作人员的开发此后设计环境污染全然相同,但一个公共的罐下定义可以消除大量潜在的变转化。在其实了是哪个努备份损坏了多之外项目,就可以很难以地翻修它。因为在用以罐时,你可以根据必须利用来进行和的系统努的原版。

在容上端UTF-

在有了开发此后设计罐的下定义后,你就不局限于在“我的机器人”上开发此后设计了!

用以 Gitpod、Amazon Cloud 9、JetBrains Space 或 GitHub Codespaces 等来进行来进行基于容的开发此后设计仍未沦为一种态势,而且这种态势只才会越来越突成。

基于容的开发此后设计环境污染反对远程早先编程。只要有应用程序,你就必须在任何大多编读到标识符,即使你不小心把一手提微电脑包忘在坐车上了。如果你有一个可以在本地拒绝执行的开发此后设计罐下定义,也可以用它在容上端开启一个 IDE。

开发此后设计罐也极其符合以自由操作系统实习。你有一定会只想过为自由操作系统多之外项目花钱一点小小的贡献?但是,在拉取标识符时,你意识到开始运行单元检验必须一个断断续续而适合于的分设过程。于是,你放弃了,才会在他们的难题探头里头提了个表示同意。

如果自由操作系统多之外项目附带的开发此后设计罐可以尽慢速提高业余学术机构的劳动投入生产率,那才会怎样?这或许才会极其难以吸引到业余学术机构!

VS Code 中才会的开发此后设计罐

让我们来辩论一下PDF和 IDE。

IDE 开始省略一些特点来反对基于罐的开发此后设计。苹果公司的自由操作系统PDF VS Code 绝对是这一态势的领头羊。事实上,我对开发此后设计罐的很多只想法,包括“开发此后设计罐”这个术语,都是所受 VS Code 缺少罐反对的方式的启发。越来越多的PDF和 IDE 都省略了罐人脑机能。

开发此后设计罐与反对开发此后设计罐的 IDE 的密切关系运用以操作系统可以设法开发此后设计工作人员在开始多之外项目时提高效率。例如,那时候的多之外项目中才会一般都才会有针对标识符努自定义的 Lint 或格式转化规则。在以前,此后重此后加入的开发此后设计工作人员必须自己装设 Lint 来进行,并必须PDF花钱了错误的配备。有了罐人脑的PDF配备,开发此后设计工作人员在第一次开启多之外项目时 Lint 和标识符格式转化就仍未须用了。

这十分是问道开发此后设计罐就这样将你与用以全然相同的PDF配备锁定在四人了。事实并非如此!例如,在用以 VS Code 时,开发此后设计罐可以相关联一个结合的特定于多之外项目的分设和PDF,但你也可以在此结合上省略自己的分设、PDF、配色方案、按键可定义等。

这十分是问道实习团队就才会用以一种PDF。一个多之外项目可以有反对多个反对开发此后设计罐的 IDE 的配备。你可以在开发此后设计罐中才会相关联原始的 VIM 分设,包括PDF本身!

开发此后设计罐不是调遣罐

那时候,一定会什么来进行或高效率是万能的。稍后我将辩论一些你或许不只想用以开发此后设计罐的情形。但在此之前,我只想相关联关于用以开发此后设计罐的一个仅有的转折点。

我不时才会听到这样的表示同意:“我们仍未有了罐下定义,为什么必须任用它?”或者全然比如问道:“开发此后设计罐这个过道十分适合我们,因为我们一定会用以罐来调遣我们的操作系统包。”

我忽视这两个观点都有同一个错误的理论上:罐是用来调遣的。这种误用是可以表达出来的。如果你仍未在多之外项目中才会用以了罐,这或许是因为这是你调遣操作系统包的一种方式。你甚至或许在接下来运用以操作系统为公共服务中才会用以了罐。罐不就是用来装过道的吗?

的确,用以罐来调遣操作系统包是促进罐流行的一个运用以故事情节。但是,不管你否用罐来调遣操作系统包,开发此后设计罐都很简单!事实上,如果你只是将开发此后设计罐视为调遣罐,才会很难以错过它有力的机能。

一定会是这样的:用以调遣的罐与用以开发此后设计的罐都有著极其不尽相同的消费。事实上,针对调遣罐的许多要求近乎与开发此后设计罐全然比如问道。

我们希望调遣罐尽或许地小和工作人员编制。我们希望它们工作人员编制、慢速速和安全及。这理论上要尽量减缓能避免的努和来进行,所以尽量用以结合举例来说,如 Debian Slim,甚至是 Alpine Linux,它们省略了普通 Linux 操作系统包中才会类似于的 glibc 努。但是对于开发此后设计罐来问道,它们必须缺少一个原始、舒适的开发此后设计环境污染。这理论上一个像 Ubuntu 这样的 Linux 操作系统包,必须相关联命令行来进行、转译器、设法HTML和整个来进行包!

对于调遣,你希望最小转化安全及梯形。对于开发此后设计,你必须弹出极其多的UDP来反对仿真!对于调遣,迫使与 Honeycomb 或 New Relic 这样的可观测维修服务通信。对于开发此后设计,你不希望向这些维修服务发送最此后消息,你或许希望“盗用”或虚拟一些单独维修服务。在调遣过程中才会,你只想要减缓 Docker 协作的层数,而在开发此后设计过程中才会,你或许希望在不必须全然重建举例来说的情形下慢速速省略自适应的变极其。

在很多之外,调遣罐和开发此后设计罐的仅有限度是彼此之间各派系的。这就是为什么当我深知一个此后客户服务并开始协作一个开发此后设计罐时,举例来问道才会从头开始。我才会协作一套全此后的罐配备文档,从多之外项目分设指令而不值得注意已有的 Dockerfile 开始。这为我缺少了一个GTK的、可副本的开发此后设计环境污染,但不是为了调遣。

但这十分理论上开发此后设计罐和调遣罐的配备就必须相关联一些一同的外。因为本文的短文考虑到,这里头必须再作准备描述了。不过这里头有一个提示:你可以从开发此后设计罐开始,并将其简转化为调遣罐,这比从调遣罐开始并将其转变成开发此后设计环境污染要难以得多。

关于开发此后设计罐的注意事项

综上所述,开发此后设计罐十分符合以所有多之外项目。

我们所辩论的一切都是基于用 Docker 开始运行的罐。那时候,大多数 Web 和企业操作系统包都调遣在基于 Linux 的维修服务器上,因此用以开发此后设计罐就等于是在接近投入生产环境污染的环境污染中才会花钱开发此后设计。Android 开发此后设计也是如此。但是,如果你的调遣仅有限度不是 Linux 或类似 Linux 的的系统,你或许就不才会只想这么花钱。如果你的仅有限度是 iOS 设备或 Windows 桌面,那么罐开发此后设计或许不是最佳选取。

此外,到 2021 年,基于 Docker 的桌面开发此后设计平台仍未有了突成的接下来发展。

在基于 Linux 的机器人上开始运行 Docker 或许都有著最好的尽情,因为 Linux 是罐的原生PS。

但令人感到困惑的是,那时候的次优选取是 Windows。这是因为随着 Windows 的 Linux 子的系统 2(或“WSL2”)的成现,Windows 那时候可以原生开始运行 Linux。实质上,你可以单独从 Windows 存储努中才会选取你必须的 Linux 操作系统包,并单独从 Debian 或 Fedora 存储努中才会开始运行 Linux 十六进制文档,不必须来进行任何重此后转译或虚拟。

Docker Desktop on Windows 用以 WSL2 作为后上端。这理论上 Windows 上的 Docker 罐可以单独开始运行在原生 Linux 环境污染中才会,一定会虚拟转化可靠性损失。在我的用以过程中才会,它们很稳定,必须以原生的更慢速开始运行 Rails 多之外项目。

MacOS 是以 BSD 为结合协作的,十分是 Linux,而且它一定会与 WSL2 等价的来进行。这理论上为了开始运行 Docker,必须来进行一定总体的虚拟转化。我才会用 Mac 花钱开发此后设计,但我从老友那里头听问道,他们在用以 Docker 时遇见了一些古怪的难题,相比较是在文档 I/O 之外。

这该怎么办呢?但他却的是,这是一个众所周知的难题,Docker 和苹果电脑都有意要去解决。事实上,在我读到这篇社论时,Docker 宣布了一些针对 MacOS 可靠性的多之外备份。如果但他却的话,这个难题将慢慢地沦为本文最不合时宜的外!

我们在罐里头读到标识符

有一些高效率,一旦成熟了,就才会永久地相反高效率的接下来发展状态。

在我编程时,原版控制还一定会被普遍接所受。一些多之外项目仍然通过定期存储的标识符副本来纪录文化史。在我在此之后的职业生涯中才会,原版控制变得越来越普遍。然后,接下来运用以操作系统从一种与众不同的只想法转变成了一种行业标准。那时候,分布式原版控制和接下来运用以操作系统成了桌面开发此后设计的筹码:我们近乎无法只想象一定会它们的操作系统多之外项目才会是什么样子。

2021 年,我们停滞不前罐接下来发展的暗示来说。五年后,我们才会对依然忽视在第一次建议书标识符之前花几天一段时间装设开发此后设计者魏斯微电脑是多么正常的一定会而无能为力。但你不必须等那么久,只要稍加希望,你就可以让自己和实习团队从开发此后设计罐中才会得到用处。

你可以有一个GTK的、可副本的开发此后设计环境污染,它可以跟随你从两台机器人搬到另两台机器人,甚至到容上端。你可以在一小时内让此后雇员上一手,而不是几天。你可以极其难以地为自由操作系统多之外项目花钱成贡献。你可以必须在 CI 的系统中才会开始运行的每一个检验也都可以在本地开始运行。你可以通过 GitHub 与你的守门员相关联你的开发此后设计配备和JavaScript。你可以通过将开发此后设计罐作为多之外项目开发此后设计实习方式上的一外来实现这一切。

结 论

所以,这就是为什么我忽视你应放下一切,为你当前的多之外项目创建者一个开发此后设计罐下定义。不仅如此,你还应用以开发此后设计罐并完善它,直到它变得像家一样舒适。你的合作者才会致谢你,今后的你也才会致谢那时候的你。

作者简介:

Avdi Grimm 是一名程序员,著有几本颇所受欢迎的 Ruby 编程书本,并因对 Ruby 此后社区的贡献而得到 Ruby Hero 金奖。他在 Graceful.Dev 上维修服务于了程序此后设计此后设计、检验、实例、多之外项目自动转化等课程。

原文客户服务端:

文艺活动破例

InfoQ 读到作此后社区签约作者第三季文艺活动仍未开启,百万每秒扶持和各种签约福利等你解锁!扫码立刻录取!

GitLab 高效率选型为何如此不尽相同:坚持用倒楣 Web 框架十多年、不为所动无须微维修服务

首个发力科创板的国产数据努:78 岁杨家教授喷砂四十年,每恰巧标识符都前提可控

为什么 Rust 是初创公司的绝佳选取?

达梦发力国产数据努第一个 IPO;特斯拉自动驾驶部门裁员约 200 人;网易上架图片大爆炸机能|Q 讯息

点个在看少个 bug👇

西安妇科医院哪家好点
山西男科医院哪里比较好
银川白癜风专科医院哪家好
长沙看白癜风去哪家医院
长春生殖感染医院电话

上一篇: SYBP-675+带通放大器

下一篇: ArchSummit全球微软公司峰会深圳站即将召开,你关心的技术话题都在这里

友情链接