个性化阅读
专注于IT技术分析

docker容器和shell命令、创建和构建docker文件全解——docker开发教程

上一章docker开发教程请查看:docker架构、windows主机操作容器、配置

这一章我们讨论docker容器和shell命令,以及学习如何创建和构建docker文件。

一、docker容器和shell命令

默认情况下在启动容器时,还将使用shell命令启动容器,如下图所示。这就是我们在前面的章节中看到的,当我们处理容器的时候。

Shell命令

在上面的截图中,你可以看到我们执行了以下命令

sudo docker run -it centos /bin/bash

我们使用这个命令创建一个新的容器,然后使用Ctrl+P+Q命令退出容器,它确保即使在我们退出容器之后容器仍然存在。

我们可以使用Docker ps命令来验证容器是否仍然存在,如果我们必须直接离开容器,那么容器本身就会被破坏。

现在有一种更简单的方法可以附着在容器上,然后干净地离开而不需要破坏容器,实现此目的的一种方法是使用nsenter命令。

在运行nsenter命令之前,你需要首先安装nsenter镜像,这可以用下面的命令来完成:

docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter
nsenter镜像

在使用nsenter命令之前我们需要获得容器的进程ID,因为这是nsenter命令所要求的。我们可以通过Docker inspect命令获得进程ID,并通过Pid过滤它。

检查命令

正如上面的屏幕截图所示,我们首先使用docker ps命令来查看正在运行的容器。我们可以看到有一个ID为96c1bb235992的正在运行的容器。

然后我们使用Docker inspect命令来检查这个容器的配置,然后使用grep命令来过滤进程ID,从输出中我们可以看到进程ID是4651。

现在我们有了进程ID,我们可以继续并使用nsenter命令附加到Docker容器。

使用nsenter命令

此命令允许在不退出容器的情况下附加到容器上。

nsenter命令使用语法如下:

nsenter -m -u -n -p -i -t containerID command

选项解释

(1)-u用于提及Uts名称空间

(2)-m用于提及挂载名称空间

(3)-n用于提及网络名称空间

(4)-p用于提到进程名称空间

(5)- s使容器在交互模式下运行。

(6)-t用于将容器的I/O流连接到主机OS。

(7)containerID——这是容器的ID。

(8)command——这是要在容器中运行的命令。

Nsenter使用例子如下:

sudo nsenter -m -u -n -p -i -t 4651 /bin/bash
使用nsenter命令

从输出来看,我们可以观察到以下几点:

  • 当我们执行nsenter命令时,提示符直接更改为bash shell。
  • 然后执行exit命令,现在通常如果你不使用nsenter命令,容器将被销毁。但是你会注意到当我们运行nsenter命令时,容器仍然在运行。

二、创建docker文件

在前面的章节中我们已经看到了从Docker hub下载的各种镜像文件,例如Centos文件,你可以从这些文件中启动容器。下面再次显示了一个示例。

docker的镜像文件

如果使用Docker镜像命令我们可以看到系统中现有的镜像,从上面的截图我们可以看到有三个镜像:centos、nsenter和hello-world。

但是Docker还提供了创建自己的Docker镜像的功能,这可以在Docker文件的帮助下完成。Docker文件是一个简单的文本文件,包含如何构建镜像的说明。

下面的详细步骤将解释如何创建Docker文件。

步骤1 -创建一个名为Docker file的文件并使用vim编辑它。请注意文件名必须是“Dockerfile”并以“D”为大写。

sudo vim Dockerfile

步骤2 -使用以下指令构建Docker文件。

#create a sample Image 
FROM ubuntu 
MAINTAINER srcmini@163.com   
                   
RUN apt-get update 
RUN apt-get install –y nginx 
CMD ["echo","image created"]

关于上述文件需要注意以下几点:

  • 第一行“#”是一个注释,你可以在#命令的帮助下向Docker文件添加注释。
  • 下一行必须以FROM关键字开头,它告诉docker你想从哪个基础镜像中获得基础镜像。在我们的例子中,我们正在从ubuntu镜像创建一个镜像。
  • 下一个命令是要维护这个镜像的人,在这里你指定MAINTAINER关键字,只需提到电子邮件ID即可。
  • RUN命令用于对镜像运行指令。在我们的例子中,我们首先更新Ubuntu系统,然后在Ubuntu镜像上安装nginx服务器。
  • 最后一个命令用于向用户显示一条消息。

步骤3 -保存文件,下面一小节我们将会讨论如何创建镜像。

构建镜像

三、构建docker文件

我们在上面中创建了Docker文件,现在是构建Docker文件的时候了,我们可以使用以下命令构建Docker文件

docker build

让我们进一步了解这个命令。

docker build

该命令允许用户构建自己的Docker镜像。

docker build使用语法:

docker build -t ImageName:TagName dir

选项解释

(1)-t ——就是对镜像加上一个标签

(2)ImageName——这是你想给你的镜像起的名字。

(3)tagname——这是你想给你的镜像加上的标签。

(4)dir是Docker文件所在的目录。

Docker build使用例子:

sudo docker build -t myimage:0.1 .

这里myimage是我们赋予镜像的名称,0.1是我们赋予镜像的标记号。

由于Docker文件位于当前工作目录中,我们在命令的末尾使用“.”表示当前工作目录。

从输出中我们将首先看到Ubuntu镜像将从Docker Hub下载,因为在机器上没有本地可用的镜像。

没有镜像

最后当构建完成时,所有必要的命令都将在镜像上运行。

命令在镜像上运行

然后你将看到成功构建的消息和新镜像的ID。当你运行Docker镜像命令时,你将能够看到你的新镜像。

查看已构建的镜像

现在就可以从新的镜像构建容器了。

赞(0)
未经允许不得转载:srcmini » docker容器和shell命令、创建和构建docker文件全解——docker开发教程

评论 抢沙发

评论前必须登录!