Docker迈出第一步"/>
Docker迈出第一步
Docker迈出第一步
后续待补充
文章目录
- Docker迈出第一步
- docker run debian echo "hello world"
- docker container ps -all
- docker ps
- docker rm -v $(docker ps -aq -f status=exited)
- 下一个问题:debian镜像是从哪里来的?
- 下一个问题:什么可以标识一个镜像?
- 通过Dockerfile创建镜像
docker run debian echo “hello world”
运行这个命令的输出结果是:
为什么会这样呢?
运行如下命令
docker run --help
上图中的usage介绍了docker run的用法。
docker run [options] image [command] [arg...]
所以docker run debian echo "hello world“的解释如下:
debian是image(镜像)
echo "hello world"是command(命令)
由此可见,镜像是可以运行的。
上图中还有一句描述:run a command in a new container.
所以命令echo "hello world"是在新的容器中运行的。
我们将运行之后的镜像容器。
容器和镜像的关系,就像进程和程序之间的关系。
我们知道进程存在不同的状态。例如进程终止,启动,睡眠,阻塞等状态。容器也存在不同的状态。我通过
docker container ps -all
命令查看了所有的container, 结果如下图
可以看到存在exited, up, created这三个状态。除了这里列出来的状态,容器还存在其他状态。下面是容器所有状态的总结和归纳。分别是:
- created(已创建):容器已经通过docker create命令初始化,但未曾启动
- restarting(重启中):该状态很少遇见,当Docker引擎尝试重启一个启动失败的容器时,restarting 状态才会出现。
- running(运行中):正在运行
- paused(已暂停)://todo
- exited(已退出,已停止):容器中没有正在运行的进程(虽然“已创建”状态的容器也没有正在进行的进程,但是“已退出”的容器至少启动过一次)。容器的主进程退出时,容器也会退出。“已退出”的容器可以用docker start命令进行重启。已停止的容器不等于一个镜像,因为已停止的容器还会保留对配置、元数据和文件系统的改动。
docker ps
列出所有的containers,默认只列出正在运行的containers。
上图指出-a选项可以show all containers. -q选项only display numeric IDs. -f选项filter output based on conditions provided. 所以可以通过docker ps -aq -f status=exited打印出所有容器的ID.
docker rm -v $(docker ps -aq -f status=exited)
如果想删除所有已经停止的容器,可以利用docker ps -aq -f status =exited的结果,结果中包含所有已经停止的容器的ID,例如:
docker ps -aq -f status=exited
然后通过$符号就可以选中这些ID,再通过docker rm -v 移除这些ID对应的容器。
// todo 这里出现了volumes这个概念,volumes即数据卷。数据卷是docker主机的一个目录。当我们添加了为docker rm添加了-v选项之后,当我们删除容器时,我们会在删除容器的同时删除与这个容器相关联的数据卷。
下一个问题:debian镜像是从哪里来的?
debian是我们打算使用的镜像名称。首先docker会在本地(你的电脑)上搜索是否在本地是否存在一个名字叫做debian的镜像,如果存在,那么docker就会使用本地的这个镜像。如果本地没有这个镜像,docker就会从docker hub上在线搜索,并下载debian最新版本的镜像。镜像下载后,Docker会将它转成容器并运行,然后在容器中执行我们的命令 echo “Hello world”。命令的结果显示在输出内容的最后一行。
下一个问题:什么可以标识一个镜像?
镜像的名称可以标识一个镜像吗?如果可以,那么为什么说“debian 镜像的最新版本”?debian镜像还存在其他版本吗?所以到底什么可以标识一个镜像?
余成林:同名的镜像存在tag标识不同的版本。当没有指定tag时,镜像为latest版本。所以镜像名和tag共同标识一个镜像。
举个例子,我们以前创建一个ubuntu程序,该程序仅能够在linux环境下运行。在我的ubuntu14统上,程序正确运行。但是到了小明的电脑上(小明的电脑是ubuntu16)的,小明说程序无法正确运行。于是,我就需要检查各种bug。
现在有了docker以后就不一样了。我把代码和环境封装成一个镜像,现在小明只需要将镜像下载下来,然后通过docker run命令运行这个镜像就可以运行这个程序了!
所以有了docker之后,我根本不需要本地安装和下载运行程序的环境了。我只需要下载这个程序的docker镜像即可, 然后我使用docker run命令运行即可。
那有同学要问了?我开发程序的时候是在自己的环境中开发,还是拉取一个docker镜像,在镜像中开发呢?既然最后程序要以docker镜像的形式发布,所以开发的时候也是先拉取一个镜像,然后基于这个镜像进行开发程序。
如何记录下基于基本镜像创建应用程序的步骤呢?答案是利用Dockerfile, Dockerfile使得创建镜像的过程全部自动化。
通过Dockerfile创建镜像
Dockerfile是一个描述如何基于一个镜像创建新的镜像所需步骤的文本文件。请您先来看一个Dockerfile,以便您有个感性的认识。
FROM debian:wheezyRUN apt-get update && apt-get install -y cowsay fortune
所有的Dockerfile一定要有FROM指令作为第一个非注释指令。RUN指令指定的SHELL指令是将要在镜像里执行的。RUN后面的shell指令是:
apt-get update
apt-get install -y cowsay fortune
apt-get update命令是更新命令,属于Linux的范畴
apt-get install -y cowsay fortune命令是安装命令,属于Linux的范畴
更多推荐
Docker迈出第一步
发布评论