these are my notes from a recent tutorial i watched on youtube , by amigoscode
Docker tool box -old way , docker desktop is the new way to run dockers on your machine
Docker is a daemon that runs on your machine that can internally run containers . Think of hypervisor , but you need a host os that the hypervisor will convert the instructions to the underlying layer , but in this , the docker daemon will pas it to the underlying os. So we can live with one os and the docker daemon and now you can run a whole bunch of containers
docker –version
Docker version 19.03.12, build 48a66213fe
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Docker ps command will attach to the daemon and list any containers if created
An image is a template for creating an environment of your choice – it contains everything – os, software, app code etc
You take an image and run a container with it
Go to hub.docker.com – explore the images and donwload the images – in this case we are pulling nginx
docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
d121f8d1c412: Pull complete 66a200539fd6: Pull complete e9738820db15: Pull complete d74ea5811e8a: Pull complete ffdacbba6928: Pull complete Digest: sha256:fc66cdef5ca33809823182c9c5d72ea86fd2cef7713cf3363e1a0b12a5d77500
Status: Downloaded newer image for nginx:latest
docker.io/library/ngi
Notice the tag – it says latest that’s the tag
Docker images lists all the images you have
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 992e3b7be046 6 days ago 133MB
Since containers are images that are running , you specify the image and the tag as shown below
docker run nginx:latest
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
Nginx – image ., latets – is the tag
This starts the daemon , open up anew powershell window and list this command
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a54ce12191d8 nginx:latest “/docker-entrypoint.…” 34 seconds ago Up 32 seconds 80/tcp condescending_liskov
Note the port is 80/tcp
To run in detach mode use the -d flag
docker run -d nginx:latest
e97caef31a44d818508b1e36f0ba76a77d461fd1af26c5c5c74c38a1e8576fe4
To map a localhost port to a the container port , use the -p flag , specify the localhost port first and then the container port
So here is the command and you may get a windows pop up
docker run -d -p 8080:80 nginx:latest
77328413d2b59e5a70fe19d4b3d6922f80cb201568e7002de4240cc6866e5c66
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
77328413d2b5 nginx:latest “/docker-entrypoint.…” 3 minutes ago Up 3 minutes 0.0.0.0:8080->80/tcp stupefied_clarke
You can map multiple ports from the source to the dest
Use another -P localhostport:container port in the docker command
You can start and stop container by names as well
docker stop stupefied_clarke
stupefied_clarke
docker ps -a
list all containers
docker rm 77328413d2b5
77328413d2b5 is the container id
use docker rm $(docker ps-aq) to remove all containers , the q flag stands for quiet mode
Use -f if there is a running container
Random name gets assigned , but you can specify a name with –name flag
You should always name your containers
You can use the format command to display the container in a much more logical manner
PS C:\Users\vargh> docker ps –format=”ID\t{{.ID}}\nName\t{{.Names}}\nImage\t{{.Image}}\nPorts\t{{.Ports}}\nCommand\t{{.Command}}\nCreated\t{{.CreatedAt}}\nStatus\t{{.Status}}\n” ID 6adcb2e2ad1f
Name website2
Image nginx:latest
Ports 0.0.0.0:4000->80/tcp, 0.0.0.0:9080->80/tcp
Command “/docker-entrypoint.…”
Created 2020-10-12 15:25:32 -0400 EDT
Status Up 3 minutes
ID 113e35f080da
Name website
Image nginx:latest
Ports 0.0.0.0:3000->80/tcp, 0.0.0.0:8080->80/tcp
Command “/docker-entrypoint.…”
Created 2020-10-12 15:14:09 -0400 EDT
Status Up 13 minutes
$FORMAT=”ID\t{{.ID}}\nName\t{{.Names}}\nImage\t{{.Image}}\nPorts\t{{.Ports}}\nCommand\t{{.Command}}\nCreated\t{{.CreatedAt}}\nStatus\t{{.Status}}\n” docker ps –format=$FORMAT ID 6adcb2e2ad1f
You can create a powershell variable $FORMAT and pass that to the docker command
—
Docker volume
Volume allows sharing of data between hosts and containers or between containers
In windows , right click on whale -> settings -> resources -> File sharing
docker run –name website -v c:/training/dockertrng:/usr/share/nginx/html:ro -d -p 3000:80 -p 8080:80 nginx:latest
Mounting this localhost file , you can serve it up in the container – perfect for static file
To work interactively
docker exec -it website bash
This command puts us inside the container , now you can directly create files in the docker container that will be accessible in the host if the volume was mounted without the readonly flag.