在使用Docker时,我们从一个基本映像开始。我们启动它,创建更改,这些更改被保存在图层中形成另一个图像。
因此,最终我为我的PostgreSQL实例和我的web应用程序提供了一个图像,对这些图像的更改将持续保存。
什么是容器?
在使用Docker时,我们从一个基本映像开始。我们启动它,创建更改,这些更改被保存在图层中形成另一个图像。
因此,最终我为我的PostgreSQL实例和我的web应用程序提供了一个图像,对这些图像的更改将持续保存。
什么是容器?
当前回答
Image相当于OOP中的类定义,层是该类的不同方法和属性。
容器是图像的实际实例化,就像对象是实例化或类的实例一样。
其他回答
工作流
下面是端到端的工作流,显示各种命令及其相关的输入和输出。这应该澄清了映像和容器之间的关系。
+------------+ docker build +--------------+ docker run -dt +-----------+ docker exec -it +------+
| Dockerfile | --------------> | Image | ---------------> | Container | -----------------> | Bash |
+------------+ +--------------+ +-----------+ +------+
^
| docker pull
|
+--------------+
| Registry |
+--------------+
要列出你可以运行的图像,执行:
docker image ls
列出你可以执行命令的容器:
docker ps
图像之于类就像容器之于对象。
容器是图像的实例,就像对象是类的实例一样。
An image is like a class and container is like an object that class and so you can have an infinite number of containers behaving like the image. A class is a blueprint which isnt doing anything on its own. You have to create instances of the object un your program to do anything meaningful. And so is the case with an image and a container. You define your image and then create containers running that image. It isnt exactly similar because object is an instance of a class whereas a container is something like an empty hollow place and you use the image to build up a running host with exactly what the image says
Docker映像打包了应用程序运行所需的应用程序和环境,容器是映像的运行实例。
图像是Docker的包装部分,类似于“源代码”或“程序”。容器是Docker的执行部分,类似于“进程”。
在这个问题中,只提到了“程序”部分,这就是图像。Docker的“运行”部分是容器。当容器运行并进行更改时,就好像进程对自己的源代码进行了更改,并将其保存为新的映像。
正如许多回答指出的那样:你构建Dockerfile来获取一个图像,然后运行image来获取一个容器。
但是,下面的步骤帮助我更好地了解Docker映像和容器是什么:
1)构建Dockerfile:
Docker build -t my_image dir_with_dockerfile
2)保存镜像到.tar文件
-o my_file.tar my_image_id
My_file.tar将存储映像。使用tar -xvf my_file.tar打开它,您将看到所有的层。如果你深入每一层,你可以看到每一层添加了什么变化。(它们应该非常接近Dockerfile中的命令)。
3)要查看容器内部,您可以:
Sudo docker运行- my_image bash
你可以看到它很像一个操作系统。