Данная инструкция описывает, как установить и использовать Docker Community Edition (CE) в Ubuntu .

Установка взята отсюда.

  • Вводим следующие команды
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce

Теперь установим docker-compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bindocker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version проверка работы
sudo systemctl status docker проверить состояние демона Docker

Войти в имеющийся контейнер

  • Для выполнения команд в уже запущенных контейнерах существует команда docker exec.
  • Чтобы получить доступ к контейнеру нужно знать его имя или идентификатор ID.
  • Получить список всех контейнеров можно командой docker ps.
  • Столбцы CONTAINER ID или NAMES помогут нам в идентификации контейнера

Отказано в разрешении

Если вы столкнулись с ошибкой «отказано в разрешении» при попытке подключиться к Docker, скорее всего, вы не выполняете команды Docker с достаточными привилегиями.

  1. По умолчанию команды Docker могут выполнять только пользователи с привилегиями root или sudo. Если вы хотите выполнять команды Docker от имени пользователя без привилегий root, необходимо добавить пользователя в группу docker:
sudo usermod -aG docker your-user 

Замените your-user своим реальным именем пользователя. Эта команда добавит пользователя в группу Docker, что позволит вам выполнять команды docker без использования sudo. После добавления пользователя в группу docker необходимо выйти из системы и снова войти в систему, чтобы изменения вступили в силу.

  1. Кроме того, вы можете выполнить следующую команду, чтобы перезагрузить членство в группах:
newgrp docker

Эта команда обновит членство пользователя в группах без выхода из системы и повторного входа.

docker ps
docker exec -it b5d116ad83cc bash

Результатом выполнения будет окно терминала Bash нашего контейнера.

Что же произошло?

Для exec мы задали параметры:

«i» (—interactive) — держать STDIN открытым, даже если он не прикреплен. «t» (—tty) — назначает псевдо-телетайп.

Для понимания команды exec можно обратиться к официальной документации.

Остановить/удалить все контейнеры Docker

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

Удаление всех неиспользуемых или висящих Images, Containers, Volumes, Networks

Docker предоставляет единственную команду, которая очистит любые ресурсы — образы, контейнеры, тома и сети — которые висят (не помечены или не связаны с контейнером):

docker system prune

Чтобы дополнительно удалить все остановленные контейнеры и все неиспользуемые образы (а не только висящие образы), добавьте в команду флаг -a:

docker system prune -a

Удаление Образа

Используйте команду docker images с флагом -a, чтобы найти идентификатор образов, которые вы хотите удалить. Это покажет вам каждое изображение, включая промежуточные слои изображения. Когда вы найдете изображения, которые хотите удалить, вы можете передать их идентификатор или тег в docker rmi:

docker images -a
docker rmi Image Image

Можно принудительно удалить образ docker. При использовании флага -f и идентификатора изображения (короткого или длинного) изображение освобождается от тегов и удаляется.

docker rmi -f <image ID>

Удалить все Образы

docker images -a
docker rmi $(docker images -a -q)

Удаление Контейнеров

Если вы знаете, что при создании контейнера вы не захотите его оставлять после того, как закончите, вы можете запустить docker run –rm, чтобы автоматически удалить его при выходе:

docker run --rm image_name

Удалить все запущенные Контейнеры

Вы можете найти контейнеры с помощью команды docker ps -a и отфильтровать их по статусу: created, restarting, running, paused, или exited. Чтобы просмотреть список закрытых контейнеров, используйте флаг -f для фильтрации по статусу. Когда вы подтвердите, что хотите удалить эти контейнеры, используйте -q, чтобы передать идентификаторы команде docker rm:

docker ps -a -f status=exited
docker rm $(docker ps -a -f status=exited -q)

Удаление Контейнеров с использованием более одного фильтра

Фильтры Docker можно комбинировать, повторяя флаг фильтра с дополнительным значением. Это приводит к списку контейнеров, которые удовлетворяют любому условию. Например, если вы хотите удалить все контейнеры, помеченные как созданные (состояние, которое может возникнуть, когда вы запускаете контейнер с недопустимой командой) или закрытые, вы можете использовать два фильтра:

docker ps -a -f status=exited -f status=created
docker rm $(docker ps -a -f status=exited -f status=created -q)

Удалите Контейнеры в соответствии с шаблоном

