Docker快速入门之容器

通过前文,我们已经知道了Docker是一个开源的应用容器引擎,并且也学会了安装Docker的几种方法及基础命令。接下来,此文将进一步继续学习Docker知识——Docker容器的相关概念。

1.前言

在学习Docker之前,如果您要编写一个Python应用程序,那么第一件事就是在您的机器上搭建Python开发环境。但是,使用Docker之后,您只需要获取一个可移植的Python开发环境镜像就可以了,然后在此基础上开发您的应用程序,最后还可以将其构建成一个新的镜像。这些可移植的镜像由Dockerfile定义。

2.Dockerfile

Dockerfile定义了容器内部的环境。容器内部环境与操作系统的其他部分是隔离的,并且在容器中,对网络接口和磁盘驱动器等资源的访问都是虚拟化的。因此,您需要将此环境中的端口映射到外部世界,同时指定您要复制到该环境中的文件。在此之后,您就可以将在此Dockerfile中定义的应用程序分发到其他地方,并保证其行为完全相同。

(1)创建Dockerfile

创建一个空目录并进入该目录,在该目录下创建一个名为Dockerfile的文件,然后将以下内容复制粘贴到Dockerfile中并保存。此时,一个简单的Dockerfile文件就创建好了:

其中,该Dockerfile涉及的文件app.py和requirements.txt稍后介绍。

(2)The app itself

接下来,在Dockerfile同目录下创建requirements.txt和app.py文件,当我们通过Dockerfile构建镜像时,上述Dockerfile中所示的ADD命令就会将当前目录下的requiremets.txt, app.py文件添加到镜像中的/app目录下。并且,EXPOSE命令使得app.py的输出得以通过HTTP访问。

结合requirements.txt和Dockerfile,我们知道此Python应用程序所需的Flask库和Redis库会通过pip命令进行安装,并且该应用程序会打印输出环境变量NAME。但是,由于我们在此环境中并没有安装Redis服务,所以,如应用程序中的代码所示,会输出相应的错误信息。

(3)Build the app

目前,我们已经创建了三个文件:

此时,就可以构建我们的Docker镜像了:

其中,-t选项指定生成镜像的名称。

最后,查看镜像:

(4)Run the app

使用run命令运行应用程序:

[leo@ubuntu part02]$ sudo docker run -p 40000:80 friendlyhello

其中,-p选项表示将机器的40000端口映射到容器发布的80端口上,所以你应该在web浏览器通过链接localhost:40000而不是localhost:80访问:helloworld

图2-1

同样可以通过命令行的方式访问:

如果您需要后台运行这个应用程序的话,使用-d选项即可:

查看正在运行的容器:

停止容器,使用命令:

其中,bfd48(不需要写全,id的前几个字符即可)表示此容器的id。

3.上传镜像

将我们刚刚创建的镜像上传之后,我们就可以在其他地方使用它了,即Docker的可移植性得以保证。注册表(registery)是存储库(repositories)的集合,而存储库又是镜像(images)的集合——类似于GitHub存储库。注册表上的账户可以创建许多存储库,默认情况下,docker CLI使用docker的公共注册表(public registry)。

需要说明的是:我们使用Docker的公共注册表只是因为它是免费的以及它是预先配置好的,当然您也可以使用其他的注册表,您甚至可以使用自己建立的注册表。

(1)登录Docker ID

如果您还没有Docker账户,您可以在hub.docker.com注册。然后使用您的账户登录到本地计算机上的Docker公共注册表:

(2)标记镜像

使用形如username/repository:tag的命名格式将本地镜像与注册表上的存储库关联。然后就可以使用您的用户名、存储库以及tag标记您的镜像并上传到相应的注册表中,命令格式如下:

比如,

接着,查看新标记的镜像:

(3)发布镜像

标记完您的镜像之后,您还可以使用push命令将其上传到存储库:

上传成功,登录到Docker Hub账号就可以看到您刚上传的新镜像了:repositories

图3-1

(4)下载及运行镜像

此后,您就可以使用docker run命令在任何机器上来运行您的应用程序了,如果本地没有该镜像,Docker将自动从存储库中提取它并运行。比如:

 

参考:
https://docs.docker.com/get-started/part2/

发表评论

电子邮件地址不会被公开。 必填项已用*标注