Overview
Commonly user docker commands for quick access
Basic
Docker version
docker version
λ docker version Client: Docker Engine - Community Version: 19.03.8 API version: 1.40 Go version: go1.12.17 Git commit: afacb8b Built: Wed Mar 11 01:23:10 2020 OS/Arch: windows/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.8 API version: 1.40 (minimum version 1.12) Go version: go1.12.17 Git commit: afacb8b Built: Wed Mar 11 01:29:16 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: v1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683
Docker Info
docker info
Containers
Docker Run
docker run {image-name}
λ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Common parameters:
-d : Detached mode--name : Name
-it : Interactive mode
Start a simple web-server:
λ docker run -d --name http-web -p 8080:80 httpd b7aa50d480bbe5c2ad06aa549739bafb8605b6e60ffd0f9dae35ed6b6f1dee06
You can see the result @ http://localhost:8080/
Start to terminal / bash in interactive mode
λ docker run -it --name ubuntu-it ubuntu:latest /bin/bash root@f868409d3d58:/#
Ctr P + Q to exit the bash shell without exiting the container
Run container with a python installation to Alpine using apk
$ docker container run alpine apk add --no-cache python3 fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz .... Executing busybox-1.31.1-r16.trigger OK: 53 MiB in 24 packages
Docker list containers
docker ps
docker ps -a
docker container ls -a
$ docker container ls -l (latest container)
λ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b7aa50d480bb httpd "httpd-foreground" 4 minutes ago Exited (0) About a minute ago http-web 4540687eabcb hello-world "/hello" 8 minutes ago Exited (0) 7 seconds ago serene_fermat
Stop Docker Containers
docker stop {name/container-id}
docker stop $(docker ps -aq) (To stop all active containers)
FOR /f "tokens=*" %i IN ('docker ps -q') DO docker stop %i (Tricky Windows command-line version)
λ docker stop http-web http-web λ docker stop b7aa50d480bb b7aa50d480bb
Start a stopped container
docker start {container-id/name}
λ docker start 4540687eabcb 4540687eabcb
Remove a docker container
docker rm {container-id/name}docker rm $(docker ps -aq) (To remove all containers) FOR /f "tokens=*" %i IN ('docker ps -aq') DO docker rm %i (To remove all containers – windows)
λ docker rm 4540687eabcb 4540687eabcb
Docker container difference
$ docker container diff e94ae1c23f8e
Images
Docker list images
docker images
λ docker images REPOSITORY TAG IMAGE ID CREATED SIZE alpine latest a24bb4013296 4 weeks ago 5.57MB hello-world latest bf756fb1ae65 6 months ago 13.3kB
Docker pull image
docker pull {image-name}
λ docker pull alpine Using default tag: latest latest: Pulling from library/alpine df20fa9351a1: Pull complete Digest: sha256:185518070891758909c9f839cf4ca393ee977ac378609f700f60a771a2dfe321 Status: Downloaded newer image for alpine:latest docker.io/library/alpine:latest λ docker images REPOSITORY TAG IMAGE ID CREATED SIZE alpine latest a24bb4013296 4 weeks ago 5.57MB hello-world latest bf756fb1ae65 6 months ago 13.3kB
Docker Remove Image
docker rmi {image-name/id}
λ docker rmi bf756fb1ae65 Untagged: hello-world:latest Untagged: hello-world@sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9 Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b Deleted: sha256:9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63
Create image from container
$ docker container commit -m "Added Python" e94ae1c23f8e my-python-img:1.0 sha256:1874de311462fb88c50c3dc2202c0e27cc9769d130c9d5e15c065325c29410a5 $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my-python-img 1.0 1874de311462 About a minute ago 48.9MB alpine latest a24bb4013296 5 weeks ago 5.57MB
Flattening docker container image (Docker export and Docker Import)
docker container export
docker image import
$ docker container export -o my-python-img-1.0.tar e94ae1c23f8e $ docker image import my-python-img-1.0.tar my-python-img:1.1 sha256:ecc166ee53c047a1ff6678535a05e20d75c15e21c4963b83e329aba0eb05d540 $ docker image ls -a REPOSITORY TAG IMAGE ID CREATED SIZE my-python-img 1.1 ecc166ee53c0 51 seconds ago 48.8MB my-python-img 1.0 1874de311462 20 minutes ago 48.9MB alpine latest a24bb4013296 5 weeks ago 5.57MB
Docker Image History
docker image history
$ docker image history my-python-img:1.0 IMAGE CREATED CREATED BY SIZE COMMENT 1874de311462 26 minutes ago apk add --no-cache python3 43.3MB Added Python a24bb4013296 5 weeks ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B <missing> 5 weeks ago /bin/sh -c #(nop) ADD file:c92c248239f8c7b9b… 5.57MB
Docker file
Sample Dockerfile for a Spring boot java application
FROM openjdk:14
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
Build Docker image
docker build -t{tag} {context path}
docker build -t logicalsapien/joan .
Sending build context to Docker daemon 69.85MB
Step 1/4 : FROM openjdk:14
---> dee15a342cac
Step 2/4 : ARG JAR_FILE=build/libs/*.jar
---> Running in 13e73d2417ee
Removing intermediate container 13e73d2417ee
---> 37b10e8d2311
Step 3/4 : COPY ${JAR_FILE} app.jar
---> 82db2f7b1c32
Step 4/4 : ENTRYPOINT ["java","-jar","/app.jar"]
---> Running in 3894adb86517
Removing intermediate container 3894adb86517
---> 248b3ef28416
Successfully built 248b3ef28416
Successfully tagged logicalsapien/joan:latest
Push image to docker hub
need to login to docker hub first
Normal:
docker login -u {username}
$ docker login -u logicalsapien Password: Login Succeeded
If yo’re using a windows machine and bacs shell, you can use something like this :
$ winpty docker login -u logicalsapien Password: Login Succeeded
To push the image
docker push {imagename}
$ docker push logicalsapien/joan The push refers to repository [docker.io/logicalsapien/joan] 5730b01a75f3: Preparing c1a9ce1e221e: Preparing 41f691265dc2: Preparing 351f02e4b003: Preparing 41f691265dc2: Mounted from library/openjdk c1a9ce1e221e: Mounted from library/openjdk 351f02e4b003: Mounted from library/openjdk 5730b01a75f3: Pushed latest: digest: sha256:a982eb3fcb07b687ac1367b424f1360bab95f4b8531de size: 1166
Network
List networks
docker network ls
λ docker network ls NETWORK ID NAME DRIVER SCOPE 9a74c109118a bridge bridge local 38c6238bcf19 host host local 5da6ef33f9d0 none null local
Network Inspect (Details)
docker network inspect {networkname/id}
λ docker network inspect bridge
[
{
"Name": "bridge",
"Id": "9a74c109118a93cdbcdb43da734d0275ad1ea57fa1580a231067d54d074a352d",
"Created": "2020-07-02T23:51:23.8227395Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"8a598f453cab6034ee76415d8c1456214e4111d2332d72e08b3ad8959c99fdb3": {
"Name": "elegant_babbage",
"EndpointID": "fa8ac23b634a95738ff8e11e6ecb3b72c4d39ac08859b2898f7664840b7a00e9",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
},
"eeb90789f0f66d1c44560efc0287e49f04cfe66a05f32d48f4c50c9096c1f39f": {
"Name": "postgres1",
"EndpointID": "d6f68665bccc4f59767c451ef77cf913a3dbac2e5143b93eea2b43b77730ff25",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]