User Tools

Site Tools


технология_docker

This is an old revision of the document!


Технология Docker

Методические идеи

  • Добавить запись в журнал передаваемых скрипту webd заголовков
  • Использовать переменную окружения, передаваемую контейнеру для включения/выключения режима отладки/записи в журнал

Установка

Ubuntu

# apt install docker.io

Debian

Debian 10

# apt install ca-certificates curl gnupg lsb-release

# curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

# apt update

# apt install docker-ce docker-ce-cli containerd.io

Тестирование установки

# systemctl status docker

# docker info

# docker run hello-world

Предоставление прав непривилегированным пользователям

# usermod -aG docker gitlab-runner

Работа с образами и контейнерами

Обзор и удаление

# docker images

# docker ps -a
# docker container ls -a

# docker start -i NNNNNNNNNNN

# docker rm $(docker ps -aq)

# docker rm $(docker ps -q -f status=exited)

# docker rmi hello-world

# docker rmi -f $(docker images -aq)

# docker system prune -a --volumes

Создание контейнера для приложения вручную

server# docker run -it --name webd --hostname webd debian bash

webd# apt update && apt install file procps nano
webd/# cat start.sh
#!/bin/sh

/etc/init.d/inetutils-inetd start

/bin/bash

“Забыли” сделать скрипт start.sh “выполнимым” нажали Ctrl+D

server# docker diff webd

server# docker start webd

server# docker attach webd

root@webd:/# chmod +x start.sh

Ctrl+D

server# docker commit webd test/webd

Создание контейнера для приложения с использованием Dockerfile

server# mkdir /root/webd/ && cd /root/webd/

server# mv /usr/local/sbin/webd .

server# ###tar -cvzf www.tgz -C /var/ www/

server# cat start.sh
...см. выше...

server# cat Dockerfile
#FROM debian:buster
FROM debian:bullseye

RUN apt-get update && apt-get install -y inetutils-inetd file && echo 'www stream tcp nowait root /usr/local/sbin/webd webd' > /etc/inetd.conf

COPY start.sh /
COPY webd /usr/local/sbin/webd
### ADD www.tgz /var/

ENTRYPOINT ["/start.sh"]
# docker build -t test/webd .

# docker history test/webd

Запуск в режиме демона и подключение к контейнеру

1-й раз

server# docker run --name webd01 --hostname webd01 -itd -v /var/www/:/var/www/ -p 8000:80 test/webd /start.sh

2-й раз задан entrypoint (можно добавить ключ --rm для удаления контейнера после остановки)

server# docker run --name webd01 --hostname webd01 -itd -v /var/www/:/var/www/ -p 8000:80 test/webd

server# docker top webd01

server# ps axw | grep inetd
server# cat /proc/<PID>/cgroup

server# docker inspect webd01

server# docker inspect webd01 -f {{.NetworkSettings.IPAddress}}

server# wget -qO - http://172.17.0.2/

server# docker port webd01

server# wget -qO - http://localhost:8000/

host browser -> http://server.corpX.un:8000/

server# docker attach webd01 

webd01# ps ax
  или
webd01# ls /proc/
webd01# cat /proc/1/cmdline

Ctrl+P, Q(still holding Ctrl)

server# docker stop webd01

server# docker inspect webd01

server# docker start webd01

host browser -> http://server.corpX.un:8000/

server# docker stop webd01 && docker rm webd01

Микросервисы

# docker search sftp

# chown -R 10003 /var/www

# docker run --name sftp01 -v /var/www:/home/user3/www -p 2222:22 -d atmoz/sftp user3:password3:10003

# docker exec -it sftp01 bash

Ctrl+D

# docker top sftp01

# sftp -P 2222 user3@localhost
# docker logs sftp01

# docker stop sftp01

docker-compose

# apt install docker-compose

debian11# service docker start

# cat docker-compose.yml
version: "3"
services:
  webd:
    image: test/webd
    build: webd/
    ports:
      - "8000:80"
    volumes:
      - /var/www/:/var/www/
    tty: true
  sftp:
    image: atmoz/sftp
    ports:
      - "2222:22"
    volumes:
      - /var/www/:/home/user3/www
    command: user3:password3:10003
# docker-compose build

# docker-compose up -d

# docker-compose stop

# docker-compose start

# docker-compose down

# docker-compose rm    #Возможно, не требуется

Дополнительные материалы

Локальный репозиторий

* Docker Registry

gate# docker run -d -p 5000:5000 -v /root:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/gate.crt -e REGISTRY_HTTP_TLS_KEY=/certs/gate.key --name registry registry:2

node1# cp ~vagrant/gate.crt /etc/docker/certs.d/gate.corp13.un\:5000/ca.crt

node1# service docker restart

node1# docker tag val/webd:latest gate.corp13.un:5000/webd

node1# docker push gate.corp13.un:5000/webd

node1# curl --insecure -X GET https://gate.corp13.un:5000/v2/_catalog
{"repositories":["webd"]}

GitLab репозиторий

# cat /etc/docker/daemon.json
...
{
  "insecure-registries" : ["server.corpX.un:5000"]
}
...
# service docker restart

# docker login http://server.corpX.un:5000

# docker tag test/webd server.corpX.un:5000/student/webd
# docker tag test/webd server.corpX.un:5000/student/webd:wwwdir

# docker push server.corpX.un:5000/student/webd
# docker push server.corpX.un:5000/student/webd:wwwdir
...
# docker run --name webd01 --hostname webd01 -itd -p 8000:80 server.corp13.un:5000/student/webd:wwwdir

Старая версия

Работа с образами

# docker search debian

# docker pull debian

# docker images

# docker commit debian_cont_01 debian_img_01

# docker rmi debian_img_01

Работа с контейнерами

  • ключи -i -t необходимы для возможности интерактивно (attach) подключаться к запущенному контейнеру
# docker create -i -t --name debian_cont_01 debian

# docker ps -a
# docker container ls -a

# docker update --restart=always debian_cont_01
# docker start debian_cont_01

# docker ps
# docker container ls

# docker inspect debian_cont_01

# docker top debian_cont_01

# docker attach debian_cont_01

:/# apt update

:/# apt install iputils-ping

:/# ping -c1 ya.ru
Ctrl+P, Q(still holding Ctrl)

# docker stop debian_cont_01

# docker rm debian_cont_01

# docker rm $(docker ps -aq)

Работа с сетью

Управление сетями

# docker network ls

# docker network create --subnet=192.168.200+X.0/24 corpX_dmz

# docker run -h mail.corpX.un --net corpX_dmz --ip 192.168.200+X.10 -i -t --name debian_cont_01 debian

# docker network inspect corpX_dmz

Назначение публичного ip для контейнера

Вариант 1
Вариант 2

Использование nat/dnat

  • присваиваем публичные ip адреса интерфейсу host машины и настраиваем NAT/DNAT связывающие публичные ip host машины со статическими ip контейнеров
# ip addr add 172.16.1.100+X dev eth2

# iptables -t nat -A POSTROUTING -o eth2 -s 192.168.100+X.10 -j SNAT --to-source 172.16.1.100+X
# iptables -t nat -A PREROUTING -i eth2 --destination 172.16.1.100+X -j DNAT --to-destination 192.168.100+X.10

HEARTBEAT и Docker

nodeN# cat haresources
node1.corpX.un drbddisk Filesystem::/dev/drbd0::/disk2::ext4 docker
технология_docker.1656334555.txt.gz · Last modified: 2022/06/27 15:55 by val