What and Why?
Abbreviate
For Desktop Client, use OrbStack!
For all platforms, check the official guide. It’s up to date!
You mind find this article is useful for Ubuntu/Pop!_OS.
After installing, if you meet
Got permission denied while trying to connect to the Docker daemon socket
, check this.Linux
MacOS
Windows
With GPUs support?
Linux
1docker login
2# using username (not email) and password
- Download at Docker Hub.
- Download images are store at
C:\ProgramData\DockerDesktop\vm-data
(Windows) by default.
1# docker's version
2docker --version
1# list images on the host
2docker images
1# check image's info
2docker inspec <image_id>
1# Where are images stored?
2docker info
3# normally, /var/lib/docker/
1# list running containers
2docker ps
3docker ps -a # all (including stopped)
1# only the ids
2docker ps -q
3docker ps -a -q
1# container's size
2docker ps -s
3docker ps -a -s
1# container's names only
2docker ps --format '{{.Names}}'
3docker ps -a --format '{{.Names}}'
1# Check the last command in container
2docker ps --format '{{.Command}}' --no-trunc
1# check log
2# useful if we wanna see the last running tasks's
3docker container logs <container_name>
1# get ip address
2docker inspect <container_name> | grep IPAddress
1# Attach to the running container
2docker attach <container_name>
1# RAM & CPU usages
2docker stats
3docker stats <container_name>
We can use sometimes interchangeable between
<container_id>
and <container_name>
.1# get info (container's id, image's id first)
2docker ps -a
1# start a stopped container
2docker start <container_id>
3
4# start and enter the container
5docker start -i <container>
1# stop a container
2docker stop <container_id>
1# Entering the running container (not attach)
2docker exec -it <container_name> bash
1# stop all running containers
2docker stop $(docker ps -a -q)
1# Attach to the running container
2docker attach <container_name>
Check this post: How To Remove Docker Images, Containers, and Volumes | DigitalOcean
1# any resources
2docker system prune
1# with all unused images
2docker system prune -a
1# list all images
2docker images -a
1# remove a specific image
2docker image rm <IMAGE_ID>
Dangling images are layers that have no relationship to any tagged images.
1# list dangling images
2docker images -f dangling=true
1# remove dangling images
2docker images purge
If you use
docker images -a
and see a lot of <none>:<none>
images. Don’t be worry to fast, if they’re dangling images, they take spaces, otherwise, they’re harmless to your drive! Check this SO question.1# remove a specific containers
2docker rm -f <container-id>
1# remove all containers
2docker rm -f $(docker ps -a -q)
If you have already a container, enter that container and then,
1# Enter
2docker exec -it container_name bash
3
4# Install zsh
5apt-get update
6apt-get install zsh
7zsh
8
9# Install curl
10apt-get install curl
11
12# Install oh-my-zsh
13sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
If you want to integrate the zsh installation in the Dockerfile,
1RUN apt-get install zsh && apt-get install curl
2RUN PATH="$PATH:/usr/bin/zsh"
3RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
Now, enter the container by
docker exec -it zsh
(instead of bash
)!1# build image with Dockerfile
2docker build -t <img_name> .
3
4# custom Dockerfile.abc
5docker build -t <img_name> . -f Dockerfile.abc
1# with docker-compose
2docker-compose up
3# with custom file
4docker-compose -f docker-compose.amin.yml up -d
1# if success
2# service name "docker_thi"
3docker run -it <service_name> bash
1# from current container
2docker ps -a # check all containers
3docker commit <container_id> <new_image_name>
1docker image tag old:latest myname/new:latest
You cannot use something like
COPY .. .
(parent of the folder containing the Dockerfile
) in the Dockerfile
because it uses the “build context” and it can access to files within that context. Ref.1# container test from an image
2docker create --name container_test -t -i <image_id> bash
3docker start container_test
4docker exec -it container_test bash
1docker run --name <container_name> -dp 3000:3000 -v todo-db:/etc/todos <docker_img>
1# run a command in a running docker without entering to that container
2# e.g. running "/usr/sbin/sshd -Ddp 22"
3docker exec -it -d docker_thi_dc /usr/sbin/sshd -Ddp 22
4# "-d" = Detached mode
1# want docker auto removes a container after exit
2docker run --rm ...
Use to create various services with the same image.
1docker-compose up -d # up and detach
2docker-compose -f file_name.yml up -d # custom docker-compose.yml file name
3
4# if you run 2 container in the same folder name
5docker-compose -p "project_1" up -d
6docker-compose -p "project_2" up -d
To upgrade docker-compose file format from version
2.x
to version 3.x
, check this guide. Also check this: Compose file versions and upgrading.🔅If there is no already built image, you can use a
Dockerfile
in the same place as docker-compose.yml
. In docker-compose.yml
, use1services:
2 dataswati:
3 build: .
Then run
docker-compose up --build
.🔅 Update to the newer version of
docker-compose
? Included in Docker Desktop (on Windows and MacOS), read this SO (Linux).🐞 Docker can’t connect to docker daemon.
1# check if daemon is running?
2ps aux | grep docker
3
4# run
5sudo /etc/init.d/docker start
🐞
sudo systemctl restart docker
meets Job for docker.service failed because the control process exited with error code.- Try to remove failed
daemon.json
file in/etc/docker/
(if the problem comes from here)
- Try running either
sudo /etc/init.d/docker start
orsudo service docker restart
(twice if needed).
🐞 perl: warning: Please check that your locale settings: when using below in the Dockerfile,
1ENV LANG en_US.UTF-8ENV LANGUAGE en_US:enENV LC_ALL en_US.UTF-8# Replace them byRUN echo "LC_ALL=en_US.UTF-8" >> /etc/environmentRUN echo "en_US.UTF-8 UTF-8" >> /etc/locale.genRUN echo "LANG=en_US.UTF-8" > /etc/locale.confRUN locale-gen en_US.UTF-8
🐞 On Windows + WSL2The process cannot access the file 'ext4.vhdx' because it is being used by another process.
- Quit docker.
- Open Task Manager, try to end the processes wsappx (all of them).
- Reopen docker.
- Play with Docker – right on the web.
- Yury Pitsishin – Docker RUN vs CMD vs ENTRYPOINT.