yum search docker # узнать точное название пакета с docker
yum install docker-ce # или apt или zypper
yum install docker-engine # в старых версиях
systemctl enable docker
systemctl start docker
df /var/lib/docker # хранилище для docker images и volumes
lvcreate -T -L 15G -n dockerpool vg0 # lvol для докерного thin-pool-хранилища
/etc/docker/daemon.json :
{
"insecure-registries": ["192.168.1.0/24"], // репозитории без https
"registry-mirrors": ["http://192.168.1.11:5000"], // локальный репозиторий
"hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"], // доступ клиента
"storage-driver": "devicemapper",
"storage-opts": ["dm.thinpooldev=/dev/mapper/vg0-dockerpool",
. . .
"default-address-pools": // диапазон IP для контейнеров
[{"base":"192.168.5.0/24","size":24}] // вместо дефолтного 172.1[7-9].*.*
}
systemctl restart docker
# В RH7.3 атрибут "hosts" в daemon.json не совместим с systemd, поэтому для RH7.3
# в /etc/systemd/system/multi-user.target.wants/docker.service исправить переменную
# ServiceExec=-H fd:// -H tcp://0.0.0.0:2376
docker -H tcp://127.0.0.1:2376 info # доступ клиента по сети из командной строки или
export DOCKER_HOST=tcp://127.0.0.1:2376
-t --tty
-i --interactive
-d --backgorund (daemon mode)
--rm remove after exit
--name name
-u user:group задать uid и группу для docker-пользователя (вместо root)
--group-add group дополнительная группа для docker-пользователя
docker run --name busy1 -ti --rm busybox /bin/sh # запуск контейнера в терминале
docker run -d --name www1 nginx # запуск контейнера в бэкграунд
docker container ps # стартованные контейнеры
docker container ps -a # стартованные и остановленные контейнеры
docker container ps -aq # компактная выдача имен контейнеров
docker container top containername
docker container stats container1 container2 container3
docker container logs container1 -f # лог /var/lib/containers/cont*/cont_id...-json.log
docker exec www1 ip addr show # старт команды в запущенном контейнере
docker container start www1 # оживить остановленный контейнер
docker container stop -t 20 www1 # сперва SIGSTOP, через 20 сек SIGKILL
docker container kill -s SIGSTOP www1 # послать в контейнер сигнал
docker container rm www1 # -f - удалить даже стартованный, -v вместе с volumes
Копирование файлов в контейнеры
docker container cp www1:/etc/nginx/nginx.conf .
docker container cp www1:/etc/nginx/ . # реккурсивно директорию
docker container cp data/ www1:/etc/nginx # реккурсивно в директорию
docker container cp data/. www1:/etc/nginx # реккурсивно на директорию
docker container exec www1 ls -al /etc/nginx
docker container cp www1:/etc/ - > www1-etc.tar # выгрузка в TAR
docker container cp - www1:/ < www1-etc.tar # закачка из TAR
docker container info www1
docker container inspect www1 # полный и выборочный JSON
docker container inspect -f 'Container {{.Name}} has pid {{.State.pid}}' www1
image - образ корневой файловой системы контейнера, скачивается с репозитория
состоит из layers - TAR-архивов смонтированных последовательно в union-fs
последний слой - "песочница", обеспечивает RW
docker image history python # история формирования слоев в image
docker image ls
docker image rm nginx # удалить image (если с него не созданы контейнеры)
docker rmi -f nginx # удалить image убив все созданные с него контейнеры
docker image rm rep.host.name/reponame/imagename
docker search строка # искать по строка
docker search -s 3 ssh # искать image ssh с 3 звездами
Списки версий (tags) имаджa ubuntu в репозитории
curl https://registry.hub.docker.com/v1/repositories/ubuntu/tags
# скачать image
docker image pull nginx
docker image pull nginx:latest
docker image pull fedora:22
docker image pull registry.hub.docker.com/fedora:23
docker image pull server1.example.com:5000/bcroft/proj_red:v2
docker diff www1 # распечатать содержимое "песочницы" - измененные файлы
# закоммитить текущий RW-слой контейнера в image tar-layer
docker container commit -a "Author" -m "Add service" mega_app:latest
docker commit -c 'CMD ["python", "app2.py"]' -c 'ENV ver=2'
Хост имеет дефолтный бридж docker0, контейнер получает индивидуальный
интерфейс подключенный к docker0, в подсети бриджа.
Контейнер имеет прямую связь с другими контейнерами, и выход во внешнюю сеть
через роутинг+маскарадинг
docker0 172.17.0.1/16
container1:eth0 172.17.0.2/24
container12:eth0 172.17.0.13/24
brctl show docker0
docker inspect -f '{{ .NetworkSettings.IPAddress }}' web1 # адрес контейнера
/etc/sysconfig/docker-network # IP docker0, диапазон IP для контейнеров
DOCKER_NETWORK_OPTIONS=
--bip=172.17.0.1/16 IP бриджа docker0
--fixed-cidr=172.17.0.0/16 диапазон IP для раздачи контейнерам
--ip=0.0.0.0 внешние порты контейнеров при пробросе биндить на этот IP
Сетевые опции для container run
# управление /etc/hosts, resolv.conf
-h|--hostname= Set container hostname
--add-host=[] Add extra entries to /etc/hosts
--dns=[] Specify DNS server for /etc/resolv.conf
--dns-search=[] DNS search path for resolv.conf
# управление пробросом портов
-p 8000:80 проброс контейнерного порта 80 на хостовой 8000
-p 8000:IPaddress:80 проброс порта на внешний IP:8000 /* не работает */
-p :80 проброс порта на какой получится внешний порт
-p 7514:514/udp проброс контейнерного UDP-порта
-P проброс всех экспознутых портов "куда-нибудь"
docker container port web1 # узнать куда пробрасываются порты
443/tcp -> 0.0.0.0:32768
80/tcp -> 0.0.0.0:32769
# управление файрволлом и роутингом контейнеров во всем dockerd
dockerd \
--iptables=true Включать штатные iptables для контейнеров
--icc=true Inter-Container traffic is permitted
--ip-forward=true Роутить контейнер наружу
--ip-masq=true Маскарадить контейнерный IP
--ip=0.0.0.0 IP хоста для биндинга пробрасываемых publish-портов
Управление сетками-бриджами
docker container run --net=bridge nginx # подцепиться в docker0
docker container run --net=none nginx # только localhost
docker container run --net=host nginx # работать с хостовым интерфейсом
docker container run --net=container:web1 nginx # сеть другого контейнера
docker network create net1 # создать кастомный бридж
--driver [bridge|overlay|macvlan]
--scope [swarm|local] кто может пользоваться этой сетью
--ingress дефолтная ingress-сетка для балансировщика в swarm
--internal не роутить overlay-сеть в интернет
--subnet задать подсеть бриджа
--gateway ip-бриджа
--ip-range диапазон, в котором назначаются IP контейнерам
docker network create \
--subnet=192.168.50.0/24 --gateway=192.168.50.1 \
--ip-range 192.168.50.128/27 \
-o com.docker.network.driver.mtu=1400 \
-о com.docker.network.bridge.host_binding_ipv4=0.0.0.0 \
-o com.docker.network.bridge.name=docker_private01 \
-o com.docker.network.bridge.enable_icc=true \
-o com.docker.network.bridge.enable_ip_masquerade=false \
private01
# запустить контейнер, воткнув в кастомную сеть
docker container run --net=net1 --name web1 nginx
# прицепить к уже запущенному контейнеру web2 дополнительный интерфейс
docker network connect net1 --ip 192.168.50.45 web2
docker network disconnect net1 web2 # отцепить
В firewall на всех нодах кластера должны быть открыты порты:
tcp:2377 swarm-API
tcp,udp:7946 overlay-control-communication
udp:4789 overlay-transport
docker network create -d overlay --attachable my-overlay
[ --opt encrypted ] добавить чтоб транспорт шифровался IPSEC
# пересоздание docker_gwbridge
docker network create \
--subnet 10.200.0.0/16 \
--opt com.docker.network.bridge.name=docker_gwbridge \
--opt com.docker.network.bridge.enable_icc=false \
--opt com.docker.network.bridge.enable_ip_masquerade=true \
docker_gwbridge
# пересоздание ingress-сетки
docker network rm ingress
docker network create --driver overlay --ingress \
--subnet=10.11.0.0/16 --gateway=10.11.0.2 \
--opt com.docker.network.driver.mtu=1200 \
my-ingress
docker swarm init # --advertise-addr 10.100.0.254:2377 чтоб слушать конкретный IP
docker swarm join-token worker # показать токен для входа в swarm как worker
docker swarm join-token manager -q # показать токен для входа в swarm как manager
# присоединение в swarm
docker swarm join --token токен... server1:2377 # управлялка swarm'oм садится на :2377
docker swarm leave # покинуть swarm
docker swarm init --force-new-cluster # оживить swarm, потерявший кворум
docker node ls # список нод в swarm
docker node rm node-id # удалить ноду из swarm
docker node demote station12.example.com # разжаловать в воркер'ы
docker node promote station12.example.com # повысить в manager'ы
docker node update --avalability active # можно запускать тут контейнеры
docker node update --avalability pause # не запускать (АКА quarantine)
docker node update --avalability drain # не запускать и убить (AKA maintance)
docker service create -p 8080:80 --replicas 4 -name www3 apache
docker service rm www3
Популярность: 1, Last-modified: Wed, 07 Sep 2022 13:03:18 GmT