Docker para desenvolvedores Node
Veja nesse artigo alguns conceitos básicos sobre Docker para iniciantes

Introdução
Quando você instala o docker, seja em um ambiente Windows ou Linux, ele cria uma rede local para que você possa criar os seus containers. Abaixo você tem uma imagem ilustrando esse passo:
A partir dessa rede você pode criar as suas sub-redes ou como mencionado acima, os seus containers.
Algo importante de se comentar, é que quando você trabalha em um ambiente Windows com o OS/Arch do seu Server Linux, você só pode trabalhar com imagens que foram desenvolvidos com base em uma distribuição linux. Quando você trabalha com o OS/Arch Windows, você só pode trabalhar com imagens baseadas em distribuição Windows. Abaixo você tem duas imagens demonstrando esses dois tipos de OS/Arch servers :
Por que é importante verificar esse ponto? Quando você tenta utilizar uma imagem que é diferente do seu server, o Docker engine identifica e retorna a seguinte mensagem de erro:
Nesse exemplo acima eu tentei baixar a imagem do nano server em um OS/Arch linux em um server linux, por esse motivo ele retornou o erro anterior.
Para demonstrar com mais detalhes essa questão do Arch, veja uma imagem abaixo demonstrando o Docker instalando nos Ambientes Windows e Linux.
Note que quando você instala o docker no seu computador ele reserva uma camada/espaço para ele, por esse motivo você só pode trabalhar com imagens baseadas no OS/Arch do seu server.
Dockerfile
Dockerfile é o arquivo onde colocamos tudo que precisamos para criação do nosso container. Nesse arquivo você pode especificar de qual imagem ele irá originar, o que precisa instalar, quais serviços irão rodar … etc.
Sua sintaxe é bem simples, com apenas alguns passos você pode dockerizar o seu projeto. Abaixo você tem uma breve descrição das camadas mais utilizadas em um arquivo Dockerfile.
FROM ponto de partida da sua imagem, pode ser um s.o como Ubuntu ou uma imagem criada a partir de um s.o como node:alpine
RUN pensando em uma imagem com node, você pode executar o comando npm install ou dotnet run no caso do .net core
COPY para copiar os arquivos do seu host para sua imagem
CMD comando de saída, aqui você pode executar o comando npm start, ng server … etc
Com o seu Dockerfile criado, você deve executar o comando docker build . para criação da sua imagem. Abaixo você tem uma imagem ilustrando esse processo:

Para que você possa ter um melhor entendimento sobre esse assunto, eu irei criar uma imagem a partir de um projeto que eu tenho no GitHub. Caso tenha interesse em clonar ele, segue o seu link: Go Shima.
Esse projeto foi desenvolvido em Contruct2, o seu publish gera uma estrutura HTML. Para dockerizar esse projeto eu irei utilizar o ngnix como server.
Abrindo o arquivo Dockerfile dele você tem:
FROM nginx:alpine COPY . /usr/share/nginx/html
Note que o from está baixando o ngnix:alpine, em seguida estou copiando todos os arquivos necessários para rodar o projeto da minha máquina “host” para imagem.
Execute o comando “docker build -t go-shima .” na raiz do projeto, esse processo deve demorar alguns segundos. Assim que ele finalizar, execute o comando abaixo no seu CMD para verificar se a imagem foi criada corretamente:
docker images
Abaixo você tem uma imagem demonstrando o resultado desse comando:

Agora para criar o seu container, execute o comando abaixo no seu CMD:
docker run -d -p 8080:80 go-shima
Abra o endereço http://localhost:8080/ no seu navegador e note que o game está executado dentro do seu container.

Docker Hub
Para que as suas imagens não fiquem somente no seu computador, quando você trabalha com docker, você pode subir e versionar elas em um repositório online chamado Docker Hub. Esse repositório funciona que nem o GitHub, com apenas alguns passos você pode criar uma conta, acessar e versionar a sua imagem.
Uma observação importante, a conta free te permite criar 1 repositório privado e n (até onde eu li) públicos. Caso tenha interesse em publicar a sua imagem, segue link de uma documentação com esse passo a passo: Docker Hub.
Abaixo você tem uma imagem demonstrando esse processo de versionamento/publish de uma imagem no Docker Hub:
Volumes
Em alguns cenários você precisará persistir os dados do seu container como por exemplo: no momento da gravação de logs, persistir os dados de um banco de dados em disco … etc.
Nesses cenários você pode mapear um local no seu computador com o seu container. Para exemplificar esse passo, eu irei utilizar uma imagem chamada Tutum criada para o MongoDB.
Altere a string abaixo para um local mapeado no seu computador, em seguida execute esse comando no seu terminal.
docker run -d -v "seu caminho":/data/db -p 27017:27017 -p 28017:28017 -e AUTH=no tutum/mongodb
Para verificar se o volume foi mapeado corretamente, eu irei utilizar um dos recursos do Docker chamado Kitematic. Caso você não tenha ele instalado, basta clicar com o botão direito do seu mouse no Docker (baleiazinha branca), em seguida em Kitematic e fazer download:

Com ele aberto no seu computador, navegue até o seu contêiner criado no passo anterior, em seguida vá até settings e por fim em volumes. Abaixo você tem uma imagem demonstrando esse passo.

Agora você pode reiniciar o seu container, fazer um scale que os dados irão persistir em disco.
Bom, para esse artigo não ficar muito longo eu irei dividir ele em duas partes, essa com a introdução e a segunda parte com Docker Compose. Espero ter ajudado e até a segunda parte desse artigo pessoal.