Docker. Управление образами и контейнерами
Справка по командам управления образами и контейнерами Docker.
Быстро запустить временный контейнер:
docker run --rm -it -v $(pwd):/app -w /app --name some-name node:8.17.0-alpine sh
docker run --rm -it -v $(pwd):/usr/share/nginx/html:ro -w /usr/share/nginx/html --name nginx-proxy -p 8080:80 nginx bash
Термины
Image (Образ) - это статический билд на основе определенной OS (дистрибутива). На основе 1 образа можно создавать разные контейнеры.
Container (Контейнер) - это кастомизированный инстанс образа. Создается на основе Dockerfile.
Volume (Том) - предпочтительный способ для постоянного хранения/обмена данными между контейнером и хост-машиной.
Права на запуск docker
Чтобы запускать Docker контейнеры под своим пользователем без sudo, нужно добавиться в группу docker и перлогиниться:
sudo usermod -aG docker $USER
Сервис Docker
Управление сервисом Docker'а:
sudo service docker start|stop|restart|status
sudo restart docker # алиас
Образы
Список доступных образов:
docker images
Скачать образ (или весь репозиторий) из официального регистра (хранилища образов):
docker pull ubuntu:14.04
Посмотреть информацию об образе:
docker inspect ubuntu
Удалить образ:
docker rmi IMAGE_ID
Сохранить состояние контейнера как образ:
docker commit CONTAINER_ID IMAGE_NAME
Контейнеры
Внимание!
После запуска Docker контейнера сервисы/демоны (как-то SSH, Supervisor и прочие) не будут запускаться автоматически! Я потратил несколько часов на отладку ошибки: "ssh_exchange_identification: read: Connection reset by peer", при попытке подключиться к контейнеру по SSH. А оказалось, что всего-то не запускался демон sshd. Вы должны будете вручную запускать нужные демоны или супервизор после старта контейнера:
docker exec -it CONTAINER_ID bash
docker exec CONTAINER_ID bash -c "service ssh start"
Список всех контейнеров (запущенных и остановленных):
docker ps -a
Удалить контейнер(ы):
docker rm CONTAINER_ID CONTAINER_ID
Удалить все контейнеры:
docker rm $(docker ps -aq)
Создать и запустить Docker контейнер c Ubuntu 14.04 в интерактивном режиме (открыть shell этого контейнера):
docker run -it ubuntu bash
docker run --rm -it -v $(pwd):/app -w /app --name some-name node:8.17.0-alpine sh
docker run [опции] образ [команда]
-i Интерактивный режим, держим STDIN открытым
-t Allocate/creates a pseudo-TTY that attaches stdin and stdout
--name Имя контейнера вместо ID
-w Указать рабочую директорию (--workdir)
-e Установить переменную окружения в контейнере
-u Пользователь:группа под которым должен быть запущен контейнер
-v Смонтировать в контейнер файл или каталог хост-системы
-p Пробросить порт(ы) контейнера - <порт хост-системы>:<порт контейнера> (--publish=[])
--entrypoint Заменить дефолтную команду из ENTRYPOINT файла Dockerfile
Примечание
Чтобы отсоединить TTY без остановки контейнера нажмите Ctr+P + Ctrl+Q.
Создать и запустить Docker контейнер в режиме демона с пробросом SSH порта:
docker run -itd -p 127.0.0.1:221:22 ubuntu
Создать и запустить контейнер с последующим удалением этого контейнера после остановки (полезно для отладки):
docker run -i -t --rm ubuntu bash
Запустить остановленный контейнер интерактивно:
docker start -i CONTAINER_ID
Подключиться к демонизированному контейнеру:
docker attach CONTAINER_ID
Команды Docker
Usage: docker [OPTIONS] COMMAND [arg...]
docker daemon [ --help | ... ]
docker [ --help | -v | --version ]
A self-sufficient runtime for containers.
Options:
--config=~/.docker Location of client config files
-D, --debug=false Enable debug mode
--disable-legacy-registry=false Do not contact legacy registries
-H, --host=[] Daemon socket(s) to connect to
-h, --help=false Print usage
-l, --log-level=info Set the logging level
--tls=false Use TLS; implied by --tlsverify
--tlscacert=~/.docker/ca.pem Trust certs signed only by this CA
--tlscert=~/.docker/cert.pem Path to TLS certificate file
--tlskey=~/.docker/key.pem Path to TLS key file
--tlsverify=false Use TLS and verify the remote
-v, --version=false Print version information and quit
Commands:
attach Attach to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on a container or image
kill Kill a running container
load Load an image from a tar archive or STDIN
login Register or log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
network Manage Docker networks
pause Pause all processes within a container
port List port mappings or a specific mapping for the CONTAINER
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart a container
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save an image(s) to a tar archive
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop a running container
tag Tag an image into a repository
top Display the running processes of a container
unpause Unpause all processes within a container
volume Manage Docker volumes
wait Block until a container stops, then print its exit code
Run 'docker COMMAND --help' for more information on a command.
#docker