CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

设计一个简单的计算器,实现加减乘除(满满干货)整数的加减乘除运算,编写一个简单的 Dockerfile,源码交易平台,

1.设计一个有加减乘除的计算器

容器化与改编 Bandit Ep4在 Ep3 里制作了战争游戏 Xgeli 的第 0 关,玩家需要以适当的 Linux 命令读取在用户 xgeli0 的家目录下的 readme 文件获取密码实现这个关卡内容、搭建成镜像的就是以下这个 Dockerfile,制作流程已记录在 。

2.设计一个计算器程序,实现整数的加减乘除运算

Ep3在这里做了一点更改,并会在 0.0.3 版本实现和接下来解释FROM alpine:3.17.0 RUN adduser –shell /bin/sh –disabled-password xgeli0 && \ echo “xgeli0:xgeli0” | chpasswd USER xgeli0 RUN echo “The password is {boJ9jbbUNNfktd78OOpsqOltutMc3MY1}.” > ~/readme。

3.简单的整数加减乘除运算

使用 FROM 选择一个 Linux 发行版做基础镜像这个 Dockerfile 的内容包括了创建通常用户 xgeli0 并在其家目录下创建 readme 文件可是,容器就是一个完整的虚拟服务器所以在可以创建用户和文件前,必须选择一个操作系统。

4.制作一个简单的计算器,能进行加减乘除计算

准确来说是选择一个 Linux 发行版(distribution)在选择发行版,我可以选择最为普及的 Ubuntu 还有制作容器镜像常见的 Alpine我也考虑了 Alpine 作为基础的 BusyBox。

5.用计算器计算加减乘除

最终我在这三个中,基于以下几种理由选择了 Alpine:1. Alpine 镜像的文件大小比 Ubuntu 小这意味着 Alpine 比 Ubuntu 包含更少的默认组件,也意味着当我需要这些组件时我就必须去了解它们,然后自己在 Alpine 上安装。

6.整数加减乘除计算题

易用性底,不过对我学习有用2. Alpine 的有些组件也不同于其它常见的发行版虽然有点奇怪,可是就是这个原因,我必须时刻提醒自己选择携带性更高的知识,比如选择使用合规 POSIX 标准的外壳脚本(shell script)。

7.编写一个简单的计算器,能够实现整数的加

3. BusyBox 虽然更加小更加「独特」,不过 BusyBox 基于设计理念是没有软件包管理系统的,也就是没法方便的安装其它程序所以以 Alpine 3.17.0 版镜像作为基础镜像,Dockerfile 要使用 。

8.编写一个具有加减乘除功能的简易计算器

FROM 指示这样开头:FROM alpine:3.17.0使用 RUN 执行 Linux 命令Dockerfile 可用 RUN 指示来执行任何 Linux 命令形成容器所需的系统环境在这个容器,需要为第 0 关创建一个用户 。

9.最简单的加减乘除

xgeli0在 Linux 创建用户的命令有 adduser 或 useradd这两个命令,而 Alpine 只提供 adduser由于 adduser 会在创建用户时要求输入密码,因此而使用了 –disabled-password

10.设计一个简易计算器,能实现加减乘除

选项并为此使用 chpasswdRUN adduser –shell /bin/sh –disabled-password xgeli0 && \ echo “xgeli0:xgeli0” | chpasswd。

–shell 长选项可以更改用户登录时的默认 Shell 程序Alpine 创建用户时的默认 Shell 其实是 /bin/ash,而 /bin/sh 其实也只是 /bin/ash 的链接不过,使用 。

/bin/sh 的兼容性更高,因为它是 POSIX 标准的一部分如果我想改用另一个 Linux 发行版,这个设定是不需要更改的,因为每个发行版都应该有 /bin/sh–disabled-password。

长选项在添加用户的时候不询问设置用户密码&& 其实是外壳脚本的逻辑运算符它的运作方式会先把 COMMAND1 && COMMAND2 的前一个命令成功执行了后,才执行后一个命令这样就能确保用户 xgeli0

被创建后才设置密码\ 是行继续字符(line continuation character),就是表示这行命令需要继续到下一行的意思| 是管道字符简单来说,管道把前一个命令的输出直接作为下一个命令的输入。

原本,前一个命令 echo 把 xgeli0:xgeli0 输出到荧幕;后个命令 chpasswd 从键盘接受「用户名:密码」格式的输入直到错误输入或接收到 CTRL+C 组合键改成使用长选项0.0.3。

版更改成了使用长选项 –shell 与 –disabled-password 的原因是因为它们兼容其它 Linux 发行版的 adduser在 Ep3 里用的 0.0.1 版的 Dockerfile 是使用单字符选项 。

-s 与 -D 的虽然从官方说明或直接在 Alpine 运行 adduser 里没看到,其实它们是一样的:$ adduser Usage: adduser [OPTIONS] USER [GROUP] -s SHELL Login shell -D Dont assign a password。

我猜想 Alpine 里的 adduser 应该与其它 Linux 发行版的 adduser 兼容而且可以从这个在线版 man page 或在其它发行版里运行 man adduser 看到 -s 与 -D

选项分别对应 –shell 与 –disabled-password:$ man adduser –disabled-password Like –disabled-login, but logins are still possible (for example using SSH RSA keys) but not using password authentication. –shell SHELL Use SHELL as the users login shell, rather than the default specified by the configuration file.

我在实验后确定了它们在 Alpine 上的确适用和一样,因此选择改成了使用它们编写 Dockerfile 的过程,像这样需要确定的资讯有很多,我其实就是通过运行一个 Alpine 容器来做各种测试具体方式会在接下来讲解。

使用 USER 以特定用户的身份执行就如之前所说的,制作第 0 关需要创建 readme 文件这里使用 USER指示以特定用户执行接下来的指示这样来确保 readme 文件是由用户 xgeli0 创建,而不是默认的系统管理用户 。

root USER xgeli0 RUN echo “The password is {boJ9jbbUNNfktd78OOpsqOltutMc3MY1}.” > ~/readme这样就完成了第 0 关所需的 Dockerfile。

在容器系统里进行测试这个 Dockerfile 并不是一想就成的结果它里面的各种指示、各种命令都是经过测试和验证才得出的有时候就是如 Ep3 那样通过重复搭建镜像来做到而有时候是直接在容器系统环境里,也就是 Alpine,直接执行这些命令测试出来的。

1. 首先,运行一个 Alpine 容器或已搭建好的镜像:$ docker run -dit alpine:3.17.0 63281dc13add3d520523433fba3e5de37f1b92c6422ae0d2d9ab7efa583934df

2a. 可以选择如 Ep3 里提过,使用 docker attach 来连接运行容器时默认执行的 shEp2 里也提过可以使用 Ctrl+P,然后 Ctrl+Q 可以把运行放置回后台$ docker attach 6328。

6328 是在上一步运行容器时得到的 id也可以用 docker ps -a 查看2b. 或者,可以选择通过 docker exec 执行另一个 sh 程序:$ docker exec -it 6328 /bin/sh。

通过执行 docker exec 的这个 sh 与运行容器时默认执行的 sh 并不是同一个这步尤其有用,因为过后会修改成默认执行 SSH 服务,那么第 2a 步的 docker attach 就不会连接 。

sh 与系统互动。这样就可以有一个容器环境来实验各种命令和检查镜像搭建后的各种配置。下期内容在 Docker 容器中以 ENTRYPOINT 和 CMD 启用 SSH 服务。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容