Course Content
1. DevOps overview
DevOps là gì
0/1
4. Kubernetes từ cơ bản đến nâng cao
0/20
8. Monitoring, Logging và Tracing
Khóa Học: DevOps Zero to Hero. (Đăng nhập để xem các video 1 cách miễn phí)

Cơ bản về Docker:

  1. Container:

    • Container là một “phần mềm nhẹ” chạy trong môi trường riêng biệt, giúp ứng dụng của bạn hoạt động một cách độc lập và không ảnh hưởng đến hệ thống chính. Mỗi container chứa đầy đủ tất cả các thứ mà ứng dụng cần để chạy, ví dụ như hệ điều hành, thư viện phần mềm, cấu hình, v.v.
  2. Docker Image:

    • Docker image là một bản sao “cố định” của một ứng dụng hoặc môi trường, ví dụ như ứng dụng WordPress, Apache, PHP, v.v. Bạn có thể tạo Docker image từ Dockerfile hoặc tải xuống từ Docker Hub (kho chứa các Docker image công khai).
  3. Dockerfile:

    • Dockerfile là một tệp văn bản chứa các lệnh hướng dẫn Docker tạo ra một Docker image. Tệp này giúp bạn định nghĩa cách cài đặt phần mềm, cấu hình hệ thống, sao chép tệp, và thiết lập các yếu tố khác trong môi trường container.

Giải thích Dockerfile

FROM ubuntu:20.04

Dòng này chỉ ra rằng bạn đang sử dụng hệ điều hành Ubuntu 20.04 làm nền tảng để xây dựng Docker image. Đây là hệ điều hành cơ sở.

ENV DEBIAN_FRONTEND=noninteractive

Lệnh này tắt các yêu cầu tương tác trong quá trình cài đặt, khiến quá trình diễn ra tự động mà không cần người dùng can thiệp.

Dòng này sẽ cài đặt tất cả các phần mềm cần thiết vào trong container, bao gồm Apache, PHP và các extension của PHP, các công cụ như wget, curl, git, v.v. Lệnh này dùng để cài đặt các phần mềm qua trình quản lý gói của Ubuntu (apt-get).

RUN a2enmod rewrite

Lệnh này bật module rewrite của Apache, giúp bạn có thể sử dụng các URL thân thiện (SEO-friendly URLs) trong WordPress.

Lệnh này tải WordPress từ trang chính thức và giải nén vào thư mục web của Apache. Sau đó, thay đổi quyền sở hữu các tệp của WordPress để Apache có thể sử dụng chúng.

COPY ./000-default.conf /etc/apache2/sites-available/000-default.conf:

Lệnh này sao chép một tệp cấu hình Apache từ máy chủ của bạn vào container. Tệp này có thể chứa các thiết lập tùy chỉnh cho Apache (ví dụ: cài đặt trang mặc định của WordPress).

EXPOSE 80

Lệnh này “mở” cổng 80 trong container, cổng mặc định để chạy web server (Apache).

WORKDIR /var/www/html/wordpress

Lệnh này thiết lập thư mục làm việc của container là thư mục WordPress mà bạn vừa giải nén. Mọi lệnh tiếp theo sẽ thực thi từ thư mục này.

CMD ["apachectl", "-D", "FOREGROUND"]

Đây là lệnh để khởi động Apache web server trong chế độ nền (foreground), giúp container vẫn tiếp tục chạy.

Các bước để chạy Docker:

Build Docker Image: Bạn cần tạo Docker image từ Dockerfile bằng cách sử dụng lệnh sau:

docker build -t wordpress-apache .

Lệnh này sẽ tạo một image có tên là wordpress-apache từ Dockerfile trong thư mục hiện tại (.).

Chạy Docker Container: Sau khi đã tạo được Docker image, bạn có thể chạy container từ image đó:

docker run -d -p 8080:80 --name wordpress-container wordpress-apache

Lệnh này sẽ chạy container với tên là wordpress-container từ image wordpress-apache. Cổng 8080 trên máy của bạn sẽ được chuyển tiếp đến cổng 80 trong container, nghĩa là bạn có thể truy cập WordPress tại http://localhost:8080.

Extend:

Trong Dockerfile, CMDENTRYPOINT đều được dùng để xác định chương trình hoặc lệnh mà container sẽ chạy khi bắt đầu. Tuy nhiên, chúng có sự khác biệt về mục đích và cách sử dụng.

Ví dụ sử dụng CMD:
Dockerfile sử dụng CMD

FROM ubuntu:latest

# Cài đặt curl
RUN apt-get update && apt-get install -y curl

# Lệnh mặc định chạy khi container khởi động
CMD ["curl", "--version"]

Khi bạn build và chạy container:

docker build -t mycmd .
docker run mycmd

Kết quả: Container sẽ thực thi câu lệnh mặc định curl –version, in ra phiên bản curl, rồi thoát ngay lập tức

Bạn vẫn có thể ghi đè lệnh mặc định ở runtime:

docker run mycmd curl https://google.com

Lúc này, Docker sẽ không chạy lệnh mặc định nữa, mà chạy theo câu lệnh bạn vừa nhập

Ví dụ sử dụng ENTRYPOINT:
Dockerfile sử dụng ENTRYPOINT

FROM ubuntu:latest

# Cài đặt curl
RUN apt-get update && apt-get install -y curl

# ENTRYPOINT sẽ luôn được chạy và nhận tham số từ CMD hoặc từ bên ngoài
ENTRYPOINT ["curl"]

# CMD ở đây đóng vai trò cung cấp tham số mặc định
CMD ["--version"]

Khi build và chạy mặc định:

docker build -t myentrypoint .
docker run myentrypoint

Tóm tắt dễ hiểu:
CMD:

Là lệnh mặc định container sẽ chạy.
Có thể dễ dàng ghi đè toàn bộ câu lệnh khi chạy.
ENTRYPOINT:

Luôn luôn được thực thi mỗi khi container khởi động.
Thường dùng làm điểm khởi đầu, còn CMD đóng vai trò tham số mặc định.

Exercise Files
Dockerfile-wordpress.txt
Size: 709.00 B
000-default.txt
Size: 191.00 B
0% Complete