Docker Cheat Sheet
PDF Version of Docker Cheat Sheet Here
Running Containers
docker run -it ubuntu bash | Run container and specify command |
docker run -it ubuntu | Run container |
docker run -tid ubuntu | Run container detatched |
docker create -ti ubuntu | Create a container without starting it |
docker run -tid --name smelly-hippo ubuntu | named container |
docker ps | show running containers |
docker ps -a | show all containers |
docker ps --filter name=web1 | show matching containers |
docker ps --filter name=web1 -q | show matching container ID |
docker inspect smelly-hippo | inspect container |
Container Lifecycle Stuff
docker start smelly-hippo | start |
docker stop smelly-hippo | stop |
docker stop smelly-hippo funny-frog | stop mutliple |
docker restart smelly-hippo | restart container |
docker pause smelly-hippo | pauses a running container, freeze in place |
docker unpause smelly-hippo | unpause a container |
docker wait smelly-hippo | blocks until running container stops |
docker kill smelly-hippo | sends SIGKILL, faster than stop |
docker rm smelly-hippo | remove |
docker rm smelly-hippo funny-frog | remove multiple |
docker rm -f smelly-hippo | force remove |
docker container rm -f $(docker ps -aq) | Remove all containers, running or stopped |
Resource Limits and Controls
docker run -tid -c 512 ubuntu | 50% cpu |
docker run -tid --cpuset-cpus=0,4,6 ubuntu | use these cpus |
docker run -tid -m 300M ubuntu | limit memory |
docker create -ti --storage-opt size=120G ubuntu | limit storage, not on aufs |
Stats, Logs, and Events
docker stats | resourse stats for all containers |
docker stats smelly-hippo | resource stats for one container |
docker top smelly-hippo | shows processes in a container |
docker logs web | container logs |
docker events | watch events in real time |
docker port nostalgic_colden | shows public facing port of container |
docker diff practical_sinoussi | show changes to a container's file system |
Docker Images
docker images | show images |
docker history ubuntu | show history of image |
docker image rm user1/funny-frog | remove image |
docker image remove 113a43faa138 | remove by id |
docker image remove user1/funny-frog | remove image |
docker rmi user1/funny-frog | remove image |
docker rmi $(docker images -q) | remove all images |
Commit container to an image: | |
docker commit smelly-hippo | no repo name |
docker commit smelly-hippo test1 | repo name |
docker commit smelly-hippo loworbitflux/test1 | repo name |
docker commit smelly-hippo loworbitflux/test1:my-update | tagged |
docker commit smelly-hippo loworbitflux/test1:v1.2.3 | tagged |
Export / Import / Save / Load
docker export | export container to tarball archive stream |
docker import | create image from tarball, excludes history ( smaller image ) |
docker load | load an image from tarball, includes history ( larger image ) |
docker save | save image to tar archive stream ( includes parent layers ) |
Examples: | |
docker load < my-image.tar.gz | |
docker save my_image:my_tag | gzip > my-image.tar.gz | |
cat my-container.tar.gz | docker import - my-image:my_tag | |
docker export my-container | gzip > my-container.tar.gz |
Docker Hub / Registry
docker login | Login to Registry |
docker logout | Logout of Registry |
docker tag 7d9495d03763 loworbitflux/smelly-hippo:latest | Tag an image |
docker push loworbitflux/smelly-hippo | Push to registry |
docker search mysql | Search for an image |
docker pull mysql | Pull it down |
docker run user1/funny-frog | Will be downloaded if it isn’t here |
Building Docker Images From A Dockerfile
mkdir mydockerbuild | Create build dir |
cd mydockerbuild | cd into build dir |
vi Dockerfile | Edit build instructions |
docker build -t mydockerimage . | Build the image (note the dot "." ) |
docker images | Show images |
docker run mydockerimage | Run the new image |
Simple Dockerfile Example
FROM ubuntu |
RUN apt update |
RUN apt install nginx -y |
CMD ["/usr/sbin/nginx"] |
Big Dockerfile Example
FROM ubuntu | base image |
RUN apt update | run commands while building |
RUN apt install nginx -y | run commands while building |
WORKDIR ~/ | working dir that CMD is run from |
ENTRYPOINT echo | default application |
CMD "echo" "Hello docker!" | main command / default application |
CMD ["--port 27017"] | params for ENTRYPOINT |
CMD "Hello docker!" | params for ENTRYPOINT |
ENV SERVER_WORKS 4 | set env variable |
EXPOSE 8080 | expose a port, not published to the host |
MAINTAINER authors_name | deprecated |
LABEL version="1.0" | add metadata |
LABEL author="User One" | add metadata |
USER 751 | UID (or username) to run as |
VOLUME ["/my_files"] | sets up a volume |
COPY test relativeDir/ | copies "test" to `WORKDIR`/relativeDir/ |
COPY test /absoluteDir/ | copies "test" to /absoluteDir/ |
COPY ssh_config /etc/ssh/ssh_config | copy over a vile |
COPY --chown=user1:group1 files* /data/ | also changes ownership |
ADD /dir1 /dir2 | like copy but does more ... |
Volumes / Storage
docker info | grep -i storage | check storage driver |
docker inspect web | look for “Mounts” |
docker volume ls | show voluems |
docker volume create testvol1 | create a volume |
docker volume inspect testvol1 | inspect a volume |
docker volume ls -f dangling=true | find dangling ( unused ) volumes |
docker volume rm volume1 | remove volume |
Running containers with volumes: | |
docker run -d --name test1 -v /data ubuntu | unamed volume mounted on /data |
docker run -d --name test2 -v vol1:/data ubuntu | named volume |
docker run -d --name test3 -v /src/data:/data ubuntu | bind mount |
docker run -d --name test4 -v /src/data:/data:ro ubuntu | RO |
docker run -d --volumes-from test2 --name test5 ubuntu | storage can be shared |
docker rm -v test1 | remove container and unnamed volume |
Access and sharing parameters: | |
:ro | for read only |
:z | shared all containers can read/write |
:Z | private, unshared |
- | |
/var/lib/docker/overlay2 | Defalt volume storage location on Ubuntu Linux |
Expose Ports
docker run -tid -p 1234:80 nginx | expose container port 80 on host port 1234 |
docker run -tid -p 80:5000 ubuntu | bind port |
docker run -tid -p 8000-9000:5000 ubuntu | bind port to range |
docker run -tid -p 80:5000/udp ubuntu | udp ports |
docker run -tid -p 127.0.0.1:80:5000 ubuntu | bind port on an interface |
docker run -tid -p 127.0.0.1::5000 ubuntu | bind any port, specific interface |
docker run -tid -P ubuntu | exposed ports to random ports |
Networks
docker network ls | show networks, bridge is default |
docker network inspect bridge | show network details and connected containers |
Create Bridge Network, Specify Subnet and Gateway: | |
docker network create -d bridge my-network | |
docker network create -d bridge --subnet 172.25.0.0/16 my-network | |
docker network create --subnet 203.0.113.0/24 --gateway 203.0.113.254 my-network | |
docker network rm my-network | remove network |
Run container and specify network: | |
docker run -tid --net=my-network --name test1 ubuntu | |
Run container, specify network and IP: | |
docker run -tid --net=my-network --ip=172.25.3.3 --name=test1 ubuntu | |
Connect container to network: | |
docker network connect net1 test1 | |
docker network connect net1 test2 --ip 172.25.0.102 | |
Disconnect container from network: | |
docker network disconnect net1 test1 | Disconnect container from this network |
docker network disconnect -f test1 test2 | Force disconnect |
Find container's IP address: | |
docker inspect -f '{{json .NetworkSettings.Networks}}' container1 | |
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container1 |
Docker Cheat Sheet - Image
Click for larger image