[Docker Basics] Hướng dẫn các câu lệnh để khởi chạy Docker Container

Docker đã và đang cách mạng hóa cách chúng ta phát triển, triển khai và vận hành ứng dụng. "Container hóa" không còn là một thuật ngữ xa lạ mà đã trở thành một kỹ năng thiết yếu cho các lập trình viên và quản trị viên hệ thống. Trái tim của Docker chính là các container - những môi trường đóng gói, nhẹ và độc lập, đảm bảo ứng dụng của bạn chạy nhất quán trên mọi môi trường.

Hướng dẫn các câu lệnh để khởi chạy Docker Container

Bài viết này sẽ dẫn bạn đi từ những bước đầu tiên đến việc làm chủ cách chạy và quản lý Docker container một cách hiệu quả và chuyên nghiệp. Dù bạn là người mới tìm hiểu hay đã có kinh nghiệm, bạn đều sẽ tìm thấy những thông tin hữu ích và cuốn hút.

Docker Container là gì? Tại sao nó lại quan trọng?

Hãy tưởng tượng bạn đang đóng gói hành lý cho một chuyến đi. Thay vì vứt tất cả đồ đạc vào một chiếc vali lớn một cách lộn xộn, bạn sử dụng các túi đóng gói nhỏ hơn: một cho quần áo, một cho đồ vệ sinh cá nhân, một cho thiết bị điện tử. Mỗi chiếc túi này đều độc lập và chứa mọi thứ cần thiết cho một mục đích cụ thể.

Docker container cũng hoạt động tương tự. Nó là một gói tiêu chuẩn, thực thi được, bao gồm mọi thứ mà một ứng dụng cần để chạy: mã nguồn, runtime, các công cụ hệ thống, thư viện và cài đặt. Điều này đảm bảo rằng ứng dụng sẽ luôn hoạt động giống nhau, bất kể nó được triển khai ở đâu - trên máy tính cá nhân của bạn, trên máy chủ của đồng nghiệp hay trên đám mây.

Docker Container là gì

Lợi ích chính:

  • Tính nhất quán: Giải quyết triệt để vấn đề "trên máy tôi chạy được, sao trên máy anh lại lỗi?".
  • Tính di động: Dễ dàng di chuyển ứng dụng giữa các môi trường khác nhau.
  • Hiệu quả tài nguyên: Container nhẹ hơn và khởi động nhanh hơn nhiều so với máy ảo truyền thống.
  • Khả năng mở rộng: Dễ dàng tạo ra nhiều phiên bản của một ứng dụng để xử lý tải cao.

Lệnh docker run: Khởi đầu mọi cuộc chơi

Lệnh docker run là cánh cổng đầu tiên để bạn bước vào thế giới container. Về cơ bản, lệnh này sẽ tạo ra một container mới từ một image (khuôn mẫu) và khởi chạy nó.

Cú pháp cơ bản:

docker run [TÙY_CHỌN] TÊN_IMAGE[:TAG] [LỆNH] [THAM_SỐ...]
  • TÊN_IMAGE: Tên của khuôn mẫu bạn muốn sử dụng (ví dụ: nginx, ubuntu, mysql).
  • TAG: Phiên bản cụ thể của image (ví dụ: nginx:latest, ubuntu:20.04). Nếu bỏ qua, Docker sẽ mặc định sử dụng tag latest.

Ví dụ kinh điển "Hello World": Hãy thử chạy container đầu tiên của bạn:

docker run hello-world

Nếu bạn chưa có image hello-world trên máy, Docker sẽ tự động tìm và tải nó về từ Docker Hub (kho lưu trữ image công cộng lớn nhất), sau đó tạo và chạy container. Bạn sẽ thấy một thông điệp chào mừng, xác nhận rằng cài đặt Docker của bạn đã thành công!

Các tùy chọn phổ biến khi chạy Container

