====== Docker: Image Development ======
**General Information**
Developing docker images.
**Checklist**
* [[linux_wiki:docker|Docker installed]]
* A [[https://docs.docker.com/get-started/part2/#define-a-container-with-dockerfile|Dockerfile]] to build
* [[https://docs.docker.com/develop/develop-images/dockerfile_best-practices/|Best practices for Dockerfiles]]
* Account on [[https://hub.docker.com/|docker hub]] or [[https://docs.docker.com/registry/deploying/|private registry]] setup
----
====== Building/Testing Images ======
\\
Build a docker image from a Dockerfile (mytag is usually a version number)
docker build -t myimagename:mytag --file=Dockerfile .
\\
Run a container with an interactive terminal, remove it when stopped, attach a bash shell
docker run -it --rm --name mycontainername myimagename /bin/bash
----
====== Push Images To Docker Registry ======
Login to registry
* Docker Hubdocker login -u dockerhubuser
* Private Registrydocker login -u myuserhere https://registryhostname.my.domain.com
\\
Tag a local image:tag with the destination image:tag (usually tag is a version number)
* Docker Hubdocker tag myimage:mytag dockerhubuser/myimage:mytag
* Private Registrydocker tag myimage:mytag registryhostname.my.domain.com/myimage:mytag
\\
Push the image:tag to the remote registry
* Docker Hubdocker push dockerhubuser/myimage:mytag
* Private Registrydocker push registryhostname.my.domain.com/myimage:mytag
\\
Additional tag with latest (so the most recent version number is also a latest tag)
* Docker Hubdocker tag myimage:mytag dockerhubuser/myimage:latest
* Private Registrydocker tag myimage:mytag registryhostname.my.domain.com/myimage:latest
\\
Additional push for latest
* Docker Hubdocker push dockerhubuser/myimage:latest
* Private Registrydocker push registryhostname.my.domain.com/myimage:latest
----
====== Run Container From Registry ======
Login to registry
* Docker Hubdocker login -u dockerhubuser
* **Note**: Login only required if docker hub registry is private (they are public by default).
* Private Registrydocker login -u myuserhere https://registryhostname.my.domain.com
\\
Run container interactively with a bash shell (latest tag is default)
* Docker Hubdocker run -it --name mycontainername dockerhubuser/myimage /bin/bash
* Private Registrydocker run -it --name mycontainername registryhostname.my.domain.com/myimage /bin/bash
----