Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ FreeBSD and Nix ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Знакоство с Docker


 

Знакоство с Docker


Установка и ознакомление с docker на Centos описывал тут:
http://snakeproject.ru/rubric/article.php?art=centos_docker_07.2018


1. Базовые команды


Инициализируем новый контейнер с именем хоста и выйдем:
docker run -h centos_dev -it centos bash
[root@centos_dev /]# exit


Так-же видим присвоенное имя контейнера gifted_feistel:
docker ps -a
CONTAINER ID IMAGE  COMMAND CREATED       STATUS                   PORTS NAMES
9f6fd3104bf9 centos "bash"  6 seconds ago Exited (0) 2 seconds ago       gifted_feistel


Получить информацию о контейнере gifted_feistel:
docker inspect gifted_feistel


Удалим контейнер:
docker stop gifted_feistel
docker rm gifted_feistel


Имя генерируется автоматически, зададим руками:
docker run --name centos_dev -it centos bash


Увидеть список измененных файлов в контейнере:
docker diff centos_dev
C /root
A /root/.bash_history


Вывести историю контейнера centos_dev:
docker logs centos_dev
[root@31ca81cb70ae /]# exit
exit


Удалить все контенеры:
docker rm -v $(docker ps -aq -f status=exited)


Ищем интересующий нас образ на докерхабе https://hub.docker.com/ , например apache
И берем к примеру этот:
docker pull bitnami/apache


Видим его в списке:
docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
hello-world               latest              fce289e99eb9        2 weeks ago         1.84kB
bitnami/apache            latest              703f5bb529ff        2 hours ago         159MB
centos                    latest              1e1148e4cc2c        5 weeks ago         202MB


Запустим в фоновом режиме -d:
docker run -d bitnami/apache


Смотрим, на каких портах он заработал:
docker ps
CONTAINER ID IMAGE          COMMAND                CREATED        STATUS       PORTS              NAMES
5feef699435f bitnami/apache "/app-entrypoint.sh …" 10 seconds ago Up 9 seconds 8080/tcp, 8443/tcp nervous_mcnulty


Пробросим порт 8000 с нашей машины на порт 8080 контейнера:
docker stop nervous_mcnulty
docker run -d -p 8000:8080 bitnami/apache


Смотрим, на каких портах он заработал:
docker ps
CONTAINER ID IMAGE          COMMAND                CREATED       STATUS       PORTS                            NAMES
5e13e480cf2d bitnami/apache "/app-entrypoint.sh …" 3 seconds ago Up 2 seconds 8443/tcp, 0.0.0.0:8000->8080/tcp ecstatic_mcnulty


Проверяем:
http://127.0.0.1:8000

 

2. Создание своего образа на https://hub.docker.com/


Необходимо зарегистрироваться, на сайте Вы получите id и два репозитория (приватный и публичный)


Создаем контейнер:
docker run -it --name mynewapp --hostname mynewapp centos bash


Вносим какие-то изменения:

[root@mynewapp /]# vi /root/test.sh
#!/bin/bash
echo 'Test Message!'

[root@mynewapp /]# chmod +x /root/test.sh

[root@mynewapp /]# /root/test.sh
Test Message!

[root@mynewapp /]# ln -s /root/test.sh /usr/bin/testsh

[root@mynewapp /]# testsh
Test Message!

[root@mynewapp /]# exit
exit


Конвертируем контенер в образ (dockerid - id при регистрации, mynewapp - имя образа):
docker commit mynewapp dockerid/mynewapp

Появился образ в списке:
docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
dockerid/mynewapp         latest              17c2028a8455        20 seconds ago      272MB

Запуск и проверка (вместо bash укажем наше приложение):
docker run dockerid/mynewapp testsh
Test Message!

Запушить образ в https://hub.docker.com/ репозиторий:
docker push dockerid/mynewapp

Скачать запушенный образ с https://hub.docker.com/:
docker pull dockerid/mynewapp

Можно жобавить тэг при отправке через двоеточие:
docker pull dockerid/mynewapp:alfa
docker pull dockerid/mynewapp:beta

Если удалить образ локально на машине, и запустить, то он скачается:
docker run dockerid/mynewapp testsh

 

3. Docker файл


Является обычным текстовым файлом, содержащим инструкции для создания образа

Создадим директорию для проектов и файл:
mkdir /home/user/docker
touch /home/user/docker/Dockerfile


vi /home/user/docker/Dockerfile
#Инструкция используемого образа (1я инструкция, обязательна)
FROM centos

#RUN - команды внутри образа

RUN echo "#!/bin/bash" > /root/test.sh

RUN echo "echo 'Test Message!'" >> /root/test.sh

RUN chmod +x /root/test.sh

RUN ln -s /root/test.sh /usr/bin/testsh


Создадим образ:
cd /home/user/docker/

docker build -t dockerid/mynewapp .
Sending build context to Docker daemon  2.048kB
Step 1/5 : FROM centos
 ---> 1e1148e4cc2c
Step 2/5 : RUN echo "#!/bin/bash" > /root/test.sh
 ---> Running in 237352f5eeb0
Removing intermediate container 237352f5eeb0
 ---> 0e834429f33c
