Tổng quan về Docker và các khái niệm cơ bản

Docker là một công cụ mạnh mẽ cho việc xây dựng, đóng gói và triển khai ứng dụng. Nó cho phép ta tạo ra môi trường độc lập cho ứng dụng mà không cần phải lo lắng về việc cài đặt các phần mềm, thư viện và các yêu cầu khác. Trong bài viết này, chúng ta sẽ tìm hiểu về Docker và các khái niệm cơ bản liên quan đến nó.

Docker là gì?

Docker là một nền tảng cho việc triển khai ứng dụng trong môi trường container. Nó cho phép ta đóng gói các ứng dụng và các yêu cầu của chúng vào một container duy nhất. Container là một môi trường độc lập, chứa tất cả các phần mềm, thư viện và yêu cầu khác cần thiết để chạy ứng dụng.

Docker cho phép ta triển khai các ứng dụng một cách đơn giản và dễ dàng trên nhiều nền tảng khác nhau. Nó cung cấp một cách tiêu chuẩn để đóng gói và triển khai ứng dụng, giúp tối ưu hóa sự di chuyển và triển khai ứng dụng trên môi trường khác nhau.

Các khái niệm cơ bản trong Docker

Image

Image là một bản sao của một môi trường sẵn có, chứa tất cả các yêu cầu và phần mềm cần thiết để chạy ứng dụng. Image là một tệp không thể thay đổi và được sử dụng để tạo container.

Bạn có thể tạo ra một image bằng cách sử dụng Dockerfile, một tệp cấu hình định nghĩa cách tạo image.

Container

Container là một môi trường độc lập chứa tất cả các phần mềm, thư viện và yêu cầu khác cần thiết để chạy ứng dụng. Container được tạo ra từ một image và có thể bị xóa hoặc tạm dừng bất kỳ lúc nào.

Dockerfile

Dockerfile là tệp cấu hình định nghĩa cách tạo image. Nó chứa các hướng dẫn cho Docker để tạo ra một image, bao gồm cài đặt các phần mềm, cấu hình môi trường và các yêu cầu khác.

Docker Compose

Docker Compose là một công cụ giúp quản lý và triển khai các ứng dụng phức tạp, đặc biệt là các ứng dụng có nhiều container. Nó cho phép ta tạo ra các môi trường độc lập cho các container và kết nối chúng với nhau.

Docker Registry

Docker Registry là một kho lưu trữ chứa các image của Docker. Nó cho phép ta tải xuống và chia sẻ các image với người dùng khác.

Ví dụ minh họa

Giả sử bạn muốn triển khai một ứng dụng web sử dụng Flask và MySQL. Để làm được điều này, ta cần tạo hai image: một image cho Flask và một image cho MySQL.

Đầu tiên, ta sẽ tạo image cho Flask bằng cách tạo một Dockerfile với nộidung như sau:

FROM python:3.9-alpine

COPY requirements.txt /app/requirements.txt

RUN pip install -r /app/requirements.txt

COPY . /app

WORKDIR /app

CMD ["python", "app.py"]

Trong Dockerfile này, ta định nghĩa image sẽ được tạo từ image python:3.9-alpine. Sau đó, ta sao chép tệp requirements.txt vào container và cài đặt các yêu cầu bằng lệnh pip install. Tiếp theo, ta sao chép tất cả các tệp trong thư mục hiện tại vào container và đặt thư mục làm thư mục làm việc. Cuối cùng, ta khai báo lệnh để chạy Flask trong container.

Sau đó, ta sẽ tạo image cho MySQL bằng cách sử dụng image chính thức của MySQL trên Docker Hub và chỉnh sửa cấu hình như sau:

FROM mysql:8.0

ENV MYSQL_DATABASE=myapp
ENV MYSQL_USER=myuser
ENV MYSQL_PASSWORD=mypassword
ENV MYSQL_ROOT_PASSWORD=password

COPY init.sql /docker-entrypoint-initdb.d/

Trong Dockerfile này, ta định nghĩa image sẽ được tạo từ image chính thức của MySQL trên Docker Hub. Sau đó, ta đặt các biến môi trường cho cơ sở dữ liệu, bao gồm tên cơ sở dữ liệu, tên người dùng và mật khẩu. Cuối cùng, ta sao chép tệp init.sql vào container để chạy các lệnh SQL ban đầu cho cơ sở dữ liệu.

Sau khi ta đã tạo hai image cho Flask và MySQL, ta có thể sử dụng Docker Compose để tạo các container và kết nối chúng với nhau. Ví dụ, ta có thể tạo một tệp docker-compose.yml với nội dung như sau:

version: '3'

services:
  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - db
  db:
    build: ./db
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: password

Trong tệp này, ta định nghĩa hai service: web và db. Service web sử dụng image được xây dựng từ Dockerfile trong thư mục hiện tại và được đăng ký cổng 5000. Service db sử dụng image được xây dựng từ Dockerfile trong thư mục db và được đăng ký cổng 3306. Ngoài ra, ta cũng đặt biến môi trường cho cơ sở dữ liệu.

Sau khi ta đã tạo tệp docker-compose.yml, ta có thể chạy lệnh docker-compose up để tạo các container và kết nối chúng với nhau. Khi các container đang chạy, ta có thể truy cập ứng dụng web bằng cách truy cập địa chỉ http://localhost:5000 trong trình duyệt.

Kết luận

Trong bài viết này, chúng ta đã tìm hiểu về Docker và các khái niệm cơ bản liên quan đến nó, bao gồm image, container, Dockerfile, Docker Compose và Docker Registry. Chúng ta cũng đã xem xét một ví dụ về cách tạo các image và container cho một ứng dụng web sử dụng Flask và MySQL. Docker là một công cụ rất hữu ích trong việc triển khai ứng dụng và giúp cho việc di chuyển và triển khai ứng dụng trở nên đơn giản và dễ dàng hơn.