Вы можете найти все контейнеры, соответствующие шаблону, используя комбинацию docker ps и grep. Когда вы удовлетворены тем, что у вас есть список, который вы хотите удалить, вы можете использовать awk и xargs для предоставления идентификатора для docker rm. Обратите внимание, что эти утилиты не поставляются Docker и не обязательно доступны во всех системах:

docker ps -a |  grep "pattern”
docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm

Остановить и удалить все Контейнеры

Вы можете просмотреть контейнеры в вашей системе с помощью docker ps. Добавление флага -a покажет все контейнеры. Когда вы уверены, что хотите их удалить, вы можете добавить флаг -q для предоставления идентификаторов командам docker stop и docker rm:

docker ps -a
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

Удаление томов

Удаление одного или нескольких конкретных томов — Docker 1.9 и более поздние версии

Используйте команду docker volume ls, чтобы найти имя или имена томов, которые вы хотите удалить. Затем вы можете удалить один или несколько томов с помощью команды docker volume rm:

docker volume ls
docker volume rm volume_name volume_name

Удалите висячие тома — Docker 1.9 и более поздние версии

Поскольку смысл томов в том, чтобы существовать независимо от контейнеров, при удалении контейнера том не удаляется автоматически одновременно. Когда том существует и больше не подключен к каким-либо контейнерам, он называется висячим томом. Чтобы найти их и подтвердить, что вы хотите их удалить, вы можете использовать команду docker volume ls с фильтром, чтобы ограничить результаты висячими томами. Когда вы будете удовлетворены списком, вы можете удалить их все с помощью Docker Volume prune:

docker volume ls -f dangling=true
docker volume prune

Удалить Контейнер и его Том

Если вы создали безымянный том, его можно удалить одновременно с контейнером с флагом -v. Обратите внимание, что это работает только с безымянными томами. При успешном удалении контейнера отображается его идентификатор. Обратите внимание, что нет ссылки на удаление тома. Если он безымянный, он автоматически удаляется из системы. Если он назван, он остается.

docker rm -v container_name

Удалить все

docker stop my-app && docker rm my-app && docker rmi nginx # Сlear all
docker stop my-app && docker rm $(docker ps -a -q) && docker rmi $(docker images -q)

Ссылка на статью

Инструкции Dockerfile

  • FROM — задаёт базовый (родительский) образ.
  • LABEL — описывает метаданные. Например — сведения о том, кто создал и поддерживает образ.
  • ENV — устанавливает постоянные переменные среды.
  • RUN — выполняет команду и создаёт слой образа. Используется для установки в контейнер пакетов.
  • COPY — копирует в контейнер файлы и папки.
  • ADD — копирует файлы и папки в контейнер, может распаковывать локальные .tar-файлы.
  • CMD — описывает команду с аргументами, которую нужно выполнить когда контейнер будет запущен. Аргументы могут быть переопределены при запуск* контейнера. В файле может присутствовать лишь одна инструкция CMD.
  • WORKDIR — задаёт рабочую директорию для следующей инструкции.
  • ARG — задаёт переменные для передачи Docker во время сборки образа.
  • ENTRYPOINT — предоставляет команду с аргументами для вызова во время выполнения контейнера. Аргументы не переопределяются.
  • EXPOSE — указывает на необходимость открыть порт.
  • VOLUME — создаёт точку монтирования для работы с постоянным хранилищем.

Ссылки:

Docker CLI

DOCKER

docker version                              # Docker version
docker search airflow                       # Search images 
docker run --name my-app -d nginx           # Run container
docker run --name my-app -d mysql:5.7       # Run container + tag
docker images                               # All images host
docker inspect namecontainer                # Inspect namecontainer
docker logs namecontainer                   # Logs namecontainer
docker build . -t  myname:0.1                # Create image using this directory's Dockerfile + tag
docker run -p 4000:80 friendlyname          # Run "friendlyname" mapping port 4000 to 80
docker run -d -p 4000:80 friendlyname       # Same thing, but in detached mode
docker exec -it [container-id] bash         # Enter a running container
docker ps                                   # See a list of all running containers
docker stop <hash>                          # Gracefully stop the specified container
docker ps -a                                # See a list of all containers, even the ones not running
docker kill <hash>                          # Force shutdown of the specified container
docker rm <hash>                            # Remove the specified container from this machine
docker rm $(docker ps -a -q)                # Remove all containers from this machine
docker images -a                            # Show all images on this machine
docker rmi <imagename>                      # Remove the specified image from this machine
docker rmi $(docker images -q)              # Remove all images from this machine
docker logs <container-id> -f               # Live tail a container's logs
docker login                                # Log in this CLI session using your Docker credentials
docker tag <image> username/repository:tag  # Tag <image> for upload to registry
docker push username/repository:tag         # Upload tagged image to registry
docker run username/repository:tag          # Run image from a registry
docker system prune                         # Remove all unused containers, networks, images (both dangling and unreferenced), and optionally, volumes. (Docker 17.06.1-ce and superior)
docker system prune -a                      # Remove all unused containers, networks, images not just dangling ones (Docker 17.06.1-ce and superior)
docker volume prune                         # Remove all unused local volumes
docker stats                                # Stats
- Cadvisor
- Ctop

