WordPress in Docker.

Docker обладает тремя специфическими особенностями, помогающими создавать контейнеры, не зависящие от операционной системы:

1. Файловая система только для чтения
2. Переменные окружения
3. Тома

  1. Файловая система только для чтения
    • При этом файлы в контейнере не будут изменены или скомпрометированы в случае атаки.

При запуске контейнера используется —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.

Помните, что развернутые сервисы используют значения по умолчанию. А это опасно и используется только в рамках обучения.

Поделиться ссылкой: