Docker adalah platform containerization yang memudahkan deployment aplikasi. Mari pelajari cara install dan menggunakannya.
Prerequisites
System Requirements
# Check Ubuntu version
cat /etc/os-release
- Ubuntu 20.04 LTS atau lebih baru
- 64-bit system
- Kernel 3.10+
Remove Old Versions
# Hapus versi lama jika ada
sudo apt-get remove docker docker-engine docker.io containerd runc
Install Docker Engine
Setup Repository
# Update package index
sudo apt-get update
Install prerequisites
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
Add Docker's official GPG key
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL
https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Setup repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Install Docker
# Update package index again
sudo apt-get update
Install Docker Engine
sudo apt-get install docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
Verify installation
sudo docker run hello-world
Post-Installation Setup
Add User to Docker Group
# Buat docker group
sudo groupadd docker
Add user ke group
sudo usermod -aG docker $USER
Apply changes (logout/login atau run)
newgrp docker
Test tanpa sudo
docker run hello-world
Enable Docker on Boot
# Enable auto-start
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
Check status
sudo systemctl status docker
Basic Docker Commands
Image Management
# Pull image dari Docker Hub
docker pull nginx
docker pull node:18-alpine
docker pull mysql:8
List images
docker images
Remove image
docker rmi nginx
Container Operations
# Run container
docker run -d --name webserver nginx
List running containers
docker ps
List all containers
docker ps -a
Stop container
docker stop webserver
Start container
docker start webserver
Remove container
docker rm webserver
Container with Port Mapping
Expose Ports
# Map port 80 container ke port 8080 host
docker run -d -p 8080:80 --name web nginx
Multiple port mapping
docker run -d \
-p 80:80 \
-p 443:443 \
--name webserver nginx
Environment Variables
# Set environment variables
docker run -d \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=myapp \
--name database mysql:8
Volume Management
Create and Use Volumes
# Create volume
docker volume create mydata
List volumes
docker volume ls
Use volume in container
docker run -d \
-v mydata:/var/lib/mysql \
--name database mysql:8
Mount host directory
docker run -d \
-v /home/user/html:/usr/share/nginx/html \
--name webserver nginx
Docker Compose
Install Docker Compose
# Sudah included dengan docker-compose-plugin
docker compose version
Alternative: standalone installation
sudo curl -L \
"
https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Docker Compose File
# docker-compose.yml
version: "3.8"
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: myapp
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
Compose Commands
# Start services
docker compose up -d
Stop services
docker compose down
View logs
docker compose logs -f
Rebuild
docker compose up -d --build
Building Docker Images
Dockerfile Example
# Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
Build Image
# Build image
docker build -t myapp:1.0 .
Build with different Dockerfile
docker build -f Dockerfile.prod -t myapp:prod .
Push to Docker Hub
docker login
docker tag myapp:1.0 username/myapp:1.0
docker push username/myapp:1.0
Networking
Docker Networks
# Create network
docker network create mynetwork
List networks
docker network ls
Connect container to network
docker run -d \
--network mynetwork \
--name web nginx
Connect existing container
docker network connect mynetwork container_name
Cleanup Commands
Remove Unused Resources
# Remove stopped containers
docker container prune
Remove unused images
docker image prune
Remove unused volumes
docker volume prune
Remove all unused resources
docker system prune -a
Check disk usage
docker system df
Kesimpulan
Docker memudahkan deployment dengan containerization. Mulai dengan basic commands lalu explore Docker Compose untuk multi-container applications.
Ditulis oleh
Hendra Wijaya