内容简介:如果您开始容器化之旅,首先会遇到的就是完成本教程大约需要 45 分钟。
如果您开始容器化之旅,首先会遇到的就是 Docker
。通过学习本教程,您可以快速入门:它为您提供了可与 Docker
、 Dockerfile
、IBM Cloud™ 以及 IBM Container
Registry
一起使用的工具。
前提条件
免费试用 IBM Cloud
利用 IBM Cloud Lite 快速轻松地构建您的下一个应用程序。您的免费帐户从不过期,而且您会获得 256 MB 的 Cloud Foundry 运行时内存和包含 Kubernetes 集群的 2 GB 存储空间。了解所有细节并确定如何开始。
预估时间
完成本教程大约需要 45 分钟。
Docker
我们需要做的第一件事是安装 Docker。可以通过几种方法进行安装,但是第一个也是最好的方法是前往 主要的 Docker 文档站点 。尝试使用和维护最新版本的 Docker,并为您的特定操作系统安装该 Docker。
在编写本教程时,有两个主要的 Docker 版本。我想花点时间讨论一下不同的版本。这两个版本分别是 Docker Community Edition ( docker-ce
) 和
Docker Enterprise Edition
( docker-ee
)。它们各有优点,并且针对不同的用例。我强烈建议您在学习完本教程后,重新考虑 docker-ce
还是 docker-ee
更适合您。
以下步骤和命令应该在任一版本上均适用,那么,让我们继续。
Docker CLI
安装了 docker
之后,打开命令提示符。在安装过程中,文档可能会要求您运行一个完整性检查。我们将再次运行以下命令,以确保一切正常。
docker run hello-world
您应该会看到类似以下输出的内容。(如果出现错误或不是类似如下的内容,那么说明您的安装未正确设置,您应该在进行其他操作之前先解决此问题。)
Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
恭喜!您有了一个有效的 docker
实例。让我们开始使用该实例。
下面是我希望您尝试的下一个命令。根据您的互联网访问情况,可能需要一些时间来运行,但幸运的是,它将缓存到您的计算机上,稍后我们将再次访问此处。
docker run -it centos:latest /bin/bash
在这个过程中,我们来谈谈发生了什么。当您运行 docker
命令时,您是在告诉 Docker,您需要从公共 Docker Hub
获取 latest
副本,并使用 /bin/bash
的 shell 运行它。 该命令运行到互联网,查看您拥有的版本,检查缓存镜像的 SHA,如果您没有 SHA,那么从
Dockerhub 中提取。为了清楚起见, -it
以 interactive
方式运行它,并为容器创建 tty
。 您现在应该会看到以下内容。
Unable to find image 'centos:latest' locally latest: Pulling from library/centos a02a4930cb5d: Pull complete Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426 Status: Downloaded newer image for centos:latest [root@2de726a5fcb8 /]#
恭喜!现在,您有了第二个正在运行的 Docker 容器。继续并键入 exit
,然后再次运行该 docker
命令。
[root@2de726a5fcb8 /]# exit exit $ docker run -it centos:latest /bin/bash [root@583c6cec5d41 /]#
注意,根 @2de726a5fcb8
和 @583c6cec5d41
有何不同?这是因为当您以这种方式创建容器时,它们是临时性的。临时性意味着它们只在运行的时间内存在,所以一旦退出,它们就会消失。稍后我们将向您展示如何构建寿命较长的容器。
现在,让我们操作一下容器。作为 CentOS 机器
,您具有 yum
,那么让我们安装一些内容。
[root@583c6cec5d41 /]# yum install vim [-- snip --] Transaction Summary ======================================================================================================= Install 1 Package (+32 Dependent packages) Total download size: 19 M Installed size: 63 M Is this ok [y/d/N]: y [-- snip --] perl-podlators.noarch 0:2.5.1-3.el7 perl-threads.x86_64 0:1.87-4.el7 perl-threads-shared.x86_64 0:1.43-6.el7 vim-common.x86_64 2:7.4.160-5.el7 vim-filesystem.x86_64 2:7.4.160-5.el7 which.x86_64 0:2.20-7.el7 Complete! [root@583c6cec5d41 /]#
现在可以在容器中运行 vim
了!试用一下吧。
[root@583c6cec5d41 /]# vim
如果您不知道如何退出 vim
,请输入: :q
,您应该会再次看到命令提示符。
现在再次输入 exit
。
[root@583c6cec5d41 /]# exit exit $ docker run -it centos:latest /bin/bash [root@86f1f3872cbe /]# vim bash: vim: command not found [root@86f1f3872cbe /]# exit exit $
再次强调一下,当容器消失时,容器中的所有更改也都将消失。
Dockerfile
我们可以构建容器并对其进行更改,但如何保持更改呢?有几种方法,我鼓励您自己去发现这些方法。但我会向您介绍最常用的方法:使用 Dockerfile
。
返回至命令提示符,创建一个新目录,并使用选择的 $EDITOR
更改目录,以打开一个名为 Dockerfile
的新文件。
$ mkdir docker-tutorial $ cd docker-tutorial $ $EDITOR Dockerfile
我将在此处介绍 Dockerfiles
的重点,但我强烈建议您查看 Best Practices 上的[文档] [dockerfile],以了解它们的功能。
在您的 Dockerfile
中,编写以下内容:
FROM centos:latest RUN yum install vim -y && mkdir /vim WORKDIR /vim ENTRYPOINT ["vim"]
保存文件并确保其名为 Dockerfile
。
让我们来讨论一下上面四行是什么意思。
-
FROM
:通过centos
:latest
Docker 镜像创建一个层 -
RUN
:通过将 vim 安装到容器中并创建名为/vim
的目录来构建容器 -
WORKDIR
:通知容器工作目录的位置 -
ENTRYPOINT
:是在容器启动时运行的命令,而非我们上面操作的/bin/bash
现在让我们在本地构建。在 Dockerfile
所在目录中运行以下命令, 让我们一起看看结果。
$ docker build . Sending build context to Docker daemon 2.048kB Step 1/4 : FROM centos:latest ---> 1e1148e4cc2c Step 2/4 : RUN yum install vim -y && mkdir /vim ---> Running in ebd37633ab31 Loaded plugins: fastestmirror, ovl Determining fastest mirrors * base: mirror.fileplanet.com * extras: mirror.ash.fastserv.com * updates: www.gtlib.gatech.edu Resolving Dependencies [-- snip --] Step 4/4 : ENTRYPOINT ["vim"] ---> Running in 82618eb1e891 Removing intermediate container 82618eb1e891 ---> eda2652aa25e Successfully built eda2652aa25e $
注意:您应该具有另一个散列 eda2652aa25e
,请谨记这一点。
恭喜!您已经构建第一个 Dockerfile
和定制 docker 容器。
现在让我们来试一试。继续运行以下命令:
$ docker run -it eda2652aa25e
您应该会看到 vim
启动!记住, :q
是退出方式,然后您应该会再次看到命令提示符。您可以根据需要多次运行它,并且每次都会有一个新的 vim
实例;但您实际上不能保存任何内容或读取任何内容,因为它是容器,对吧?让我们来解决这个问题。
我们将添加绑定安装和卷,以将本地目录安装到容器中。如果您想了解有关安装和卷的更多信息,我建议从 此处 开始 - 这是较难的概念之一,但值得您花时间去了解。
在命令行上,创建一个名为 hello
的文件,然后在其中保存单词 hello world
。
$ EDITOR hello
现在,让我们将本地目录安装到容器中。
$ docker run -it -v ${PWD}:/vim eda2652aa25e
在 vim
中输入 :e hello
。您应该会看到 hello world
出现!如您所见,您打开了在主机上创建的文件,创建了一个带有 vim
的容器,安装了目录
并且能够打开该文件!
如果您希望输入 i
并输入一些内容,完成后输入 :wq
。该容器应该已关闭,然后您可以在命令行上输入以下内容:
$ cat hello hello world I added this line from my container $
注意:很显然, I added this line from my container
是我写的内容。您将会看到自己编写的内容。
太棒了!现在,让我们开始弄清楚如何将此容器分享给全世界。
IBM Cloud
我假设您已经安装并运行了 ibmcloud
CLI;如果不是这种情况,请查看此处并逐步完成安装过程。
继续并登录,确保您根据所需的后端进行了身份验证。
$ ibmcloud login --sso API endpoint: https://api.ng.bluemix.net Get One Time Code from https://identity-2.us-south.iam.cloud.ibm.com/identity/passcode to proceed. Open the URL in the default browser? [Y/n]> Y One Time Code > Authenticating... OK [-- snip --] Tip: If you are managing Cloud Foundry applications and services - Use 'ibmcloud target --cf' to target Cloud Foundry org/space interactively, or use 'ibmcloud target --cf-api ENDPOINT -o ORG -s SPACE' to target the org/space. - Use 'ibmcloud cf' if you want to run the Cloud Foundry CLI with current IBM Cloud CLI context. $
现在让我们创建一个容器注册表名称空间。您需要花点时间,想一个全球独一无二的内容,这个内容的描述足以说清楚它是什么。 务必不要将个人信息放在 容器镜像、名称空间名称、描述字段(例如,在注册表令牌中)或任何镜像配置数据(例如,镜像名称或镜像标签)中。
$ ibmcloud cr namespace-add jjasghar Adding namespace 'jjasghar'... Successfully added namespace 'jjasghar' OK
此命令使用容器注册表插件在我的帐户中创建名称空间 jjasghar
。
幸运的是,IBM 为您创建了一些捷径。如果我们想将容器推送到我们创建的 IBM Container
Registry,只需一个命令。在运行此命令之前,让我们快速讨论一下发生了什么。此命令将构建容器,并使用 vim
名称和版本 1
对其进行标记,然后将其推送到注册表。您需要对名称 jjasghar
进行更改,可能也需要更改容器的名称。
注意:勿忘记末尾的 .
以及您放置 Dockerfile
的地方 - 这就是 build 命令知道在哪里运行的方式。
$ ibmcloud cr build --tag registry.ng.bluemix.net/jjasghar/vim:1 . Sending build context to Docker daemon 3.072kB Step 1/4 : FROM centos:latest latest: Pulling from library/centos a02a4930cb5d: Pull complete Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426 Status: Downloaded newer image for centos:latest ---> 1e1148e4cc2c Step 2/4 : RUN yum install vim -y && mkdir /vim [-- snip --] Successfully tagged registry.ng.bluemix.net/jjasghar/vim:1 The push refers to repository [registry.ng.bluemix.net/jjasghar/vim] 36ce508f1fe2: Pushed 071d8bd76517: Pushed 1: digest: sha256:831fcbac319dda1aab3d022c408ecc5cc1c1b825bcd90fc7694c3d4f0ef4eb9a size: 741 OK
太好了!现在,我们有了一个推送到所创建的 IBM Container Registry 的容器!
让我们通过运行以下命令来列出您的容器,以验证它是否已推送:
$ ibmcloud cr image-list Listing images... REPOSITORY TAG DIGEST NAMESPACE CREATED SIZE SECURITY STATUS us.icr.io/jjasghar/vim 1 831fcbac319d jjasghar 4 minutes ago 120 MB No Issues OK
现在,通过运行以下命令来提取您的容器:
$ docker run -v ${PWD}:/vim -it registry.ng.bluemix.net/jjasghar/vim Unable to find image 'registry.ng.bluemix.net/jjasghar/vim:latest' locally docker: Error response from daemon: Get https://registry.ng.bluemix.net/v2/jjasghar/vim/manifests/latest: unauthorized: authentication required.
哦,不!上面的消息是错误响应,让我们尝试找出问题所在。我们需要登录到注册表并运行以下命令:
$ ibmcloud cr login Logging in to 'registry.ng.bluemix.net'... Logged in to 'registry.ng.bluemix.net'. [-- snip --] $ docker run -v ${PWD}:/vim -it registry.ng.bluemix.net/jjasghar/vim Unable to find image 'registry.ng.bluemix.net/jjasghar/vim:1' locally 1: Pulling from jjasghar/vim a02a4930cb5d: Already exists 209873925a88: Pull complete Digest: sha256:831fcbac319dda1aab3d022c408ecc5cc1c1b825bcd90fc7694c3d4f0ef4eb9a Status: Downloaded newer image for registry.ng.bluemix.net/jjasghar/vim:1 # and you should see vim now
大功告成!您现在知道了如何创建容器并将其发布到 IBM Container Registry!
我们需要做的最后一件事是删除容器。运行以下命令以清理本地缓存,并将其从云注册表上的名称空间中删除。
$ docker rmi registry.ng.bluemix.net/jjasghar/vim:1
上面包含您的名称空间、镜像名称和版本。最后,将其从云注册表中删除:
$ ibmcloud cr image-rm us.icr.io/jjasghar/vim:1 Deleting image 'us.icr.io/jjasghar/vim:1'... Successfully deleted image 'sha256:831fcbac319dda1aab3d022c408ecc5cc1c1b825bcd90fc7694c3d4f0ef4eb9a' OK
结束语
感谢您学习本教程。希望您对一些通用的 docker
命令、 Dockerfiles
的工作方式以及如何使用 IBM Cloud Container Registry
有了更多的了解。如果您有任何疑问或想法,请随时通过 Twitter @jjasghar 与我联系。
现在,您已经完成了本教程的学习,已经知道了如何使用 Docker 和 Container Registry,接下来要做些什么?您可以通过我们的 Kubernetes 学习路径 ,进一步学习容器和编排。
如果您有兴趣进一步试验 Docker,请尝试学习教程: 获取对 DockerHub 公共和私有存储库的访问权限 和 在 Docker 容器中创建数据库以进行本地开发 。
参考资源
- 相关文章: Linux 基础知识:学习容器之前的必备知识
- 相关文章: Kubernetes 网络:有关基本网络概念的实验
本文翻译自: Containerization: Starting with Docker and IBM Cloud (2019-11-11)
以上所述就是小编给大家介绍的《容器化:从 Docker 和 IBM Cloud 开始》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 从零开始搭建基于 Mesos 的私有容器平台
- 从零开始搭建腾讯云上的SpringBoot容器化应用
- 从零开始搭建腾讯云上的SpringBoot容器化应用
- 从零开始入门 K8s | 理解容器运行时接口 CRI
- 从零开始入门 K8s | 理解 RuntimeClass 与使用多容器运行时
- 从零开始入门 K8s | Kata Containers 创始人带你入门安全容器技术
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Tensorflow:实战Google深度学习框架
郑泽宇、顾思宇 / 电子工业出版社 / 2017-2-10 / 79
TensorFlow是谷歌2015年开源的主流深度学习框架,目前已在谷歌、优步(Uber)、京东、小米等科技公司广泛应用。《Tensorflow实战》为使用TensorFlow深度学习框架的入门参考书,旨在帮助读者以最快、最有效的方式上手TensorFlow和深度学习。书中省略了深度学习繁琐的数学模型推导,从实际应用问题出发,通过具体的TensorFlow样例程序介绍如何使用深度学习解决这些问题。......一起来看看 《Tensorflow:实战Google深度学习框架》 这本书的介绍吧!