пятница, 27 февраля 2015 г.

Docker основные команды

docker run
  --cpu-shares=
  --memory=
docker run -it ubuntu:14.04 /bin/bash
-i - interective
-t - подключить tty 
ubuntu - repository name
14.04 - image name
/bin/bash - команда которую выполнить при старте контейнера PID1 (родитель всех процессов - в Linux это init)

docker run -d ubuntu:14.04 /bin/nginx start
-d detache запустить в фоне




docker ps - текущие работающие контейнеры
docker ps -a - все контейнеры, которые запущены сейчас и были запущенны за время работы демона docker, но в данный момент остановлены.
docker ps -l
-l - last. увидеть последний запущенный контейнер

docker top

docker inspect  

docker attach HASH_OR_NAME

docker images

docker stop       -    отправляет SIGTERM работающему процессу внутри контейнера

docker kill         -    отправляет SIGKILL работающему процессу внутри контейнера
docker kill -s <SIGNAL> - но килом можно отправить и другие сигналы в процес.

docker info - увидеть сколько контейнеров готово к запуску(запущены или можно запустить), сколько всего имеджей(больше чем контейнеров, потому что некоторые прилетели слоями для контейнеров).

docker history HASH_OR_NAME
docker logs HASH_OR_NAME
docker logs -f HASH_OR_NAME - follow как в tail


Ctrl + P + Q отключиться от контейнера, но оставить его работать в фоне



В контейнерах лучше всего выполнять не больше одного процесса, но иногда нужно больше.
phusion - команда которая кастомизирует имиджи Ubuntu под необходимые задачи. Вроде как их контейнерам можно доверять.

Поэтому чаще всего docker attach не имеет смысла, потому что в контейнере будет запущено под pid1 какая-нибудь апликация, например nginx. Поэтому мы может подключиться к системным Nanmespace, для этого нужно узнать под каким pid в ОС запущен контейнер и это не тот идентификатор, по котором мы его определяем на docker платформе. Для этого:
root@some:~# docker inspect 8b2dakj | grep Pid
     "Pid": 1923,
root@some:~# 
root@some:~# 
root@some:~# 
root@some:~# nsenter -m -u -n -p -i -t 1923 /bin/bash
-m mount namespace
-u uts(Unix Time-Sharing - multiprogramming&multitasking) namespace
-n network namespace -p process namespace
-i ipc(Inter-Process Communication) namespace
-t target with /bin/bash запустить внутри шелл 

Но наиболее рекомендованный способ, потому что не всегда линукс будет иметь установленный nsenter:

docker exec -it containerName_or_Hash /bin/bash

Но даже если не установлен nsenter(или в текущем репозиторие дистрибудтива он устаревший), мы может по-быстрому его запустить с помощью docker имиджа:
root@hostos:~# docker run -v /usr/local/bin:/target jpetazzo/nsenter
Installing nsenter to /target
Installing docker-enter to /target

скомпилированные бинарники окажутся в директории /usr/local/bin :)

В проэктике jpetazzo/nsenter есть также скрипт который содержит длинный вызов nsenter с ключами, он тоже устанавливается в с nsenter из этого докер имиджа:)
docker-enter containerName_or_Hash


docker build -t <image-tag> .


docker tag 1b14ob coreer/myfirstbuild
docker push coreer/myfirstbuild

docker rmi <HASH_OR_NAME1> < HASH_OR_NAME2>   -- remove images
docker start -ai <HASH_OR_NAME1>    -- запустить созданный контейнер  перезапустить отработавший свой  процесс PID1 контейнер, при этом мы подсоединяем текущий шелл к вводу/выводу контейнера, через которые мы можем наблюдать вывод и посылать ввод, пока процесс контейнера не закончит работу. Это подходит для каких-нибудь апликаций у которых задача: "сделать и остановится".

-a, --attach                  Attach STDOUT/STDERR and forward signals
-i, --interactive             Attach container's STDIN
docker create - создает из образа контейнер, который можно запускать.
docker run = docker create + docker start. Когда в работающем контейнере происходят изменения файловой системы то, считается что в этот момент появляются Thin R/W layer, контейнера, из из него можно создать образ. Так мы Thin R/W layer как бы фиксируем - и не боимся, что потеряем необходимые нам изменения в контейнере.
docker export - Export a container’s filesystem as a tar archive

Комментариев нет:

Отправить комментарий