Попробую описать простыми словами без серьезной терминологии (Devops'ы не бейте ногами).
Следующим шагом я бы рекомендовал вам начать использовать
docker-compose.
Он позволит всю инфраструктуру описать в одном конфигурационном файле, запускать все одной командой и создать алиасы для общения контейнеров между собой.
Например у нас такая структура. Я использую php но для nodejs может быть похоже.
project
- scr/ #Код проета под контролем версий в git
- Dockerfile
- phpfile1.php
- phpfile2.php
- etc.php
- db_data/ #папка где будут сохранятся база данных. (иначе каждый запуск контейнера будет ее обнулять)
- docker-compose.yml
- site.conf #конфиг для виртуального хоста nginx
- nginx.conf #конфиг nginx
Настраивается взаимодействие в специальном
файле.
docker-compose.ymlversion: '2'
services:
nginx:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ../src/:/app
- ./site.conf:/etc/nginx/conf.d/site.conf
- ./nginx.conf:/etc/nginx/nginx.conf
links:
- php
db:
image: mysql:5.7
volumes:
- ./db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 123
MYSQL_DATABASE: changeme
MYSQL_USER: changeme
MYSQL_PASSWORD: 123
ports:
- "33306:3306"
php:
build: ../src
volumes:
- ../src:/app
depends_on:
- db
environment:
PHP_DB_HOST: db:3306
PHP_DB_USER: changeme
PHP_DB_PASSWORD: 123
Тут я использую контейнер nginx и mysql из DockerHub и свой контейнер для php описанный в
src/DockerfileFROM php:fpm
RUN apt-get update && \
apt-get install -y \
openssl \
git \
curl \
unzip
RUN docker-php-ext-install pdo pdo_mysql
ADD . /app
WORKDIR /app
Теперь использовав docker-compose up мы удобно запустим все контейнеры с нужной конфигурацией.
Взаимодействие между контейнерами будет происходить по алиасам
например из php соединение с БД происходит так:
db.phpreturn [
'class' => 'yii\db\Connection',
'dsn' => "mysql:host=db:3306;dbname=donor", // db:3306 - это services имя контейнера с mysql в docker-compose.yml
'username' => getenv('PHP_DB_USER'), // это переменные окружения для контейнера тоже из docker-compose.yml
'password' => getenv('PHP_DB_PASSWORD'),
'charset' => 'utf8',
];
Код прокидываем в 2 контейнера php и nginx (раздел volumes). То есть внутри контейнера создается директория /app которая ссылается на директорию на хост машине. Для разработки очень удобно, вы изменяете код и сразу можно обновлять страницу.
На продакшен я обновляю код через git из репозитория и перезапускаю контейнеры (если надо).
ps. Это один из самых простых способов, разумеется существуют более "взрослые" и "правильные" методы. Но надеюсь мое описание позволит вам сдвинутся с мертвой точки в изучении докера.