首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dockerfile vs docker -编写Dockerfile命令

Dockerfile vs docker -编写Dockerfile命令
EN

Stack Overflow用户
提问于 2022-05-10 01:59:44
回答 2查看 165关注 0票数 1

根据我读过的一些参考文献(https://dockerlabs.collabnix.com/beginners/difference-compose-dockerfile.html来自vs码头的Dockerfile -合成图像),我把它们理解为:

a. Dockerfile和{docker build}是生成过程,它指定要使用的基本映像,并在生成过程中创建临时容器,并将任何其他步骤/命令运行到最终状态,并使用最终状态作为生成的结果映像。

停靠-组合是运行过程,它指定一组图像下载并作为容器运行每个映像。

如果是这样的话,

脚本文件中的一系列{docker拉}、{docker run}、{docker exec}和{docker commit}似乎可以替换docker文件和停靠器-组合?

如果我有一个码头文件和2个文件,有什么区别吗?

EN

回答 2

Stack Overflow用户

发布于 2022-05-10 03:18:45

Dockerfile

Dockerfile,用于运行应用程序的指令,以基本映像作为您的环境进入配置文件,以本地方式运行您的应用程序。

码头形象

映像中的一组图层,其中包含Dockerfile中给出的所有配置和应用程序代码,这些配置和应用程序代码独立于机器,可以在任何对接环境中运行。

注释:docker build -t <IMAGE_NAME> <Dockerfile_PATH>

当图像已经由某个人创建并且我们想要使用它时,就会使用Docker,比如mysqlelasticsearchopenjdk等等。

码头拉力

将现有的图像停靠器拉出图像注册表,如果图像或任何图像层存在于本地停靠器图像缓存中,则不会再次拉动。

码头运行

将docker映像作为容器运行,它现在作为与主机隔离的环境运行,它在Dockerfile上运行。

建议不要每次部署更改时都使用docker run命令运行相同的命令。docker run,如果图像不存在于本地注册表中,则该命令还会提取图像,如果无法使用一个命令运行多个容器。

例如,在一个nginx命令中使用mysql运行docker run应用程序是不可能的。

运行Nginx

代码语言:javascript
复制
docker run -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro --restart always --log-opt max-size=1g nginx

运行mysql

代码语言:javascript
复制
docker run -p 5432:5432 --restart always --log-opt max-size=1g mysql

码头组成

作为我们使用docker run conf配置的代码,.yml命令是由多个服务( nginxmysql )组成的

代码语言:javascript
复制
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,如下所示。

代码语言:javascript
复制
docker exec -it mysql bash

mysql>

exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD" > /some/path/on/your/host/all-databases.sql
票数 1
EN

Stack Overflow用户

发布于 2022-05-10 10:38:48

docker build有点像docker rundocker commit的序列。较新的BuildKit后端使这种模糊(中间图像不能直接访问),但在概念上它仍然是相同的模型。

Docker安装程序非常类似于一系列docker run命令,可能首先运行docker build,也可能沿途创建其他Docker对象(docker network createdocker volume create)。

您几乎不应该运行docker commitdocker exec是一个非常有用的调试工具,但是您应该以像gdb这样的调试器的方式使用它;它不应该是您与容器交互的通常方式,而且通常不应该出现在脚本中。

如果您确实有一个脚本,即docker run是一个容器,docker exec命令在其中,docker stop是它,docker commit是图像的结果,那么将这一系列步骤重写为一个Dockerfile几乎肯定是更好的做法。然后,您可以对图像进行docker build,或者将目录包含在一个Compose build:块中,并让它为您完成此操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72179940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档