Инструменты пользователя

Инструменты сайта


технология_docker

Это старая версия документа.


Технология Docker

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

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

Установка

Debian

# apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -

# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

# apt update

# apt install docker-ce

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

# systemctl status docker

# docker info

# docker run hello-world

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

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

# docker images

# docker ps -a
# docker container ls -a

# 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

«Забыли» сделать скрипт «выполнимым» нажали 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

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 .

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

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 --rm -itd -v /var/www/:/var/www/ -p 8000:80 test/webd

server# docker top webd01

server# docker inspect webd01 

server# wget -qO - http://172.17.0.2/index.html

server# docker port webd01

server# wget -qO - http://localhost:8000/index.html

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

server# docker attach webd01 

webd01# ps ax

Ctrl+P, Q(still holding Ctrl)

server# docker stop webd01 

server# docker inspect webd01 

server# docker start webd01 

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

# docker search sftp

# chown -R 10001 /var/www

# docker run --name sftp01 --rm -v /var/www:/home/user1/www -p 2222:22 -d atmoz/sftp user1:password1:10001

# docker exec -it sftp01 bash

Ctrl+D

# docker top sftp01

docker-compose

# 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/user1/www
    command: user1:password1:10001
# docker-compose build

# docker-compose up -d

# docker-compose down

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

docker.corp14.un:~/cowsay# cat Dockerfile
FROM debian:buster

RUN apt update && apt install -y cowsay fortune fortunes-ru locales dialog && echo 'ru_RU.UTF-8 UTF-8' > /etc/locale.gen && locale-gen

ENV LANG ru_RU.UTF-8

COPY entrypoint.sh /

ENTRYPOINT ["/entrypoint.sh"]
docker.corp14.un:~/cowsay# cat entrypoint.sh
#!/bin/bash

/usr/games/fortune | /usr/games/cowsay

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

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

# 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.1573211895.txt.gz · Последние изменения: 2019/11/08 14:18 — val