Docker обладает тремя специфическими особенностями, помогающими создавать контейнеры, не зависящие от операционной системы:
1. Файловая система только для чтения
2. Переменные окружения
3. Тома
- Файловая система только для чтения
- При этом файлы в контейнере не будут изменены или скомпрометированы в случае атаки.
При запуске контейнера используется —read-only параметр, например:
docker run -d --name wp --read-only \
wordpress:5.0.0-php7.2-apache
В этом случае контейнер не запустится, т.к. файловая система в состоянии «только чтение».
Выполнив команду без —read-only
docker run -d --name wp_writable wordpress:5.0.0-php7.2-apache
и посмотрев как изменилась файловая система, увидим:
ivan@ivan-XPS-9320:~$ docker container diff wp_writable
C /run
C /run/apache2
A /run/apache2/apache2.pid
Подключим директорию /run/apache2 как Volume, а также директорию /tmp.
Команда запуска будет выглядеть немного иначе.
docker run -d --name wp2 --read-only -v /run/apache2/ --tmpfs /tmp wordpress:5.0.0-php7.2-apache
Для WordPress нужна база данных, например, MySQL. Запустим ее также в Docker.
docker run -d --name wpdb \
-e MYSQL_ROOT_PASSWORD=ch2demo \
mysql:5.7
Создадим новый контейнер WordPress, связанный с этой БД. Название wp3, база прилинкована к wpdb, порт 8000 — на хосте, 80 внутри контейнера.
docker run -d —name wp3 \
—link wpdb:mysql \
-p 8000:80 \
—read-only \
-v /run/apache2/ \
—tmpfs /tmp \
wordpress:5.0.0-php7.2-apache
Выполним и увидим, что контейнер wp3 запущен. Получим значение true.
docker inspect --format "{{.State.Running}}" wp3
Откроем браузер и перейдем по адресу http://127.0.0.1:8000
Откроется страница установки WordPress.
Помните, что развернутые сервисы используют значения по умолчанию. А это опасно и используется только в рамках обучения.