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

上一章docker开发教程请查看:docker架构、windows主机操作容器、配置
这一章我们讨论docker容器和shell命令,以及学习如何创建和构建docker文件。
一、docker容器和shell命令默认情况下在启动容器时,还将使用shell命令启动容器,如下图所示。这就是我们在前面的章节中看到的,当我们处理容器的时候。

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

文章图片
在上面的截图中,你可以看到我们执行了以下命令
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

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

文章图片
在使用nsenter命令之前我们需要获得容器的进程ID,因为这是nsenter命令所要求的。我们可以通过Docker inspect命令获得进程ID,并通过Pid过滤它。
docker容器和shell命令、创建和构建docker文件全解——docker开发教程

文章图片
正如上面的屏幕截图所示,我们首先使用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

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

文章图片
从输出来看,我们可以观察到以下几点:
  • 当我们执行nsenter命令时,提示符直接更改为bash shell。
  • 然后执行exit命令,现在通常如果你不使用nsenter命令,容器将被销毁。但是你会注意到当我们运行nsenter命令时,容器仍然在运行。
二、创建docker文件【docker容器和shell命令、创建和构建docker文件全解——docker开发教程】在前面的章节中我们已经看到了从Docker hub下载的各种镜像文件,例如Centos文件,你可以从这些文件中启动容器。下面再次显示了一个示例。
docker容器和shell命令、创建和构建docker文件全解——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.comRUN 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容器和shell命令、创建和构建docker文件全解——docker开发教程

文章图片
三、构建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下载,因为在机器上没有本地可用的镜像。
docker容器和shell命令、创建和构建docker文件全解——docker开发教程

文章图片
最后当构建完成时,所有必要的命令都将在镜像上运行。
docker容器和shell命令、创建和构建docker文件全解——docker开发教程

文章图片
然后你将看到成功构建的消息和新镜像的ID。当你运行Docker镜像命令时,你将能够看到你的新镜像。
docker容器和shell命令、创建和构建docker文件全解——docker开发教程

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

    推荐阅读