首页 文章 精选 留言 我的

精选列表

搜索[全模态理解],共10000篇文章
优秀的个人博客,低调大师

理解镜像和容器,并运行whalesay镜像

版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/54318815 了解镜像和容器 Docker引擎提供了使能镜像和容器的核心Docker技术。在安装过程的最后一步,你运行了docker run hello-world命令。你运行的命令包含三个部分. docker run hello-world docker:告诉的操作系统你正在运行docker程序 run:创建并运行一个Docker容器的子命令 hello-world:告诉Docker将哪一个镜像加载到容器中 镜像是在运行时使用的一个文件系统和相关参数。她并没有状态并且永不改变。一个容器是一个镜像正在运行的实例。当你运行命令的时候,Docker引擎: 检查你是否有hello-world软件镜像 从Docker Hub中下载镜像 将镜像加载到容器中运行 基于他的构建方式,一个镜像可能运行一个简单的,单一的命令然后退出,hello-world就是这样的。 然而一个Docker镜像可以做的更多。一个镜像可以运行像数据库一样复杂的软件程序,等待你添加数据,存储数据便于后续使用,然后等待下一个用户。 但是谁构建的hello-world软件镜像呢?Docker构建的,但是任何人都可以。Docker引擎运行我们创建并且通过Docker镜像分享软件。使用Docker引擎,你不用担心在一个Docker镜像中你的计算机能否运行这款软件-Docker容器肯定能够运行这个软件。 寻找并运行whalesay镜像 世界各地的人都可以创建Docker镜像。你可以通过浏览Docker Hub来找到这些镜像。在下面一节中,你将会搜索并且找到这些镜像。 步骤一:定位whalesay镜像 打开浏览器并浏览Docker Hub Docker Hub包含来自个人和或者是组织的镜像。 在搜索栏中输入shalesay 点击结果中的docker/whalesay镜像。 浏览器展示了whalesay镜像的仓库。每一个仓库包含了关于一个镜像的信息。他应该包含例如该镜像包含什么类别的软件并且如何使用他。你可能注意到了whalesay镜像是基于Linux的发行版称为’Ubuntu’。在下一步中,你将会在你的计算机中运行whalesay镜像。 步骤二:运行whalesay镜像 确定Docker正在运行: 打开命令行终端。 输入docker run docker/whalesay cowsay boo命令然后按下回车按钮。 这个命令将会在一个容器中运行whalesay镜像,你的终端看上去应该是这个样的: $ docker run docker/whalesay cowsay boo Unable to find image 'docker/whalesay:latest' locally latest: Pulling from docker/whalesay e9e06b06e14c: Pull complete a82efea989f9: Pull complete 37bea4ee0c81: Pull complete 07f8e8c5e660: Pull complete 676c4a1897e6: Pull complete 5b74edbcaa5b: Pull complete 1722f41ddcb5: Pull complete 99da72cfe067: Pull complete 5d5bd9951e26: Pull complete fb434121fc77: Already exists Digest: sha256:d6ee73f978a366cf97974115abe9c4099ed59c6f75c23d03c64446bb9cd49163 Status: Downloaded newer image for docker/whalesay:latest _____ < boo > ----- \ \ \ ## . ## ## ## == ## ## ## ## === /""""""""""""""""___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\______/ 在你第一次运行一个软件镜像的时候,docker命令会在你的本地系统中去寻找。如果镜像不在本地,docker会从hub中去获取。 依然在命令行终端中,输入docker images命令然后按下回车。 这个命令会列举出你本地系统中的所有的镜像。你在列表中应该会看到docker/whalesay镜像。 bobo@hongbo:~$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE bobo1223/docker-whale latest 7911602d9f62 2 days ago 252.8 MB docker-whale latest 7911602d9f62 2 days ago 252.8 MB hello-world latest c54a2cc56cbb 6 months ago 1.848 kB docker/whalesay latest 6b362a9f73eb 19 months ago 247 MB bobo@hongbo:~$ 当你在一个容器中运行镜像的时候,Docker会将镜像下载到你的计算机中。这种镜像的本地复制会节约你的时间。Docker仅仅会重新下载那些在hub中镜像的源码修改了的镜像。当然,你也可以自己删除镜像。后面我们将会学习这些东西。我们先把镜像放在那因为后面我们将会使用他。 花一点时间来耍一下whalesay镜像。 尝试使用一个单词或一句话来运行whalesay镜像。尝试一个长的或短的句子。 bobo@hongbo:~$ sudo docker run docker/whalesay cowsay bobo ______ < bobo > ------ \ \ \ ## . ## ## ## == ## ## ## ## === /""""""""""""""""___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\______/ 构建你自己的镜像 whalesay镜像可以被提升。如果你不用考虑说什么并且你不需要输入让whalesay去输出,那是最好的。 docker run docker/whalesay cowsay boo-boo 在这一小节中,我们会通过构建一个新的版本“说出他自己的话”来提升whalesay,这样在运行的时候就可以少输入一些单词了。 步骤一:编写一个Dockerfile 在这一步中,你需要使用一个文本编辑器来编写一个简单的Dockerfile。Dockerfile是一个描述构建一个镜像需要的文件,环境和命令的菜单。你的菜单将会是非常简短的。 在Linux或macOS的一个终端窗口或者是Windows的命令提示符中运行这些命令。一定要记住,即使你在使用macOS或者是Windows,你依然需要创建一个在Linux上运行的镜像。 创建一个新的目录。如果你正在使用windows,使用md而不是mkdir。 mkdir mydockerbuild 这个目录将会包含一些构建镜像的所有事情。现在他是空的。 进入你的新目录。无论你是在Linux,macOS或者是Windows上,同样使用cd命令。 cd mydockerbuild 在当前目录中,编辑一个新的文本文件命名为Dockerfile,在Linux或Mac中使用nano或vi,在Windows中使用notepad。 Linux或Mac: nano Dockerfile Windows: C:\> notepad Dockerfile 将下面的命令复制到文件中添加一个FROM陈述。 FROM docker/whalesay:latest FROM关键词告诉Docker你的镜像是基于哪一个镜像的。Whalesay是非常聪明的,并且已经有cowsay程序了。我们将会从这里开始. 添加RUN陈述,该命令将会安装fortunes程序到镜像中。 RUN apt-get -y update && apt-get install -y fortunes whalesay镜像是基于Ubuntu的,他使用apt-get来安装包。这两个命令会刷新可用的包列表,然后安装fortunes程序到镜像中。fortunes程序会输出箴言用于我们的whale去输出。 添加CMD陈述,他会告诉镜像在环境设置完成之后,要运行的最后的命令。该命令运行fortune -a然后将他的输出发送到cowsay命令中。 CMD /usr/games/fortune -a | cowsay 检查你的工作。你的文件看上去像是这样的: FROM docker/whalesay:latest RUN apt-get -y update && apt-get install -y fortunes CMD /usr/games/fortune -a | cowsay 保存文件然后关闭文本编辑器。这个时候,你的软件菜单就已经在Dockerfile文件中描述好了。我们已经准备好去构建一个新的镜像。 步骤二:从你的Dockerfile中构建一个镜像 当你位于mydockerfile目录中的时候,使用docker build命令构建镜像。-t参数会给你的镜像一个标签,所以后面你将会更加简单的运行他。不要忘记.命令,这会告诉docker build命令在当前目录中搜索名为Dockerfile的文件。该命令在Linux,macOS和Windows中运行时一样的。 $ docker build -t docker-whale . Sending build context to Docker daemon 2.048 kB ...snip... Removing intermediate container cb53c9d09f3b Successfully built c2c3152907b5 这个命令将会使用一些时间去运行然后报告出他的结果。 步骤三: 了解构建过程 docker build -t docker-whale .在当前目录中读取Dockerfile文件,然后一条一条的运行他的指令去构建一个称为docker-whale的镜像。该命令花费一些时间,并且他的输出看上去很长,很复杂。在这一小节中,我们将会学习每一个信息代表着什么。 Docker会检查来确保他需要的任何任何东西都满足。这将会生成下面的信息。 Sending build context to Docker daemon 2.048 kB Docker会检查在本地是否存在whalesay镜像,是否需要从Docker hub中拉取下来。在这个示例中,因为在之前我们已经拉取下来了,所以这个镜像在本地已经存在了.这个对象在Dockerfile中的FROM语句,并且生成下面的信息: Step 1 : FROM docker/whalesay:latest ---> 6b362a9f73eb 在每一步最后,一个ID被输出了.这个是被这一步创建的这一层的ID.在Dockerfile中的每一行对应在镜像中的每一层.你的ID将会是不同的. Docker开启一个临时的容器来运行shalesay镜像.在临时容器中,Docker运行位于Dockerfile中的下一个命令,也就是RUN命令,他会安装fortune命令.这会生成很多行输出,就像你在Ubuntu中人工运行apt-get命令一样. Step 2 : RUN apt-get -y update && apt-get install -y fortunes ---> Running in 05d4eda04526 Ign http://archive.ubuntu.com trusty InRelease Get:1 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB] Get:2 http://archive.ubuntu.com trusty-security InRelease [65.9 kB] Hit http://archive.ubuntu.com trusty Release.gpg Hit http://archive.ubuntu.com trusty Release Get:3 http://archive.ubuntu.com trusty-updates/main Sources [480 kB] Get:4 http://archive.ubuntu.com trusty-updates/restricted Sources [5921 B] Get:5 http://archive.ubuntu.com trusty-updates/universe Sources [214 kB] Get:6 http://archive.ubuntu.com trusty-updates/main amd64 Packages [1160 kB] Get:7 http://archive.ubuntu.com trusty-updates/restricted amd64 Packages [20.4 kB] Get:8 http://archive.ubuntu.com trusty-updates/universe amd64 Packages [505 kB] Get:9 http://archive.ubuntu.com trusty-security/main Sources [157 kB] Get:10 http://archive.ubuntu.com trusty-security/restricted Sources [4621 B] Get:11 http://archive.ubuntu.com trusty-security/universe Sources [54.5 kB] Get:12 http://archive.ubuntu.com trusty-security/main amd64 Packages [700 kB] Get:13 http://archive.ubuntu.com trusty-security/restricted amd64 Packages [17.0 kB] Get:14 http://archive.ubuntu.com trusty-security/universe amd64 Packages [191 kB] Hit http://archive.ubuntu.com trusty/main Sources Hit http://archive.ubuntu.com trusty/restricted Sources Hit http://archive.ubuntu.com trusty/universe Sources Hit http://archive.ubuntu.com trusty/main amd64 Packages Hit http://archive.ubuntu.com trusty/restricted amd64 Packages Hit http://archive.ubuntu.com trusty/universe amd64 Packages Fetched 3640 kB in 11s (329 kB/s) Reading package lists... Reading package lists... Building dependency tree... Reading state information... The following extra packages will be installed: fortune-mod fortunes-min librecode0 Suggested packages: x11-utils bsdmainutils The following NEW packages will be installed: fortune-mod fortunes fortunes-min librecode0 0 upgraded, 4 newly installed, 0 to remove and 92 not upgraded. Need to get 1961 kB of archives. After this operation, 4817 kB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main librecode0 amd64 3.6-21 [771 kB] Get:2 http://archive.ubuntu.com/ubuntu/ trusty/universe fortune-mod amd64 1:1.99.1-7 [39.5 kB] Get:3 http://archive.ubuntu.com/ubuntu/ trusty/universe fortunes-min all 1:1.99.1-7 [61.8 kB] Get:4 http://archive.ubuntu.com/ubuntu/ trusty/universe fortunes all 1:1.99.1-7 [1089 kB] debconf: unable to initialize frontend: Dialog debconf: (TERM is not set, so the dialog frontend is not usable.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (This frontend requires a controlling tty.) debconf: falling back to frontend: Teletype dpkg-preconfigure: unable to re-open stdin: Fetched 1961 kB in 19s (101 kB/s) Selecting previously unselected package librecode0:amd64. (Reading database ... 13116 files and directories currently installed.) Preparing to unpack .../librecode0_3.6-21_amd64.deb ... Unpacking librecode0:amd64 (3.6-21) ... Selecting previously unselected package fortune-mod. Preparing to unpack .../fortune-mod_1%3a1.99.1-7_amd64.deb ... Unpacking fortune-mod (1:1.99.1-7) ... Selecting previously unselected package fortunes-min. Preparing to unpack .../fortunes-min_1%3a1.99.1-7_all.deb ... Unpacking fortunes-min (1:1.99.1-7) ... Selecting previously unselected package fortunes. Preparing to unpack .../fortunes_1%3a1.99.1-7_all.deb ... Unpacking fortunes (1:1.99.1-7) ... Setting up librecode0:amd64 (3.6-21) ... Setting up fortune-mod (1:1.99.1-7) ... Setting up fortunes-min (1:1.99.1-7) ... Setting up fortunes (1:1.99.1-7) ... Processing triggers for libc-bin (2.19-0ubuntu6.6) ... ---> dfaf993d4a2e Removing intermediate container 05d4eda04526 当运行完RUN命令之后,一个新的层被创建了,然后中间的容器被移除了. 一个新的中间容器被创建了,Docker在Dockerfile中为CMD添加了一层,然后移除中间层. Step 3 : CMD /usr/games/fortune -a | cowsay ---> Running in a8e6faa88df3 ---> 7d9495d03763 Removing intermediate container a8e6faa88df3 Successfully built 7d9495d03763 现在你已经构建好了一个称为docker-whale的镜像. 步骤四: 运行你的docker-whale 在终端窗口或命令提示符中,输入docker images,列举出你本地的镜像. Step 3 : CMD /usr/games/fortune -a | cowsay ---> Running in a8e6faa88df3 ---> 7d9495d03763 Removing intermediate container a8e6faa88df3 Successfully built 7d9495d03763 通过输入docker run docker-whale来运行新镜像. bobo@hongbo:~$ sudo docker run docker-whale _______________________________ / Delay is preferable to error. \ | | \ -- Thomas Jefferson / ------------------------------- \ \ \ ## . ## ## ## == ## ## ## ## === /""""""""""""""""___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\______/ whale现在有些机智了.他输出了自己的想法,并且少输入命令便可运行.同时,你也注意到了Docker并没有下载任何东西,因为他是在本地构建的镜像. 为了娱乐,在运行他一次. 下载你的whale已经有了他自己的想法,但是如果你不喜欢他说的话,重新运行它一次就行了. 记后 后面我们将会创建我们自己的Docker hub账号,并将我们构建的whale上传到hub中.

