# install docker
sudo apt-get install -y docker.io
# start service && add to start automatically at boot
systemctl start docker
systemctl enable docker
# check
docker run hello-world
# install docker-compose (in python-pip)
pip install docker-compose
# check (show version)
docker-compose -v
По умолчанию, docker-compose up не будет перестраивать контейнеры, если они уже есть на хосте. Чтобы заставить докер делать это, нужно использовать аргумент –build. Обычно это нужно, когда сторонние зависимости проекта меняются или меняется докерфайл. Docker умеет кэшировать слои и не будет перестраивать контэйнер, если ничего не поменялось. При использовании –build повсеместно, вы, возможно, потеряете несколько секунд при старте приложения. Но, при этом вы никогда не столкнетесь с магическими проблемами запуска новой версии приложения со старыми зависимостями.
Команда docker-compose основывается на принципе «один каталог на каждый контейнер». Вы можете иметь несколько групп Docker-контейнеров, работающих на одном компьютере — просто создайте один каталог для каждого контейнера и один файл docker-compose.yml для каждого контейнера внутри его каталога.
# в каталоге проекта:
docker-compose stop
docker-compose rm -f
docker-compose up -d
Посмотреть открытые для проброса порты:
docker ps
или:
docker port <КОНТЕЙНЕР> <НОМЕР_ПОРТА>
Пробросить порт при запуске конейнера:
docker run -p <ПОРТ_УЗЛА>:<ПОРТ_КОНТЕЙНЕРА>
По-умолчанию пробрасываемый порт доступен на всех интерфейсах узла. Ограничить доступ задав IP адрес интерфейса:
docker run -p <IP_ИНТЕРФЕЙСА>:<ПОРТ_УЗЛА>:<ПОРТ_КОНТЕЙНЕРА>
Можно пробрасывать UDP порт:
docker run -p <ПОРТ_УЗЛА>:<ПОРТ_КОНТЕЙНЕРА>/udp
Порт можно пробросить с помощью правыила DNAT в iptables:
iptables -t nat -A DOCKER -p tcp --dport <ПОРТ_УЗЛА> -j DNAT --to-destination <IP_КОНТЕЙНЕРА>:<ПОРТ_КОНТЕЙНЕРА>
#iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
Здесь DOCKER - цепочка правил создаваемая при запуске сервиса docker.