# Docker - Sử dụng cơ bản

By [ESC Base](https://paragraph.com/@escbase) · 2024-09-12

---

### Hướng Dẫn Cơ Bản về Docker

Docker là một nền tảng mã nguồn mở cho phép bạn **tạo**, **triển khai**, và **chạy** các ứng dụng trong các container (thùng chứa). Container là các môi trường độc lập, cách ly giúp bạn đóng gói ứng dụng cùng với tất cả các phụ thuộc của nó, từ đó có thể chạy trên bất kỳ hệ thống nào hỗ trợ Docker mà không lo vấn đề tương thích.

### Lợi ích của Docker

*   **Nhẹ và nhanh**: Container chỉ chứa những thành phần cần thiết, nên nhẹ hơn so với máy ảo.
    
*   **Di động**: Chạy được trên bất kỳ hệ điều hành nào có Docker, giúp đảm bảo tính đồng nhất từ phát triển đến triển khai.
    
*   **Cách ly**: Mỗi container là một môi trường riêng biệt, không ảnh hưởng lẫn nhau.
    
*   **Quản lý dễ dàng**: Docker có sẵn công cụ để quản lý container, image, và phiên bản ứng dụng dễ dàng.
    

### Các thành phần chính của Docker

1.  **Docker Engine**: Là môi trường thực thi cho các container. Docker Engine là một dịch vụ chạy trên máy chủ để xây dựng và quản lý các container.
    
2.  **Docker Container**: Là một gói phần mềm đóng gói ứng dụng và tất cả các phụ thuộc cần thiết (thư viện, công cụ,...) trong một môi trường độc lập.
    
3.  **Docker Image**: Là bản mẫu (template) của container. Bạn có thể tạo container từ image này. Một image bao gồm toàn bộ mã ứng dụng, cấu hình và các tài nguyên phụ thuộc.
    
4.  **Docker Hub**: Là kho lưu trữ các image, tương tự như GitHub cho mã nguồn. Bạn có thể tìm kiếm và tải về các image từ Docker Hub, hoặc đẩy lên để chia sẻ.
    

### Cài Đặt Docker

Để bắt đầu sử dụng Docker, bạn cần cài đặt **Docker Desktop** (cho Windows, macOS) hoặc **Docker Engine** (cho Linux). Bạn có thể tải về tại trang chính thức của Docker: [docker.com](https://www.docker.com/products/docker-desktop).

**Cài đặt trên Ubuntu**:

    sudo apt-get update
    sudo curl -fsSL https://get.docker.com | bash
    docker --version
    

Cài docker-compose

    sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
    docker-compose --version
    

### Các lệnh cơ bản trong Docker

Dưới đây là một số lệnh Docker cơ bản để thao tác với container và image.

1.  **Kiểm tra phiên bản Docker**:
    
        docker --version
        
    
2.  **Chạy một container từ image**:
    
    Ví dụ, chạy một container với image `nginx`:
    
        docker run nginx
        
    
    Tùy chọn `-d` để chạy container trong chế độ nền:
    
        docker run -d nginx
        
    
3.  **Liệt kê các container đang chạy**:
    
4.  **Liệt kê tất cả container (bao gồm cả container đã dừng)**:
    
        docker ps -a
        
    
5.  **Dừng một container đang chạy**:
    
        docker stop <container_id>
        
    
6.  **Xóa một container**:
    
        docker rm <container_id>
        
    
7.  **Tải về image từ Docker Hub**:
    
    Tải về image của `nginx`:
    
8.  **Xem danh sách image trên máy**:
    
9.  **Xóa một image**:
    
        docker rmi <image_id>
        
    
10.  **Vào bên trong container**: Bạn có thể truy cập vào bên trong container giống như SSH vào một máy chủ.
    
    Mở terminal vào container:
    
        docker exec -it <container_id> /bin/bash
        
    

### Tạo Dockerfile

**Dockerfile** là một file chứa các lệnh để tạo Docker image. Bạn có thể sử dụng Dockerfile để định nghĩa môi trường và cài đặt ứng dụng tự động.

**Ví dụ một Dockerfile đơn giản**:

    # Sử dụng image cơ bản từ Ubuntu
    FROM ubuntu:20.04
    
    # Cài đặt các gói phụ thuộc
    RUN apt-get update && apt-get install -y \
        python3 \
        python3-pip
    
    # Copy mã nguồn vào container
    COPY . /app
    
    # Đặt thư mục làm việc
    WORKDIR /app
    
    # Chạy lệnh khi container khởi động
    CMD ["python3", "app.py"]
    

*   **FROM**: Chọn image cơ bản.
    
*   **RUN**: Chạy lệnh để cài đặt các gói hoặc thực hiện hành động.
    
*   **COPY**: Sao chép mã nguồn vào trong container.
    
*   **WORKDIR**: Đặt thư mục làm việc trong container.
    
*   **CMD**: Chỉ định lệnh sẽ chạy khi container khởi động.
    

### Build và chạy image từ Dockerfile

1.  **Build image** từ Dockerfile:
    
        docker build -t my-python-app .
        
    
2.  **Chạy container** từ image vừa build:
    
        docker run my-python-app
        
    

### Docker Compose

**Docker Compose** cho phép bạn quản lý và chạy nhiều container cùng lúc bằng cách định nghĩa trong một file `docker-compose.yml`. File này giúp cấu hình toàn bộ ứng dụng với nhiều container và liên kết chúng lại với nhau.

**Ví dụ về file** `docker-compose.yml`:

    version: '3'
    services:
      web:
        image: nginx
        ports:
          - "8080:80"
      database:
        image: mysql
        environment:
          MYSQL_ROOT_PASSWORD: example
    

*   **web** và **database** là hai dịch vụ container.
    
*   **nginx** và **mysql** là các image được sử dụng.
    
*   **ports**: ánh xạ cổng giữa máy chủ và container.
    
*   **environment**: cấu hình các biến môi trường.
    

1.  **Chạy tất cả các dịch vụ trong Docker Compose**:
    
2.  **Dừng các dịch vụ**:
    
3.  Xoá dữ liệu container:
    
        docker compose down -v
        
    
4.  Check logs:
    
        docker compose logs -f
        
    

### Kết Luận

Docker giúp bạn dễ dàng đóng gói và triển khai ứng dụng, đảm bảo sự đồng nhất trên nhiều môi trường. Các khái niệm như container, image, Dockerfile và Docker Compose giúp bạn quản lý ứng dụng dễ dàng, từ môi trường phát triển đến triển khai thực tế.

---

*Originally published on [ESC Base](https://paragraph.com/@escbase/docker-s-d-ng-c-b-n)*
