https://github.com/sshehrozali/docker-commands
Get started Docker guide for beginners 🐳.
https://github.com/sshehrozali/docker-commands
docker docker-image docker-network docker-tutorial
Last synced: 13 days ago
JSON representation
Get started Docker guide for beginners 🐳.
- Host: GitHub
- URL: https://github.com/sshehrozali/docker-commands
- Owner: sshehrozali
- Created: 2022-11-22T07:43:32.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2022-11-24T09:55:48.000Z (over 3 years ago)
- Last Synced: 2025-04-10T23:03:51.897Z (11 months ago)
- Topics: docker, docker-image, docker-network, docker-tutorial
- Homepage:
- Size: 4.88 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Docker Commands
### Quick Start Guide
#### Container vs Image
A Docker Image is a file that contains the actual binaries such as PostgresSQL, Redis, etc. It's the same as installing it directly on the machine.
A Docker Container is actually a virtual environment which has all the configurations installed i.e. original image, setting up environment, required libraries, protocol/network configuration, and everything in order to make the Docker image executable.
#### Docker Network
A Docker Network is a virtually created network environment where you can run your Docker containers inside (like a isolated piece of containers running in a specified Docker network).
Example can be:
1. Creating a `mongo-network`
2. Pulling `mongodb` and `mongoexpress` Docker images
3. Running both images in their containers inside mongo-network (specifying by passing a flag arg)
4. `mongodb` and `mongoexpress` now running inside `mongo-network`
#### Port Binding
Docker port binding is a technique to allow multiple Docker images listen to their respective ports even if they both running on same ports. This is done via port binding command.
##### How it works?
We bind every Docker image port to listen to their respective HOST (each HOST cannot have some ports shared).
You can think port binding like this:
`... -p PORT:HOST ...` where `PORT` is actual the port where your Docker image is listening to and `HOST` is your machine port bound with Docker image `PORT`.
This technique is very useful especially when you running two same Docker containers with different versions like PostgesSQL v14.XX and PostgresSQL < v14.XX because both PostgresSQL containers will listen to exact same port which you can't decide which container to connect. Under such scenarios port binding plays a very useful technique.
### Commands
#### Containerization
* `docker pull [image]` - to pull image from Docker Hub
* `docker run [image]` - to start a Docker container
* `docker run [flags] [image]` - to start a Docker container with flags
* `docker start [container_id]` - to restart a Docker container
* `docker stop [container_id]` - to stop a Docker container
* `docker build -t [container_name]:[version]` - to build an image with a Dockerfile
* `docker rm [container_id]` - to remove a container
#### Images
* `docker images` - to list all Docker images
* `docker push [image_name]:version` - to push a Docker image to Docker registry or any private Docker repository (AWS ECR, etc.)
* `docker tag -a [current_image_name] [new_image_name]` - to rename a Docker image
#### Logs
* `docker ps -a` - to get history of all ended/up containers
* `docker ps -a | grep [container_name]` - to see history of a specific container
* `docker ps` - to list all running containers
* `docker logs [container_id] or [container_name]`- to display logs of running container
* `docker exec -it [container_id] /bin/bash` - to get access as a root user for Bash
* `docker exec -it [container_id] /bin/sh` - to get access as a root user for Shell
#### Example use-case for starting mongodb container
`docker run -d \
--name mongodb \
-p 27017:27017 \
-e MONGO-INITDB_ROOT_USERNAME=admin \
MONGO-INITDB_ROOT_PASSWORD=password \
--net mongo-network \
mongo`
Flags:
* d: Start in detach mode
* name: Name of the container
* p: Port binding
* e: Environment variables
* net: Specifying which network to run in