Để khai thác hết sức mạnh của docker run, bạn cần làm quen với các tùy chọn (còn gọi là "cờ" hay "flags"). Dưới đây là những tùy chọn quan trọng nhất mà bạn sẽ sử dụng hàng ngày:

Chạy ngầm (Detached Mode) với -d

Khi bạn chạy một ứng dụng web (như Nginx), bạn không muốn terminal của mình bị "khóa" bởi tiến trình đó. Tùy chọn -d (hoặc --detach) sẽ giúp container chạy ở chế độ nền.

docker run -d --name my-web-server nginx

Lệnh này sẽ khởi chạy một container Nginx chạy ngầm và trả về cho bạn ID của container đó.

Ánh xạ cổng (Port Mapping) với -p

Container có hệ thống mạng riêng, biệt lập với máy chủ của bạn (host). Để có thể truy cập ứng dụng đang chạy trong container từ bên ngoài, bạn cần "ánh xạ" một cổng trên máy host vào một cổng trong container.

Cú pháp: -p HOST_PORT:CONTAINER_PORT

docker run -d -p 8080:80 --name my-web-server nginx

Với lệnh trên, mọi truy cập vào cổng 8080 của máy host sẽ được chuyển tiếp đến cổng 80 của container Nginx. Bây giờ, hãy mở trình duyệt và truy cập http://localhost:8080, bạn sẽ thấy trang chào mừng của Nginx.

Đặt tên dễ nhớ với --name

Docker tự động tạo ra những cái tên ngẫu nhiên cho container (ví dụ: angry_torvalds). Để dễ quản lý, bạn nên tự đặt tên cho chúng bằng tùy chọn --name.

docker run -d -p 8080:80 --name my-nginx-app nginx

Tương tác trực tiếp với -it

Đôi khi, bạn muốn "chui vào" bên trong container để thực thi lệnh, chẳng hạn như truy cập vào một shell. Tùy chọn -it (kết hợp của -i cho interactive và -t cho TTY) cho phép bạn làm điều đó.

docker run -it ubuntu bash

Lệnh này sẽ khởi chạy một container từ image Ubuntu và mở ra một giao diện dòng lệnh bash bên trong container đó. Bạn sẽ thấy dấu nhắc lệnh thay đổi, cho biết bạn đang ở trong môi trường của container.

Gắn dữ liệu (Volumes) với -v

Dữ liệu được tạo ra bên trong một container sẽ bị mất khi container đó bị xóa. Để lưu trữ dữ liệu một cách bền vững, chúng ta sử dụng volumes. Volume sẽ liên kết một thư mục trên máy host với một thư mục bên trong container.

Cú pháp: -v /duong/dan/tren/may/host:/duong/dan/trong/container

docker run -d -p 8080:80 --name my-website -v /path/to/your/html:/usr/share/nginx/html nginx

Với lệnh này, bạn có thể chỉnh sửa các file HTML trong thư mục /path/to/your/html trên máy host, và những thay đổi đó sẽ được phản ánh ngay lập tức trên trang web chạy trong container.

Quản lý vòng đời Container

Sau khi đã chạy container, bạn cần biết cách quản lý chúng.

Docker Container Lifecycle

Dưới đây là các lệnh thiết yếu:

  • Liệt kê các container đang chạy:
    docker ps
    
  • Liệt kê tất cả container (kể cả đã dừng):
    docker ps -a
    
  • Dừng một container:
    docker stop <container_id_hoac_ten>
    
  • Khởi động lại một container đã dừng:
    docker start <container_id_hoac_ten>
    
    Lưu ý: docker run là để tạo mới và chạy, trong khi docker start là để chạy lại một container đã có sẵn (đã bị dừng).
  • Xem log của container:
    docker logs <container_id_hoac_ten>
    
    Thêm tùy chọn -f để theo dõi log theo thời gian thực: docker logs -f <container_name>.
  • Truy cập vào một container đang chạy:
    docker exec -it <container_id_hoac_ten> bash
    
    Lệnh exec cho phép bạn thực thi một lệnh mới bên trong một container đang chạy mà không cần phải dừng và khởi động lại nó.
  • Xóa một container:
    docker rm <container_id_hoac_ten>
    
    Bạn chỉ có thể xóa các container đã dừng. Để xóa một container đang chạy, hãy thêm cờ -f (force): docker rm -f <container_name>.