优秀的个人博客,低调大师

PHP中的use、命名空间的理解

看.Net中的命名空间和using using Ddd.Core; using Ddd.Core.Caching; using Ddd.Core.Data; using Ddd.Core.Domain.Customers; using Ddd.Core.Domain.QiNiu; using Ddd.Services.Events; using System; using System.Collections.Generic; using System.Linq; namespace Ddd.Services.QiNiu 看Java中的命名空间和import package demo.jq.com.relativelayout; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; 看PHP中的命名空间和use namespace app\admin\model; use think\Model; use think\Db; 综上可以看出,命名空间就是相当于一个文件夹的路径。同一个命名空间下,不能有相同的类文件。同名的类文件可以存在于不同的命名空间下面。 用了命名空间,可以方便的调用其他文件夹下的文件。 只需要通过using、import、use引入命名空间下的文件即可。 然后就可以在方法中新建对象了。 use app\admin\model\LiveRecharge; $LiveRecharge = new LiveRecharge(); 看.Net或者Java,可以看出using、import可以引入一些系统自带的类文件。 模块用到哪个,引入相应的系统类即可。 Thinkphp5中使用了命名空间的机制,表面上看麻烦了,每个类都需要写命名空间,其实是方便了。 有了命名空间,能够更便捷的使用各个模块的类,可以方便的引入外部模块,可以方便的使用其他模块的Model,或者一些通用的类引入都便捷了。 让PHP更加的面向对象。 注意:use不等于require_once或者include,use的前提是已经把文件包含进当前文件。 本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/5406994.html,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册