Чистка Docker-окружение

docker system df                            # выдает подробную статистику о контейнерах
docker system prune                         # будут удалены остановленные контейнеры, висячие образы
docker system prune -a                      # Удаляем неиспользуемые образы
docker builder prune                        # удаляет неиспользуемые кэши сборки Build Cache

DOCKER NETWORK

docker network connect                      # Connect a container to a network
docker network disconnect                   # Disconnect a container from a network
docker network ls                           # All networks
docker network prune                        # Remove all unused networks
docker network inspect bridgename           # Show container bridge
docker network rm                           # Remove one or more networks
docker network create                       # Create a network
docker network create -d bridge my-bridge-network

DOCKER COMPOSE

docker-compose up                               # Create and start containers
docker-compose up -d                            # Create and start containers in detached mode
docker-compose down                             # Stop and remove containers, networks, images, and volumes
docker-compose ps                               # List containers
docker-compose images                           # List images
docker-compose exec servicename  command        # Run command
docker-compose logs                             # View output from containers
docker-compose logs -f servicename              # View output from service
docker-compose restart                          # Restart all service
docker-compose pull                             # Pull all image service 
docker-compose build                            # Build all image service
docker-compose config                           # Validate and view the Compose file
docker-compose scale <service_name>=<replica>   # Scale special service(s)
docker-compose top                              # Display the running processes
docker-compose run -rm -p 2022:22 web bash      # Start web service and runs bash as its command, remove old container.

DOCKER SERVICES

docker service create <options> <image> <command>   # Create new service
docker service inspect --pretty <service_name>      # Display detailed information Service(s)
docker service ls                                   # List Services
docker service ps                                   # List the tasks of Services
docker service scale <service_name>=<replica>       # Scale special service(s)
docker service update <options> <service_name>      # Update Service options

DOCKER STACK

docker stack ls                                 # List all running applications on this Docker host
docker stack deploy -c <composefile> <appname>  # Run the specified Compose file
docker stack services <appname>                 # List the services associated with an app
docker stack ps <appname>                       # List the running containers associated with an app
docker stack rm <appname>                       # Tear down an application

DOCKER MACHINE

docker-machine create --driver virtualbox myvm1                           # Create a VM (Mac, Win7, Linux)
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1  # Win10
docker-machine env myvm1                                                  # View basic information about your node
docker-machine ssh myvm1 "docker node ls"                                 # List the nodes in your swarm
docker-machine ssh myvm1 "docker node inspect <node ID>"                  # Inspect a node
docker-machine ssh myvm1 "docker swarm join-token -q worker"              # View join token
docker-machine ssh myvm1                                                  # Open an SSH session with the VM; type "exit" to end
docker-machine ssh myvm2 "docker swarm leave"                             # Make the worker leave the swarm
docker-machine ssh myvm1 "docker swarm leave -f"                          # Make master leave, kill swarm
docker-machine start myvm1                                                # Start a VM that is currently not running
docker-machine stop $(docker-machine ls -q)                               # Stop all running VMs
docker-machine rm $(docker-machine ls -q)                                 # Delete all VMs and their disk images
docker-machine scp docker-compose.yml myvm1:~                             # Copy file to node's home dir
docker-machine ssh myvm1 "docker stack deploy -c <file> <app>"            # Deploy an app

Error

PermissionError: [Errno 13] Permission denied: '/tmp/images/falcon2520925_image_20220722061450.png'

Errno 13 Permission denied when Airflow tries to write to logs

Postgres

Docker можно запустить CLI, подключиться к контейнеру и уже оттуда запустить, например, psql:

psql --username=postgres --dbname=postgres

Cокращенный вариант этой команды:

psql -U postgres -d postgres
⤧  Previous post Регулярные выражения Python ⤧  Next post Airflow settings and configuration