Docker là một nền tảng mã nguồn mở giúp đơn giản hóa quá trình phát triển, triển khai và chạy các ứng dụng bằng cách sử dụng các container. Để làm việc hiệu quả với Docker, việc nắm vững các câu lệnh Docker là rất quan trọng. Trong bài viết này, chúng ta sẽ tổng hợp các câu lệnh Docker quan trọng, bao gồm các lệnh quản lý container, image, network, volume, và nhiều hơn nữa. Chúng ta cũng sẽ cung cấp các ví dụ cụ thể để minh họa cách sử dụng các câu lệnh này.
Tổng Quan Về Docker CLI
Docker CLI (Command Line Interface) là công cụ dòng lệnh cho phép người dùng tương tác với Docker daemon. Docker CLI cung cấp các lệnh để quản lý container, image, network, volume, và các thành phần khác của Docker.
Các Lệnh Cơ Bản
-
docker version: Hiển thị thông tin chi tiết về phiên bản Docker CLI và daemon.
bashdocker version
-
docker info: Hiển thị thông tin hệ thống Docker, bao gồm các plugin đang hoạt động và số lượng container và image trên hệ thống.
bashdocker info
-
docker help: Hiển thị danh sách các lệnh hỗ trợ.
bashdocker help
-
docker <command> --help: Hiển thị thông tin trợ giúp về một lệnh cụ thể.
bashdocker run --help
Quản Lý Container
Tạo và Chạy Container
-
docker run: Tạo và chạy một container từ một Docker image.
bashdocker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Ví dụ:
bashdocker run -d -p 8080:80 --name my-nginx nginx
Trong ví dụ trên:
-d
: Chạy container ở chế độ nền (detached mode).-p 8080:80
: Ánh xạ cổng 8080 trên host với cổng 80 trên container.--name my-nginx
: Đặt tên cho container làmy-nginx
.nginx
: Image được sử dụng để tạo container.
-
docker create: Tạo một container mới nhưng không khởi động nó.
bashdocker create [OPTIONS] IMAGE [COMMAND] [ARG...]
Ví dụ:
bashdocker create --name my-container ubuntu
Quản Lý Container
-
docker start: Khởi động một hoặc nhiều container đã dừng.
bashdocker start [OPTIONS] CONTAINER [CONTAINER...]
Ví dụ:
bashdocker start my-container
-
docker stop: Dừng một hoặc nhiều container đang chạy.
bashdocker stop [OPTIONS] CONTAINER [CONTAINER...]
Ví dụ:
bashdocker stop my-container
-
docker restart: Khởi động lại một hoặc nhiều container đang chạy.
bashdocker restart [OPTIONS] CONTAINER [CONTAINER...]
Ví dụ:
bashdocker restart my-container
-
docker rm: Xóa một hoặc nhiều container đã dừng.
bashdocker rm [OPTIONS] CONTAINER [CONTAINER...]
Ví dụ:
bashdocker rm my-container
-
docker ps: Liệt kê các container đang chạy.
bashdocker ps
Liệt kê tất cả các container, bao gồm cả các container đã dừng:
bashdocker ps -a
-
docker logs: Lấy log của một container.
bashdocker logs [OPTIONS] CONTAINER
Ví dụ:
bashdocker logs my-container
-
docker exec: Thực thi một lệnh trong một container đang chạy.
bashdocker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Ví dụ:
bashdocker exec -it my-container /bin/bash
-
docker inspect: Hiển thị thông tin chi tiết về một hoặc nhiều container.
bashdocker inspect [OPTIONS] NAME|ID [NAME|ID...]
Ví dụ:
bashdocker inspect my-container
Quản Lý Image
Tạo và Quản Lý Docker Image
-
docker build: Xây dựng một Docker image từ một Dockerfile.
bashdocker build [OPTIONS] PATH | URL | -
Ví dụ:
bashdocker build -t my-image .
Trong ví dụ trên:
-t my-image
: Đặt tên cho image làmy-image
..
: Đường dẫn đến Dockerfile.
-
docker images: Liệt kê các Docker image trên hệ thống.
bashdocker images
-
docker rmi: Xóa một hoặc nhiều Docker image.
bashdocker rmi [OPTIONS] IMAGE [IMAGE...]
Ví dụ:
bashdocker rmi my-image
-
docker tag: Gán một tag cho một Docker image.
bashdocker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
Ví dụ:
bashdocker tag my-image my-repo/my-image:latest
-
docker push: Đẩy một Docker image lên registry.
bashdocker push [OPTIONS] NAME[:TAG]
Ví dụ:
bashdocker push my-repo/my-image:latest
-
docker pull: Kéo một Docker image từ registry.
bashdocker pull [OPTIONS] NAME[:TAG]
Ví dụ:
bashdocker pull nginx:latest
Quản Lý Network
Tạo và Quản Lý Docker Network
-
docker network create: Tạo một Docker network mới.
bashdocker network create [OPTIONS] NETWORK
Ví dụ:
bashdocker network create my-network
-
docker network ls: Liệt kê các Docker network trên hệ thống.
bashdocker network ls
-
docker network inspect: Hiển thị thông tin chi tiết về một hoặc nhiều Docker network.
bashdocker network inspect [OPTIONS] NETWORK [NETWORK...]
Ví dụ:
bashdocker network inspect my-network
-
docker network connect: Kết nối một container với một Docker network.
bashdocker network connect [OPTIONS] NETWORK CONTAINER
Ví dụ:
bashdocker network connect my-network my-container
-
docker network disconnect: Ngắt kết nối một container khỏi một Docker network.
bashdocker network disconnect [OPTIONS] NETWORK CONTAINER
Ví dụ:
bashdocker network disconnect my-network my-container
-
docker network rm: Xóa một hoặc nhiều Docker network.
bashdocker network rm [OPTIONS] NETWORK [NETWORK...]
Ví dụ:
bashdocker network rm my-network
Quản Lý Volume
Tạo và Quản Lý Docker Volume
-
docker volume create: Tạo một Docker volume mới.
bashdocker volume create [OPTIONS] [VOLUME]
Ví dụ:
bashdocker volume create my-volume
-
docker volume ls: Liệt kê các Docker volume trên hệ thống.
bashdocker volume ls
-
docker volume inspect: Hiển thị thông tin chi tiết về một hoặc nhiều Docker volume.
bashdocker volume inspect [OPTIONS] VOLUME [VOLUME...]
Ví dụ:
bashdocker volume inspect my-volume
-
docker volume rm: Xóa một hoặc nhiều Docker volume.
bashdocker volume rm [OPTIONS] VOLUME [VOLUME...]
Ví dụ:
bashdocker volume rm my-volume
-
docker volume prune: Xóa tất cả các Docker volume không sử dụng.
bashdocker volume prune [OPTIONS]
Ví dụ:
bashdocker volume prune
Ví Dụ: Tạo và Sử Dụng Docker Networking
Trong ví dụ này, chúng ta sẽ tạo và sử dụng Docker networking để kết nối hai container và cho phép chúng giao tiếp với nhau.
-
Tạo Mạng Tùy Chỉnh
Tạo một mạng cầu nối tùy chỉnh có tên là
my-bridge-net
:bashdocker network create -d bridge my-bridge-net
-
Tạo Dockerfile Cho Ứng Dụng Web
Tạo một file có tên là
Dockerfile
với nội dung sau:Dockerfile# Sử dụng image chính thức của Node.js làm base image FROM node:14 # Tạo thư mục làm việc trong container WORKDIR /app # Sao chép package.json và package-lock.json vào thư mục làm việc COPY package*.json ./ # Cài đặt các phụ thuộc của ứng dụng RUN npm install # Sao chép mã nguồn ứng dụng vào thư mục làm việc COPY . . # Mở cổng 8080 để truy cập ứng dụng EXPOSE 8080 # Chạy ứng dụng khi container khởi động CMD ["node", "app.js"]
-
Tạo file package.json
Tạo một file có tên là
package.json
với nội dung sau:json{ "name": "docker-example", "version": "1.0.0", "description": "A simple web application", "main": "app.js", "scripts": { "start": "node app.js" }, "dependencies": { "express": "^4.17.1" } }
-
Tạo file app.js
Tạo một file có tên là
app.js
với nội dung sau:javascriptconst express = require("express"); const app = express(); const port = 8080; app.get("/", (req, res) => { res.send("Hello, Docker Networking!"); }); app.listen(port, () => { console.log(`App running at http://localhost:${port}`); });
-
Xây Dựng Docker Image Cho Ứng Dụng Web
Sử dụng lệnh
docker build
để xây dựng Docker image từ Dockerfile:bashdocker build -t docker-example .
-
Tạo và Kết Nối Container Ứng Dụng Web
Sử dụng lệnh
docker run
để tạo và kết nối container ứng dụng web với mạngmy-bridge-net
:bashdocker run -d --network=my-bridge-net --name=web-container docker-example
-
Tạo Container Redis
Sử dụng lệnh
docker run
để tạo container Redis và kết nối nó với mạngmy-bridge-net
:bashdocker run -d --network=my-bridge-net --name=redis-container redis
-
Kiểm Tra Kết Nối Giữa Các Container
Sử dụng lệnh
docker exec
để truy cập vào container ứng dụng web và kiểm tra kết nối với container Redis:bashdocker exec -it web-container sh
Bên trong container, sử dụng lệnh
ping
để kiểm tra kết nối với container Redis:shping redis-container
Nếu kết nối thành công, bạn sẽ thấy các gói tin
ping
được gửi và nhận.
Kết Luận
Việc nắm vững các câu lệnh Docker là rất quan trọng để làm việc hiệu quả với Docker. Bằng cách sử dụng các câu lệnh Docker, bạn có thể quản lý container, image, network, volume, và các thành phần khác của Docker một cách dễ dàng và hiệu quả. Việc hiểu rõ cách sử dụng các câu lệnh này sẽ giúp bạn tận dụng tối đa các lợi ích mà Docker mang lại. Bằng cách tuân theo các thực hành tốt nhất, bạn có thể đảm bảo rằng ứng dụng của mình sẽ hoạt động nhất quán và an toàn trên nhiều môi trường khác nhau.