Docker迈出第一步

编程入门 行业动态 更新时间:2024-10-25 21:25:55

<a href=https://www.elefans.com/category/jswz/34/1771431.html style=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迈出第一步

本文发布于:2024-03-11 16:41:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1729420.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Docker

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!