Вопрос: Как должен выглядеть процесс работы с Docker?

Лучший ответ: Попробую описать простыми словами без серьезной терминологии (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. Это один из самых простых способов, разумеется существуют более "взрослые" и "правильные" методы. Но надеюсь мое описание позволит вам сдвинутся с мертвой точки в изучении докера.

Худший ответ: По моему скромному мнению...
не должно быть одного контейнера который содержит все - и базу и ноде и еластик. Это должны быть отдельные контейнеры, которые соединяются через расшаренные свои адреса и порты.
Поскольку контейнеров несколько , и управлять этим сложно , применять Docker compose, который как раз и описывает это все хозяйство.
Там же описывать внешние папки монтируемые к контейнеру. Или есть еще какие то Docker Storage ( не пробовал )
То есть , код всё равно придётся заливать на сервер  и после растартовать контейнер/ы.