Docker is a platform that enables developers to automate the deployment of applications inside lightweight, portable containers. Containers encapsulate an application and its dependencies, ensuring consistency across different environments.
Key Concepts:
Image: A lightweight, standalone, and executable software package that includes everything needed to run a piece of software, including the code, runtime, libraries, and system tools.
Container: A runnable instance of a Docker image. Containers isolate software from its environment and ensure consistent performance across different environments.
Dockerfile: A script containing instructions to build a Docker image. It defines the base image, sets up dependencies, and configures the application environment.
Why Docker?
Portability: Run applications consistently across different environments, from development to production, without worrying about underlying system differences.
Isolation: Containers provide process isolation, reducing conflicts between dependencies and ensuring applications run reliably.
Resource Efficiency: Docker containers share the host OS kernel, making them lightweight compared to traditional virtual machines.
Rapid Deployment: Containers start quickly, enabling rapid scaling and deployment of applications.
Common Docker Commands:
Build an Image: docker build -t image_name:tag
Run a Container: docker run -d -p host_port:container_portimage_name:tag
List Containers: docker ps -a
Stop a Container: docker stop container_id
Remove a Container: docker rm container_id
List Images: docker images
Remove an Image: docker rmiimage_id
Sample Example of Docker Image Creation
Dockerfile Basics: Create a file named Dockerfile (no file extension) in your project directory.
Define Base Image: Choose a base image that suits your application. Example using an official Node.js image:
dockerfile :FROM node:14
Set Working Directory: Specify a working directory inside the container:
dockerfile: WORKDIR /usr/src/app
Copy Files:Copy application files into the container:
dockerfile :COPY . .
Install Dependencies:Run commands to install dependencies:
dockerfile :RUN npm install
Expose Ports: Expose ports if your application runs on a specific port:
dockerfile :EXPOSE 3000
Define Entrypoint:Specify the command to run your application:
dockerfile :CMD [“npm”, “start”]
Build the Image: Open a terminal in the project directory and run:
docker build -t your_image_name:tag.
Run the Container:Start a container from the built image:
docker run -d -p host_port:container_portyour_image_name:tag.
View Running Containers: docker ps
Stop and Remove Container: docker stop container_id docker rm container_id
View Images: docker images
Remove Image: docker rmiimage_id
Docker (install/version) Command
Usage
curl -sSL https://get.docker.com/ | sh
quick and easy installation docker for Linux OS
brew install –cask docker
quick and easy installation docker for mac OS
docker version or docker –version
Display the version of docker installed
docker version –format ‘{{.Server.Version}}’
Get the server version:
docker version –format ‘{{json .}}’
View server raw Json data
Docker (Lifecycle) Command
Usage
docker start
starts a container so it is running.
docker stop
stops a running container.
docker restart
restart stops and starts a container.
docker pause
pauses a running container, “freezing” it in place.
docker unpause
will unpause a running container.
docker wait
blocks until running container stops.
docker kill
sends a SIGKILL to a running container.
docker attach
will connect to a running container.
Docker (Info) Command
Usage
docker ps
shows running containers.
docker logs
gets logs from container. (You can use a custom log driver, but logs is only available for json-file and journald in 1.10).
docker inspect
looks at all the info on a container (including IP address).
docker events
gets events from container.
docker port
shows public facing port of container.
docker top
shows running processes in container.
docker stats
shows containers’ resource usage statistics.
docker diff
shows changed files in the container’s FS.
docker ps -a
shows running and stopped containers.
docker stats –all
shows a list of all containers, default shows just running.
Docker (import/export) Command
Usage
docker cp
copies files or folders between a container and the local filesystem.
docker export
turns container filesystem into tarball archive stream to STDOUT.
Docker (Registry) Command
Usage
docker login
to login to a registry.
docker logout
to logout from a registry.
docker pull
pulls an image from registry to local machine.
docker push
pushes an image to the registry from local machine.
docker search
searches registry for image.
Docker (Network/Connection) Command
Usage
docker network create
NAME Create a new network (default type: bridge)
docker network rm
NAME Remove one or more networks by name or identifier. No containers can be connected to the network when deleting it.
docker network ls
List networks
docker network inspect
NAME Display detailed information on one or more networks.
docker network connect
NETWORK CONTAINER Connect a container to a network.
docker network disconnect
NETWORK CONTAINER Disconnect a container from a network.
Docker (Executing/Lifecycle) Command
Usage
docker exec
to execute a command in container.
docker history
shows history of image.
docker tag
tags an image to a name (local or registry).
Docker (Images/info) Command
Usage
docker images
shows all images.
docker import
creates an image from a tarball.
docker build
docker build creates image from Dockerfile.
docker commit
creates image from a container, pausing it temporarily if it is running.
docker rmi
removes an image.
docker load
loads an image from a tar archive as STDIN, including images and tags (as of 0.7).
docker save
saves an image to a tar archive stream to STDOUT with all parent layers, tags & versions (as of 0.7).
Docker (Images) Command
Usage
docker image build
Build an image from a Dockerfile
Docker (Images – option) Command
Usage
–add-host
Add a custom host-to-IP mapping (host:ip)
–build-arg
Set build-time variables
–cache-from
Images to consider as cache sources
–cgroup-parent
Set the parent cgroup for the RUN instructions during build
–compress
Compress the build context using gzip
–cpu-period
Limit the CPU CFS (Completely Fair Scheduler) period
–cpu-quota
Limit the CPU CFS (Completely Fair Scheduler) quota
–cpu-shares -c
CPU shares (relative weight)
–cpuset-cpus
CPUs in which to allow execution (0-3, 0,1)
–cpuset-mems
MEMs in which to allow execution (0-3, 0,1)
–disable-content-trust true
Skip image verification
–file -f
Name of the Dockerfile (Default is PATH/Dockerfile)
Docker (Images – option) Command
Usage
–force-rm
Always remove intermediate containers
–iidfile
Write the image ID to the file
–isolation
Container isolation technology
–label
Set metadata for an image
–memory -m
Memory limit
–memory-swap
Swap limit equal to memory plus swap: -1 to enable unlimited swap
–network
API 1.25+ Set the networking mode for the RUN instructions during build
–no-cache
Do not use cache when building the image
–platform
API 1.38+ Set platform if server is multi-platform capable
–pull
Always attempt to pull a newer version of the image
–quiet -q
Suppress the build output and print image ID on success
–rm true
Remove intermediate containers after a successful build
–security-opt
Security options
–tag -t
Name and optionally a tag in the name:tag format
–target
Set the target build stage to build.
–ulimit
Ulimit options
Docker (Images) Command
Usage
docker image history [OPTIONS] IMAGE
Show the history of an image
Docker (Images history- option) Command
Usage
–format
Format output using a custom template: ‘table’: Print output in table format with column headers (default) ‘table TEMPLATE’: Print output in table format using the given Go template ‘json’: Print in JSON format ‘TEMPLATE’: Print output using the given Go template
–human -H true
Print sizes and dates in human readable format
–no-trunc
Don’t truncate output
–quiet -q
Only show image IDs
–disable-content-trust true
Skip image verification
–file -f
Name of the Dockerfile (Default is PATH/Dockerfile)
Docker (Important) Command
Usage
docker load < my_image.tar.gz
Load an image from my_image.tar.gz file
docker save my_image:my_tag | gzip > my_image.tar.gz