根据我读过的一些参考文献(https://dockerlabs.collabnix.com/beginners/difference-compose-dockerfile.html和来自vs码头的Dockerfile -合成图像),我把它们理解为:
a. Dockerfile和{docker build}是生成过程,它指定要使用的基本映像,并在生成过程中创建临时容器,并将任何其他步骤/命令运行到最终状态,并使用最终状态作为生成的结果映像。
停靠-组合是运行过程,它指定一组图像下载并作为容器运行每个映像。
如果是这样的话,
脚本文件中的一系列{docker拉}、{docker run}、{docker exec}和{docker commit}似乎可以替换docker文件和停靠器-组合?
如果我有一个码头文件和2个文件,有什么区别吗?
发布于 2022-05-10 03:18:45
Dockerfile
Dockerfile,用于运行应用程序的指令,以基本映像作为您的环境进入配置文件,以本地方式运行您的应用程序。
码头形象
映像中的一组图层,其中包含Dockerfile中给出的所有配置和应用程序代码,这些配置和应用程序代码独立于机器,可以在任何对接环境中运行。
注释:docker build -t <IMAGE_NAME> <Dockerfile_PATH>
当图像已经由某个人创建并且我们想要使用它时,就会使用Docker,比如
mysql、elasticsearch或openjdk等等。
码头拉力
将现有的图像停靠器拉出图像注册表,如果图像或任何图像层存在于本地停靠器图像缓存中,则不会再次拉动。
码头运行
将docker映像作为容器运行,它现在作为与主机隔离的环境运行,它在Dockerfile上运行。
建议不要每次部署更改时都使用
docker run命令运行相同的命令。docker run,如果图像不存在于本地注册表中,则该命令还会提取图像,如果无法使用一个命令运行多个容器。
例如,在一个nginx命令中使用mysql运行docker run应用程序是不可能的。
运行Nginx
docker run -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro --restart always --log-opt max-size=1g nginx运行mysql
docker run -p 5432:5432 --restart always --log-opt max-size=1g mysql码头组成
作为我们使用docker run conf配置的代码,.yml命令是由多个服务( nginx,mysql )组成的
version: '3.3'
services:
mysql:
image: MySQL
container_name: mysql
ports:
- '5432:5432'
restart: always
logging:
options:
max-size: 1g
nginx:
image: nginx
container_name: nginx
ports:
- '80:80'
volumes:
- '/var/run/docker.sock:/tmp/docker.sock:ro'
restart: always
logging:
options:
max-size: 1g使用一个命令运行所有容器
docker-compose -f <FILE_NAME>.yml up -d用一个命令停止所有容器
docker-compose -f <FILE_NAME>.yml down要更好地理解坞库运行与停靠库之间的关系,请看一下composeriser 链接
码头主管
每个容器充当共享主机内核的虚拟机,以获得ssh访问权限,以执行我们使用exec进入容器所需的容器中的命令。
例如,要执行MySQL命令,比如创建数据库和创建表,或者使用MySQL容器检查任何其他conf,我们需要使用exec,如下所示。
docker exec -it mysql bash
mysql>
exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD" > /some/path/on/your/host/all-databases.sql发布于 2022-05-10 10:38:48
docker build有点像docker run和docker commit的序列。较新的BuildKit后端使这种模糊(中间图像不能直接访问),但在概念上它仍然是相同的模型。
Docker安装程序非常类似于一系列docker run命令,可能首先运行docker build,也可能沿途创建其他Docker对象(docker network create、docker volume create)。
您几乎不应该运行docker commit。docker exec是一个非常有用的调试工具,但是您应该以像gdb这样的调试器的方式使用它;它不应该是您与容器交互的通常方式,而且通常不应该出现在脚本中。
如果您确实有一个脚本,即docker run是一个容器,docker exec命令在其中,docker stop是它,docker commit是图像的结果,那么将这一系列步骤重写为一个Dockerfile几乎肯定是更好的做法。然后,您可以对图像进行docker build,或者将目录包含在一个Compose build:块中,并让它为您完成此操作。
https://stackoverflow.com/questions/72179940
复制相似问题