我是否需要“docker提交”才能将图像推入docker图像注册表(例如docker hub)?

我是否需要“docker提交”才能将图像推入docker图像注册表(例如docker hub)?,docker,dockerfile,Docker,Dockerfile,通常,为了构建docker形象,我需要遵循以下步骤: 为我的应用程序创建一个Dockerfile 运行docker构建。Dockerfile,其中。是我的应用程序的上下文 使用docker运行将我的图像运行到容器中 将我的图像提交到容器中 然后使用docker push将图像推入容器 虽然有时只是将图像启动到容器中似乎是浪费时间,因为我可以使用参数-t将图像标记到docker build命令中。因此,不需要将容器作为映像提交 那么,是否确实要将正在运行的容器作为映像提交呢?没有必要这样做。为了证

通常,为了构建docker形象,我需要遵循以下步骤:

  • 为我的应用程序创建一个
    Dockerfile

  • 运行
    docker构建。Dockerfile
    ,其中。是我的应用程序的上下文

  • 使用
    docker运行
    将我的图像运行到容器中

  • 将我的图像提交到容器中

  • 然后使用
    docker push
    将图像推入容器

  • 虽然有时只是将图像启动到容器中似乎是浪费时间,因为我可以使用参数
    -t
    将图像标记到
    docker build
    命令中。因此,不需要将容器作为映像提交


    那么,是否确实要将正在运行的容器作为映像提交呢?

    没有必要这样做。为了证明您可以标记图像并将其推入注册表,以下是一个示例:

    我制作了以下
    Dockerfile

    FROM alpine
    
    RUN echo "Hello" > /usr/share/hello.txt
    
    ENTRYPOINT cat /usr/share/hello.txt
    
    没有什么特别的,只是生成一个txt文件并显示其内容

    然后,我可以使用标记构建我的图像:

    docker build . -t ddesyllas/dummy:201201241200 -t ddesyllas/dummy:201201241200
    
    然后将它们推送到注册表:

    $ docker push ddesyllas/dummy
    The push refers to repository [docker.io/ddesyllas/dummy]
    1aa99de3dbec: Pushed 
    6bc83681f1ba: Mounted from library/alpine 
    201908241504: digest: sha256:93e8407b1d52620aeadd769486ef1402b9e310018cae0972760f8c1a03377c94 size: 735
    1aa99de3dbec: Layer already exists 
    6bc83681f1ba: Layer already exists 
    latest: digest: sha256:93e8407b1d52620aeadd769486ef1402b9e310018cae0972760f8c1a03377c94 size: 735
    

    正如您从输出中看到的,您只需构建标记并直接推送它,这对您的ci/cd管道很有好处。不过,一般来说,您可能需要将应用程序启动到容器中才能进行验收和其他类型的测试(例如端到端测试)。

    不需要这样做。为了证明您可以标记图像并将其推入注册表,以下是一个示例:

    我制作了以下
    Dockerfile

    FROM alpine
    
    RUN echo "Hello" > /usr/share/hello.txt
    
    ENTRYPOINT cat /usr/share/hello.txt
    
    没有什么特别的,只是生成一个txt文件并显示其内容

    然后,我可以使用标记构建我的图像:

    docker build . -t ddesyllas/dummy:201201241200 -t ddesyllas/dummy:201201241200
    
    然后将它们推送到注册表:

    $ docker push ddesyllas/dummy
    The push refers to repository [docker.io/ddesyllas/dummy]
    1aa99de3dbec: Pushed 
    6bc83681f1ba: Mounted from library/alpine 
    201908241504: digest: sha256:93e8407b1d52620aeadd769486ef1402b9e310018cae0972760f8c1a03377c94 size: 735
    1aa99de3dbec: Layer already exists 
    6bc83681f1ba: Layer already exists 
    latest: digest: sha256:93e8407b1d52620aeadd769486ef1402b9e310018cae0972760f8c1a03377c94 size: 735
    

    正如您从输出中看到的,您只需构建标记并直接推送它,这对您的ci/cd管道很有好处。不过,一般来说,您可能需要将应用程序启动到容器中,以便进行验收和其他类型的测试(例如端到端测试)。

    您不需要运行和提交。docker commit允许您根据对现有容器所做的更改创建新映像。 您需要以一种能够推动图像的方式构建和标记图像

    docker build -t [registry (defaults to docker hub)]/[your repository]:[image tag] [docker file context folder]
    
    例如:

    docker build -t my-repository/some-image:image-tag .
    
    docker tag my-repository/some-image:image-tag localhost:5000/my-repository/some-image:image-tag
    
    然后:

    docker push my-repository/some-image:image-tag
    
    这将从当前文件夹(运行docker build命令的文件夹)中找到的docker文件生成图像。本例中的存储库是我的存储库,图像名称是某个图像,它的标记是图像标记

    另外请注意,在您能够实际推送图像之前,您必须使用您的凭据执行docker登录到docker hub

    您还可以标记现有图像,而无需重建它。如果要将现有图像推送到不同的注册表,或者要创建不同的图像标记,这将非常有用。例如:

    docker build -t my-repository/some-image:image-tag .
    
    docker tag my-repository/some-image:image-tag localhost:5000/my-repository/some-image:image-tag
    

    这将向上一示例中的图像添加一个新标记。注意添加的注册表部分(localhost:5000)。如果您在该标记上调用docker push(docker push localhost:5000/my repository/some image:image标记),则图像将被推送到localhost:5000上的注册表(当然,在尝试推送之前,您需要启动并运行注册表)

    您不需要运行并提交。docker commit允许您根据对现有容器所做的更改创建新映像。 您需要以一种能够推动图像的方式构建和标记图像

    docker build -t [registry (defaults to docker hub)]/[your repository]:[image tag] [docker file context folder]
    
    例如:

    docker build -t my-repository/some-image:image-tag .
    
    docker tag my-repository/some-image:image-tag localhost:5000/my-repository/some-image:image-tag
    
    然后:

    docker push my-repository/some-image:image-tag
    
    这将从当前文件夹(运行docker build命令的文件夹)中找到的docker文件生成图像。本例中的存储库是我的存储库,图像名称是某个图像,它的标记是图像标记

    另外请注意,在您能够实际推送图像之前,您必须使用您的凭据执行docker登录到docker hub

    您还可以标记现有图像,而无需重建它。如果要将现有图像推送到不同的注册表,或者要创建不同的图像标记,这将非常有用。例如:

    docker build -t my-repository/some-image:image-tag .
    
    docker tag my-repository/some-image:image-tag localhost:5000/my-repository/some-image:image-tag
    
    这将向上一示例中的图像添加一个新标记。注意添加的注册表部分(localhost:5000)。如果您在该标记上调用docker push(docker push localhost:5000/my repository/some image:image标记),则图像将被推送到localhost:5000上的注册表(当然,在尝试推送之前,您需要启动并运行注册表)