Step 3/5 : RUN echo "echo 'Test Message!'" >> /root/test.sh
 ---> Running in ccef25766117
Removing intermediate container ccef25766117
 ---> 8b3d865e6472
Step 4/5 : RUN chmod +x /root/test.sh
 ---> Running in 7395fbe03fe2
Removing intermediate container 7395fbe03fe2
 ---> f856dcc45e31
Step 5/5 : RUN ln -s /root/test.sh /usr/bin/testsh
 ---> Running in 271b75d94284
Removing intermediate container 271b75d94284
 ---> bfb604305a46
Successfully built bfb604305a46
Successfully tagged dockerid/mynewapp:latest


Можно запускать образ:
docker run dockerid/mynewapp testsh
Test Message!

Список образов пополнился:
docker ps -a
CONTAINER ID IMAGE             COMMAND  CREATED       STATUS                   PORTS NAMES
1ba70f0111a4 dockerid/mynewapp "testsh" 7 seconds ago Exited (0) 6 seconds ago       sharp_kilby


Указать точку входа в файле /home/user/docker/Dockerfile:
ENTRYPOINT ["testsh"]


Пересоздать образ:
docker build -t dockerid/mynewapp .
Sending build context to Docker daemon  2.048kB
Step 1/6 : FROM centos
 ---> 1e1148e4cc2c
Step 2/6 : RUN echo "#!/bin/bash" > /root/test.sh
 ---> Running in bc06e1e490c3
Removing intermediate container bc06e1e490c3
 ---> 0c27bf19a479
Step 3/6 : RUN echo "echo 'Test Message!'" >> /root/test.sh
 ---> Running in ee288e2d9d50
Removing intermediate container ee288e2d9d50
 ---> 2f4677d496d2
Step 4/6 : RUN chmod +x /root/test.sh
 ---> Running in 013c80c7e2df
Removing intermediate container 013c80c7e2df
 ---> b9a060ca3668
Step 5/6 : RUN ln -s /root/test.sh /usr/bin/testsh
 ---> Running in 59fe5b9c78ea
Removing intermediate container 59fe5b9c78ea
 ---> 4317ba3683de
Step 6/6 : ENTRYPOINT ["testsh"]
 ---> Running in eebd78b12e37
Removing intermediate container eebd78b12e37
 ---> eaef3d1ed2a6
Successfully built eaef3d1ed2a6
Successfully tagged dockerid/mynewapp:latest


Больше не нужно указывать testsh:
docker run dockerid/mynewapp
Test Message!


Добавить образ в репозиторий https://hub.docker.com/ :
docker push dockerid/mynewapp

 

4. Связи контейнеров


Настроим связь между контейнерами баз данных и админки


Загрузим и запустим образ MariaDB с https://hub.docker.com/ , где mysqlserver будет имя контейнера:
docker run --name mysqlserver -e MYSQL_ROOT_PASSWORD=321 -d mariadb


Загрузим и запустим в фоне образ adminer, где mysqlserver будет имя контейнера MariaDB:
docker run -d --link mysqlserver:db -p 8080:8080 adminer


Переходим:
http://127.0.0.1:8080/

Движок - MySQL
Сервер - db
Имя пользователя - admin
Пароль - 321

 

5. Docker-compose


Установка на Centos:
yum -y install docker-compose


Создадим с ранее созданным докерфайлом в /home/user, файл - docker-compose.yml (yml или yaml, без разницы)


С https://hub.docker.com/_/mariadb берем "Example stack.yml for mariadb":

# Use root/example as user/password credentials
version: '3.1'

services:

  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 321

  admindb:
    image: adminer
    restart: always
    ports:
      - 6080:8080


Как видим, используются образы для запуска mariadb и adminer
Имена db и adminer будут присвоены контейнерам, не надо путать с именами из docker run
restart: always - автоматический повторный запуск при остановке контейнера:
no - никогда
on-failure - при аварии
always - всегда


Находясь в директории с файлом произведем запуск:
docker-compose up


Проверяем:
http://127.0.0.1:6080/


Вывести список контейнеров, запущенных с помощью docker-compose:
docker-compose ps
     Name                   Command               State    Ports
----------------------------------------------------------------
user_admindb_1   entrypoint.sh docker-php-e ...   Exit 0
user_db_1        docker-entrypoint.sh mysqld      Exit 0

 

Связь Dockerfile и Docker-compose


Создадим пустуе папки:
mkdir db && mkdir adminer


Создаем докерфайлы:

vi db/Dockerfile
FROM mariadb


vi adminer/Dockerfile
FROM adminer


Заменяем образы на докерфайлы:

vi docker-compose.yml
version: '3.1'

services:

  db:
    build: ./db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 321

  admindb:
    build: ./adminer
    restart: always
    ports:
      - 7080:8080


Перестроим проек и запустим:
docker-compose build
docker-compose up


Проверяем:
http://127.0.0.1:7080

 

P.S.
Отдельное спасибо авторам проекта: https://dka-develop.ru/

Очень много материала изучено по их урокам на ютубе:
https://www.youtube.com/playlist?list=PLD5U-C5KK50XMCBkY0U-NLzglcRHzOwAg

 

 
 

Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект