This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| projects:zibaldone:linux:docker [2021/12/17 09:00] – [install] scipio | projects:zibaldone:linux:docker [2023/04/19 08:08] (current) – [docker registry (public)] sscipioni | ||
|---|---|---|---|
| Line 3: | Line 3: | ||
| ===== install ===== | ===== install ===== | ||
| - | < | + | < |
| - | apt-get install ca-certificates curl gnupg lsb-release | + | apt-get install |
| curl -fsSL https:// | curl -fsSL https:// | ||
| - | echo "deb [arch=$(dpkg --print-architecture) signed-by=/ | + | echo "deb [arch=$(dpkg --print-architecture) signed-by=/ |
| $(lsb_release -cs) stable" | $(lsb_release -cs) stable" | ||
| apt update | apt update | ||
| - | apt-get install docker-ce docker-ce-cli containerd.io | + | apt-get install |
| mkdir / | mkdir / | ||
| curl -SL https:// | curl -SL https:// | ||
| Line 19: | Line 19: | ||
| usermod -aG docker hass | usermod -aG docker hass | ||
| </ | </ | ||
| + | |||
| + | / | ||
| + | <code | download> | ||
| + | { | ||
| + | " | ||
| + | [ | ||
| + | {" | ||
| + | ] | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== reset to factory and restart ===== | ||
| + | |||
| + | <code | download> | ||
| + | # if swarm | ||
| + | docker swarm leave --force | ||
| + | |||
| + | systemctl stop docker | ||
| + | rm -fR / | ||
| + | ip l delete docker_gwbridge | ||
| + | ip l delete docker0 | ||
| + | # and other bridges | ||
| + | systemctl start docker | ||
| + | </ | ||
| + | |||
| ===== deploy ===== | ===== deploy ===== | ||
| Line 130: | Line 155: | ||
| docker run --rm -it -v < | docker run --rm -it -v < | ||
| docker volume rm < | docker volume rm < | ||
| + | </ | ||
| + | |||
| + | ===== multi platform build ===== | ||
| + | |||
| + | Multi platform build need a docker registry, local or remote (see below) | ||
| + | |||
| + | create a docker builder or use existing one | ||
| + | < | ||
| + | NAME=builder1 | ||
| + | docker buildx use $NAME || docker buildx create --use --name $NAME --driver-opt network=host | ||
| + | </ | ||
| + | |||
| + | build from a Dockerfile and push to local registry | ||
| + | < | ||
| + | REGISTRY=localhost: | ||
| + | docker buildx build --platform=linux/ | ||
| + | </ | ||
| + | ===== docker registry (private) ===== | ||
| + | |||
| + | create local image and tag with remote registry url | ||
| + | < | ||
| + | # get image from official docker registry | ||
| + | docker pull docker.io/ | ||
| + | |||
| + | # tag | ||
| + | docker tag hello-world docker.csgalileo.org/ | ||
| + | </ | ||
| + | |||
| + | create credentials in ~/ | ||
| + | < | ||
| + | docker login docker.csgalileo.org | ||
| + | </ | ||
| + | |||
| + | push | ||
| + | < | ||
| + | docker push docker.csgalileo.org/ | ||
| + | </ | ||
| + | |||
| + | get remote info with aur/reg arch program | ||
| + | < | ||
| + | reg ls docker.csgalileo.org | ||
| + | reg digest docker.csgalileo.org/ | ||
| + | </ | ||
| + | |||
| + | docker registry on localhost | ||
| + | <file yaml docker-compose.yml> | ||
| + | services: | ||
| + | registry: | ||
| + | restart: no | ||
| + | image: registry:2 | ||
| + | ports: | ||
| + | - 5000:5000 | ||
| + | volumes: | ||
| + | - ./ | ||
| + | </ | ||
| + | |||
| + | ===== docker registry (public) ===== | ||
| + | |||
| + | retag local builded image to remote image | ||
| + | <code | download> | ||
| + | docker tag galileo/ | ||
| + | </ | ||
| + | |||
| + | push to docker.io | ||
| + | <code | download> | ||
| + | docker push scipioit/ | ||
| + | </ | ||
| + | |||
| + | ===== remote display via ssh ===== | ||
| + | |||
| + | scenario: connect to remote docker host via ssh and run X11 GUI on client ssh | ||
| + | |||
| + | on docker host sshd edit / | ||
| + | < | ||
| + | X11Forwarding yes | ||
| + | X11DisplayOffset 10 | ||
| + | X11UseLocalhost no | ||
| + | </ | ||
| + | |||
| + | on docker host create this helper script | ||
| + | <code bash | set-display.sh> | ||
| + | XAUTH=/ | ||
| + | HOSTIP=$(ip -o route get to 8.8.8.8 | sed -n ' | ||
| + | |||
| + | AUTH_COOKIE=$(xauth list ${DISPLAY} | awk ' | ||
| + | DISPLAY_NUMBER=$(echo $DISPLAY | cut -d. -f1 | cut -d: -f2) | ||
| + | export DISPLAY=${HOSTIP}: | ||
| + | touch $XAUTH | ||
| + | xauth -f $XAUTH add ${DISPLAY} MIT-MAGIC-COOKIE-1 ${AUTH_COOKIE} | ||
| + | </ | ||
| + | |||
| + | session from client | ||
| + | <code bash> | ||
| + | ssh -X < | ||
| + | source set-display.sh | ||
| + | docker run --rm -e DISPLAY=$DISPLAY -v $XAUTH:/ | ||
| </ | </ | ||
| Line 138: | Line 259: | ||
| * [[https:// | * [[https:// | ||
| - | init | + | / |
| < | < | ||
| - | docker swarm init --advertise-addr 185.91.188.93 | + | { |
| + | " | ||
| + | [ | ||
| + | {" | ||
| + | ] | ||
| + | } | ||
| </ | </ | ||
| + | |||
| + | init | ||
| + | < | ||
| + | docker swarm init --advertise-addr 10.244.0.5 --default-addr-pool 172.16.8.0/ | ||
| + | </ | ||
| convert web network scoped " | convert web network scoped " | ||
| - | < | + | < |
| docker network rm web | docker network rm web | ||
| docker network create -d overlay web | docker network create -d overlay web | ||
| Line 152: | Line 283: | ||
| deploy compose as swarm | deploy compose as swarm | ||
| - | < | + | < |
| cd ~/traefik | cd ~/traefik | ||
| docker stack deploy -c docker-compose.yml hosting3 | docker stack deploy -c docker-compose.yml hosting3 | ||
| Line 167: | Line 298: | ||
| # on manager check nodes | # on manager check nodes | ||
| docker node ls | docker node ls | ||
| - | |||
| </ | </ | ||
| - | |||
| - | |||
| assign label to nodes | assign label to nodes | ||
| Line 178: | Line 306: | ||
| n4z6nb6c8xi6el63a6b0vflyv * | n4z6nb6c8xi6el63a6b0vflyv * | ||
| jen361j71yr6k96zrhx7x7b6a | jen361j71yr6k96zrhx7x7b6a | ||
| - | |||
| docker node update --label-add type=jibri jen361j71yr6k96zrhx7x7b6a | docker node update --label-add type=jibri jen361j71yr6k96zrhx7x7b6a | ||
| Line 200: | Line 327: | ||
| docker service update --constraint-add ' | docker service update --constraint-add ' | ||
| </ | </ | ||
| - | |||
| show docker services across nodes | show docker services across nodes | ||
| Line 211: | Line 337: | ||
| docker node ls -q | xargs docker node inspect -f '{{ .ID }} [{{ .Description.Hostname }}]: {{ range $k, $v := .Spec.Labels }}{{ $k }}={{ $v }} {{end}}' | docker node ls -q | xargs docker node inspect -f '{{ .ID }} [{{ .Description.Hostname }}]: {{ range $k, $v := .Spec.Labels }}{{ $k }}={{ $v }} {{end}}' | ||
| + | </ | ||
| + | |||
| + | show service status across nodes | ||
| + | < | ||
| + | alias lsd=' | ||
| + | </ | ||
| + | |||
| + | rebalance services across nodes after a node outage | ||
| + | < | ||
| + | alias rebalance=' | ||
| + | </ | ||
| + | |||
| + | drain a node from containers and migrate to others | ||
| + | < | ||
| + | docker node update --availability drain < | ||
| + | |||
| + | # re-enable node after maintenance | ||
| + | docker node update --availability active < | ||
| + | </ | ||
| + | |||
| + | get services using a particular network ' | ||
| + | < | ||
| + | docker network inspect --verbose web | jq ' | ||
| + | </ | ||
| + | |||
| + | get ip allocation in docker networks | ||
| + | < | ||
| + | docker run -it --rm -v / | ||
| </ | </ | ||