Repo with examples: NodeExpressMongoDBDockerApp
FROM node:alpine
LABEL author="Andy Maskiell"
ENV NODE_ENV=production
ENV PORT=3000
WORKDIR /var/www
COPY package.json package-lock.json ./
RUN npm install
COPY . ./
EXPOSE $PORT
# NOTE: this exposed port refers to the INTERNAL PORT
ENTRYPOINT ["npm", "start"]
Simple Dockerfile
example
# `-t`: short for `--tag`
# `<name>`: Image name
# `.`: build context
docker build -t <name> .
# `<registry>`: Docker registry name
# `<name>`: Image name
# `<tag>`: Tag (often a version number)
docker build -t <registry>/<name>:<tag> .
docker push <user-name>/<image-name>:<tag>
R/O = Read Only
R/W = Read/Write
┌ - - - - - - - - - -┐ ─╮
┆ Thin R/W Layer ┆ ├──> Container Layer
└- - - - - - - - - - ┘ ─╯
╔════════════════════╗ ─╮
║ ┌──────────────┐ ║ │
║ │ 91e54dfb1179 │ ║ │
║ └──────────────┘ ║ │
║ ┌──────────────┐ ║ │
║ │ d74508fb6632 │ ║ │
║ └──────────────┘ ║ │
║ ┌──────────────┐ ║ │
║ │ c22013c84729 │ ║ │
║ └──────────────┘ ║ ├──> Image Layers (R/O)
║ ┌──────────────┐ ║ │
║ │ d3a1f33e8a5a │ ║ │
║ └──────────────┘ ║ │
║ ║ │
║ Ubuntu ║ │
║ ║ │
╚════════════════════╝ ─╯
┌──────────────┐ ╮
│ │ ├
└──────────────┘ ╯
docker run -p <external-port>:<internal-port> <image-name>
docker logs <container-id>
Created by passing -v
flag to docker run
-v <path-to-directory-or-file-in-container>
or -v <path-to-directory-or-file-on-host>:<path-to-directory-or-file-in-container>
docker run -p <external-port>:<internal-port> -v /var/www/logs <image-name>
docker run -p <external-port>:<internal-port> -v $(pwd):/var/www/logs <image-name>
docker run -p <external-port>:<internal-port> -v $HOME/some/folder:/var/www/logs <image-name>
docker network
Commandsdocker network create --driver bridge <isolated_network_name>
docker network ls
docker network rm <isolated_network_name>
# One way to add container to network
docker run -d --net=<isolated_network_name> --name=<container_name> <image_name>
# NOTE: both `--net` or `--network` are acceptable
docker network inspect <network_id>
# `-it`: Interactive tty
# `sh`: Shell to use (`/bin/bash`)
docker exec -it <container_id> sh