Bước tiếp theo: Docker Compose cho ứng dụng đa Container

Khi ứng dụng của bạn trở nên phức tạp hơn, bao gồm nhiều dịch vụ (ví dụ: một web server, một database, một cache), việc quản lý từng container bằng các lệnh docker run dài ngoằng sẽ trở nên cồng kềnh.

Đây là lúc Docker Compose "bước ra và tỏa sáng". Nó là một công cụ cho phép bạn định nghĩa và chạy các ứng dụng Docker đa container bằng một file cấu hình duy nhất có tên là docker-compose.yml.

Giải thích về Docker Compose

Ví dụ file docker-compose.yml cho một ứng dụng WordPress:

version: '3.8'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: somerootpassword
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpresspassword

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - '8000:80'
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpresspassword

volumes:
  db_data:

Với file này, bạn chỉ cần chạy một lệnh duy nhất để khởi động toàn bộ ứng dụng:

docker-compose up -d

Và để dừng tất cả:

docker-compose down

Docker Compose giúp đơn giản hóa đáng kể việc quản lý các kiến trúc phức tạp, là một công cụ không thể thiếu trong quy trình làm việc hiện đại.

Kết luận: Khởi chạy Docker Container là một kỹ năng nền tảng

Khởi chạy container trong Docker là một kỹ năng nền tảng, tuy đơn giản nhưng vô cùng mạnh mẽ. Bằng cách nắm vững lệnh docker run cùng các tùy chọn phổ biến và hiểu rõ cách quản lý vòng đời của container, bạn đã có trong tay chìa khóa để xây dựng và triển khai ứng dụng một cách hiệu quả, nhất quán và đáng tin cậy.

Hành trình với Docker còn rất nhiều điều thú vị phía trước như xây dựng image của riêng bạn với Dockerfile, tối ưu hóa bảo mật, hay khám phá các hệ thống điều phối container như Kubernetes. Hãy bắt đầu từ những lệnh cơ bản này, thực hành thường xuyên, và bạn sẽ sớm làm chủ được công nghệ tuyệt vời này. Chúc bạn thành công!

Bài viết liên quan

[Docker Basics] Hướng dẫn cài đặt Docker chi tiết trên Windows, macOS và Linux

Làm thế nào để cài đặt Docker? Hướng dẫn từng bước cho hệ điều hành Windows, Mac và Linux. Giúp bạn cài Docker Desktop và Docker Engine một cách dễ dàng nhất.

[Docker Basics] Hướng dẫn cách build Docker Image đơn giản, hiệu quả

Bạn muốn build Docker Image một cách chuyên nghiệp? Bài viết này sẽ hướng dẫn chi tiết từng bước, từ Dockerfile cơ bản đến các mẹo tối ưu hóa để Docker Image của bạn gọn nhẹ và hiệu quả.

[Docker Basics] Docker Networking: Hướng dẫn xử lý vấn đề kết nối Container

Nắm vững kiến thức về Docker networking để tối ưu hiệu suất và bảo mật cho các ứng dụng của bạn. Hướng dẫn chi tiết cách tạo và cấu hình mạng, giúp bạn liên kết các container một cách dễ dàng và hiệu quả.

[Docker Basics] Docker Hub: Cách lưu trữ và quản lý Docker Image chuyên nghiệp

Bạn đang gặp khó khăn trong việc quản lý Docker Image? Tìm hiểu Docker Hub và các bí kíp để đẩy, kéo và quản lý kho Image của bạn một cách chuyên nghiệp.