Use `docker image push` to share your images to the [Docker Hub](https://hub.docker.com)
registry or to a self-hosted one.

Refer to **docker-image-tag(1)** for more information about valid image and tag names.

Killing the **docker image push** process, for example by pressing **CTRL-c** while it
is running in a terminal, terminates the push operation.

Registry credentials are managed by **docker-login(1)**.

# EXAMPLES

## Pushing a new image to a registry

First save the new image by finding the container ID (using **docker container ls**)
and then committing it to a new image name.  Note that only a-z0-9-_. are
allowed when naming images:

    # docker container commit c16378f943fe rhel-httpd

Now, push the image to the registry using the image ID. In this example the
registry is on host named `registry-host` and listening on port `5000`. To do
this, tag the image with the host name or IP address, and the port of the
registry:

    # docker image tag rhel-httpd registry-host:5000/myadmin/rhel-httpd:latest
    # docker image push registry-host:5000/myadmin/rhel-httpd:latest

Check that this worked by running:

    # docker image ls

You should see both `rhel-httpd` and `registry-host:5000/myadmin/rhel-httpd`
listed.

### Push all tags of an image

Use the `-a` (or `--all-tags`) option to push all tags of a local image.

The following example creates multiple tags for an image, and pushes all those
tags to Docker Hub.

    $ docker image tag myimage registry-host:5000/myname/myimage:latest
    $ docker image tag myimage registry-host:5000/myname/myimage:v1.0.1
    $ docker image tag myimage registry-host:5000/myname/myimage:v1.0
    $ docker image tag myimage registry-host:5000/myname/myimage:v1

The image is now tagged under multiple names:

    $ docker image ls
    
    REPOSITORY                          TAG        IMAGE ID       CREATED      SIZE
    myimage                             latest     6d5fcfe5ff17   2 hours ago  1.22MB
    registry-host:5000/myname/myimage   latest     6d5fcfe5ff17   2 hours ago  1.22MB
    registry-host:5000/myname/myimage   v1         6d5fcfe5ff17   2 hours ago  1.22MB
    registry-host:5000/myname/myimage   v1.0       6d5fcfe5ff17   2 hours ago  1.22MB
    registry-host:5000/myname/myimage   v1.0.1     6d5fcfe5ff17   2 hours ago  1.22MB

When pushing with the `--all-tags` option, all tags of the `registry-host:5000/myname/myimage`
image are pushed:


    $ docker image push --all-tags registry-host:5000/myname/myimage
    
    The push refers to repository [registry-host:5000/myname/myimage]
    195be5f8be1d: Pushed
    latest: digest: sha256:edafc0a0fb057813850d1ba44014914ca02d671ae247107ca70c94db686e7de6 size: 4527
    195be5f8be1d: Layer already exists
    v1: digest: sha256:edafc0a0fb057813850d1ba44014914ca02d671ae247107ca70c94db686e7de6 size: 4527
    195be5f8be1d: Layer already exists
    v1.0: digest: sha256:edafc0a0fb057813850d1ba44014914ca02d671ae247107ca70c94db686e7de6 size: 4527
    195be5f8be1d: Layer already exists
    v1.0.1: digest: sha256:edafc0a0fb057813850d1ba44014914ca02d671ae247107ca70c94db686e7de6 size: 4527
