Изучаем по мануалу (1)
/**/
Качаем контейнер
docker pull ubuntu:18.10
Список образов
docker images
docker images | grep ubuntu
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 18.10 9dc19675e327 2 years ago 67.3MB
Запуск команды внутри контейнера
docker run ubuntu:18.10 echo 'hello from ubuntu'
hello from ubuntu
Список контейнеров
# running only docker ps | grep ubuntu # all docker ps -a | grep ubuntu
Вывод:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7479f2d9eb59 ubuntu:18.10 "echo 'hello from ub…" About a minute ago Exited (0) About a minute ago stupefied_fermat
Заходим в контейнер
docker run -it ubuntu:18.10 /bin/bash
Экспериментируем внутри конейнера:
root@4b94f197232d:/# echo "Hello" Hello root@4b94f197232d:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@4b94f197232d:/# mkdir /truedir root@4b94f197232d:/# exit exit
Снова запускаем контейнер
docker ps -a | grep ubuntu 4b94f197232d ubuntu:18.10 "/bin/bash" 3 minutes ago Exited (0) 58 seconds ago elastic_jones 7479f2d9eb59 ubuntu:18.10 "echo 'hello from ub…" 6 minutes ago Exited (0) 6 minutes ago stupefied_fermat [root@rhel7-devel1 badcode]# docker start 4b94f197232d 4b94f197232d [root@rhel7-devel1 badcode]# docker ps | grep ubuntu 4b94f197232d ubuntu:18.10 "/bin/bash" 4 minutes ago Up 11 seconds elastic_jones [root@rhel7-devel1 badcode]# [root@rhel7-devel1 badcode]# [root@rhel7-devel1 badcode]# docker exec -it 4b94f197232d /bin/bash
Видим что ранее созданный каталог “truedir“ сохранился (т.е. изменения в контейнере сохраняются):
root@4b94f197232d:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp truedir usr var exit
Создаем Dockerfile
все команды для Dockerfile тут: (2)
Создаем файлики:
Файл cli.php:
<?php // @see https://badcode.ru/docker-tutorial-dlia-novichkov-rassmatrivaiem-docker-tak-iesli-by-on-byl-ighrovoi-pristavkoi/ $n = $i = 5; while ($i--) { echo str_repeat(' ', $i).str_repeat('* ', $n - $i)."n"; }
Файл Dockerfile:
FROM php:7.2-cli COPY cli.php /cli.php RUN chmod +x /cli.php CMD php /cli.php
Билдим через Dockerfile:
docker build . --tag pyramid
Ищем созданный образ:
docker images | grep pyramid pyramid latest c2a93886f20b About a minute ago 398MB
Запускам скрипт из докера
docker run pyramid * * * * * * * * * * * * * * *
Вносим правки в скрипт и билдим снова
Добавляем параметр в Cli.php:
<?php // @see https://badcode.ru/docker-tutorial-dlia-novichkov-rassmatrivaiem-docker-tak-iesli-by-on-byl-ighrovoi-pristavkoi/ $n = $i = $argv[1] ?? 5; //а было $n = $i = 5 // это значит, что мы принимаем аргумент из консоли, а если он не получен, то используем по-умолчанию 5 while ($i--) { echo str_repeat(' ', $i).str_repeat('* ', $n - $i)."n"; }
docker build . --tag pyramid docker run pyramid php /cli.php 9
docker run pyramid php /cli.php 9 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Передаем аргумент в виде параметра контейнера
New Dockerfile:
FROM php:7.2-cli COPY cli.php /cli.php RUN chmod +x /cli.php ENTRYPOINT ["php", "/cli.php"] ## аргумент, который передаётся в командную строку CMD ["9"]
Билдим снова:
docker build . --tag pyramid docker run pyramid 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Монтируем текущую папку
docker run -it -v $(pwd):/mounted ubuntu:18.10 /bin/bash ls #bin boot dev etc home lib lib64 media mnt mounted opt proc root run sbin srv sys tmp usr var ls mounted #Dockerfile cli.php readme.txt touch mounted/testfile # testfile will be available on host machine
Переброска портов
mkdir badcode_apache && cd badcode_apache
<create file: index.php>
<?php echo 'Hello from apache. We have PHP version = ' . phpversion() . PHP_EOL;
<create file Dockerfile>
FROM php:7.2-apache # Указываем рабочую папку WORKDIR /var/www/html # Копируем все файлы проекта в контейнер COPY . /var/www/html EXPOSE 80
docker build . --tag own_php_apache
Запуск контейнера с переброской порта
docker run -p <HOST_PORT>:<CONTAINER_PORT>
docker run -d -p 31000:80 own_php_apache
676d0752775e6cd44b502be92fd8faa2267a0aac9fcd842c220da319bbff16e5
Test in browser: http://rhel7-devel1.rian.off:31000/
Works:
Hello from apache. We have PHP version = 7.2.34
Остановка и удаление контейнеров
docker ps | grep own_php_apache # 676d0752775e own_php_apache "docker-php-entrypoi…" 2 minutes ago Up 2 minutes 0.0.0.0:31000->80/tcp lucid_golick docker stop 676d0752775e # 676d0752775e docker rm 676d0752775e # 676d0752775e # do the same for 'ubuntu'
Запуск через Docker-compose
Здесь же, в папке badcode_apache
Создаем файл docker-compose.yml:
version: '3' services: app: build: context: . ports: - 8080:80
Билдим и запускаем
docker-compose up -d
Creating network "badcode_apache_default" with the default driver
Creating badcode_apache_app_1 ... done
Видим, что сервер снова заработал: http://rhel7-devel1.rian.off:31000/
Hello from apache. We have PHP version = 7.2.34
Монтирование через volume
# stop/remove old container docker-compose stop Stopping badcode_apache_app_1 ... done docker-compose rm Going to remove badcode_apache_app_1 Are you sure? [yN] y Removing badcode_apache_app_1 ... done
Запуск снова:
docker-compose up Creating badcode_apache_app_1 ... done Attaching to badcode_apache_app_1 app_1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.96.2. Set the 'ServerName' directive globally to suppress this message app_1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.96.2. Set the 'ServerName' directive globally to suppress this message app_1 | [Wed Aug 25 15:11:41.131561 2021] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/7.2.34 configured -- resuming normal operations app_1 | [Wed Aug 25 15:11:41.131652 2021] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND' <ctrl+C to exit>
Запуск команд внутри контейнера
docker-compose exec app apache2 -v #Server version: Apache/2.4.38 (Debian) #Server built: 2020-08-25T20:08:29
Источники:
Нет Ответов