Lịch học Docker một buổi mỗi tuần, từ 5h đến 6h30 chiều vào thứ Tư. Dưới đây là lịch trình chi tiết cho từng buổi học, tập trung vào các khía cạnh quan trọng của Docker như cơ bản về container, Docker Compose, quản lý volume, mạng và các 1 vài vấn đề nâng cao khác.
Bài 1: Giới thiệu về Docker và Cài đặt
Trong buổi đầu tiên này, chúng ta sẽ tập trung vào việc hiểu rõ về Docker và Container, cùng với việc cài đặt Docker trên hệ OS.
- Container: Chứa tất cả mọi thứ mà một app (server, ) cần để chạy - code, công cụ, thư viện, và các cài đặt. Giúp code chạy một cách dễ dàng ở mọi nơi, dù đó là local hay server/vps.
- Docker: Docker là một công cụ chạy code ở mọi nơi. Chỉ cần đặt tất cả những gì cần thiết cho code của mình vào nó - code, môi trường, thư viện, và config - docker sẽ chạy code mọi nơi, từ local đến server.
- Khái niệm: Là 1 cái máy tính ảo trong 1 cái máy tính thật, cosplay y chang 1 cái máy tính, bao gồm cả phần cứng và phần mềm.
- Cách hoạt động: Mỗi máy ảo chạy trên một phần mềm gọi là hypervisor. Hypervisor này có thể nằm trên hệ OS (ví dụ: VMware Workstation, VirtualBox) hoặc chạy trực tiếp trên phần cứng (Type 1, ví dụ: VMware ESXi, Microsoft Hyper-V), quản lý việc phân bổ tài nguyên phần cứng (như CPU, RAM) cho mỗi VM.
- Cách sử dụng: Cài VMware Workstation, VirtualBox sau đó cài hệ OS, rồi dùng như 1 máy tính bình thường =)))
- Nhược điểm: Máy ảo thường tốn kém vì mỗi VM cần một bản sao đầy đủ của hệ OS, cùng với 1 đống thứ linh tinh mà vô dụng, tốn ổ cứng và ram, cpu của máy tính.
- Khái niệm Containers: Containers là môi trường chạy ứng dụng độc lập. Cung cấp không gian cần thiết (code, libs, tools) để app chạy mà không cần một hệ OS riêng. Containers dùng chung hệ OS của máy chủ nhưng vẫn tách biệt với nhau và tách biệt với hệ OS của máy.
- Docker và cách hoạt động: Docker là một phần mềm quản lý lifecycle của containers. Bao gồm build, run, stop và del containers. Docker dùng các tính năng của OS máy chủ để cung cấp env riêng biệt cho từng container, giúp chúng hoạt động một cách độc lập. (Namespaces, Control Groups (cgroups), Layered Filesystem, Network Isolation) --> đống này nằm trong docker daemon
- Cách sử dụng: Docker rất ngon trong việc phát triển, test, và triển khai code, đảm bảo code chạy ổn định mọi môi trường. Cho phép các dev gói code và môi trường của nó vào một container, di chuyển container từ môi trường dev đến prod.
- Ưu điểm: Containers nhẹ hơn nhiều so với máy ảo vì không cần một hệ OS đầy đủ; thay vào đó, chúng chia sẻ nhân của OS. Điều này giúp tiết kiệm tài nguyên hệ thống và cho phép khởi động nhanh rất nhanh.
- Khuyết điểm: Build image từ docker rất tốn disk, vì để build nhanh, cache thi nhau ăn disk tốn vl.
- Cài đặt: Tải và cài đặt Docker Desktop (Windows/Mac) hoặc Docker Engine (Linux).
- Kiểm tra Cài đặt: Sử dụng lệnh
docker --version
vàdocker run hello-world
để kiểm tra.
- Giới thiệu: Docker CLI là công cụ dòng lệnh mà bạn sử dụng để tương tác với Docker. Bằng cách sử dụng các lệnh trong terminal hoặc command prompt, bạn có thể tạo, chạy, dừng và quản lý containers và images của Docker.
-
docker run
: Dùng để tạo và chạy một container mới từ một image.- Ví dụ:
docker run hello-world
- Lệnh này sẽ tải và chạy imagehello-world
, một image đơn giản để kiểm tra xem Docker có hoạt động đúng không.
- Ví dụ:
-
docker pull
: Tải một image từ Docker Hub hoặc registry khác.- Ví dụ:
docker pull ubuntu
- Lệnh này sẽ tải image Ubuntu mới nhất.
- Ví dụ:
-
docker push
: Đẩy một image bạn đã tạo lên Docker Hub hoặc registry khác.- Ví dụ:
docker push myusername/myimage
- Đẩy imagemyimage
mà bạn đã tạo lên tài khoản của bạn trên Docker Hub.
- Ví dụ:
-
docker build
: Xây dựng một Docker image mới từ một Dockerfile.- Ví dụ:
docker build -t myimage .
- Lệnh này sẽ xây dựng một image mới với tagmyimage
từ Dockerfile trong thư mục hiện tại.
- Ví dụ:
-
docker images
: Liệt kê tất cả các Docker images trên máy của bạn.- Ví dụ:
docker images
- Hiển thị danh sách các images có sẵn trên máy tính của bạn.
- Ví dụ:
Hiểu rõ về Docker và container. Cài đặt Docker và làm quen với các lệnh cơ bản. Còn mấy cái flags dùng để làm gì hãy sao thì cứ mò docker --help nhé.
Bài 2: Docker Container Basics
Học cách sử dụng Docker containers, bao gồm cách tạo, chạy, và quản lý chúng.
- Định nghĩa: Một container là nơi chứa một source code và tất cả những gì cần thiết để chạy cái source đó (code, runtime, libs, env, v.v.).
- Cách hoạt động: Containers chạy trên cùng một OS nhưng được tách biệt với nhau và tách biệt OS. Điều này đảm bảo rằng chúng sử dụng tài nguyên hiệu quả và không gây xung đột.
docker run
: Lệnh này tạo và khởi động một container mới. Nếu image cần thiết không có sẵn trên máy, Docker sẽ tự động tải image đó từ Docker Hub hoặc registry đã định.- Ví dụ:
docker run nginx
- Lệnh này sẽ tải và chạy container từ imagenginx
. - Các tùy chọn:
-d
để chạy container ở chế độ "detached" (terminal của mình sẽ thành terminal của container).-p
để chuyển tiếp cổng, ví dụ-p 81:80
chuyển tiếp cổng 80 từ container sang cổng 81 trên máy chủ.
- Ví dụ:
docker ps
: Liệt kê tất cả các container đang chạy. Sử dụngdocker ps -a
để xem tất cả các container, bao gồm cả những container đã dừng.docker stop <container_id>
: Dừng một container đang chạy.docker start <container_id>
: Khởi động lại container đã dừng.docker rm <container_id>
: Xóa bỏ một container đã dừng.
docker exec
: Thực thi một lệnh trong container đang chạy.- Ví dụ:
docker exec -it <container_id> bash
- Mở một shell bash trong container cho phép tương tác trực tiếp.
- Ví dụ:
Làm quen với việc tạo, chạy và quản lý Docker containers.
Bài 3: Docker Images
Hiểu về Docker images, cách tạo và quản lý chúng.
- Định nghĩa: Docker images là các template để tạo container. image định nghĩa code, các libs, file cần thiết và cài đặt môi trường. Khi bạn chạy một image, Docker sẽ sử dụng nó để tạo một container mới.
- Cách hoạt động: Images trong Docker được xây dựng từ các layers. Mỗi layer giống như commit các thay đổi so với layer trước. Khi bạn cập nhật image, layer nào thay đổi thì sẽ commit lên layer đó.
docker build
: Tạo một Docker image mới từ một Dockerfile.- Ví dụ:
docker build -t myapp .
- Lệnh này sẽ xây dựng một Docker image với tênmyapp
từ Dockerfile trong thư mục hiện tại.
- Ví dụ:
docker images
: Liệt kê các Docker images có trên máy của bạn.docker rmi <image_id>
: Xóa một Docker image.
- Định nghĩa: Dockerfile là một tập tin văn bản chứa tất cả các lệnh, theo một trình tự cụ thể, để tạo ra một image.
- Ví dụ Dockerfile cơ bản:
# Sử dụng image gốc FROM ubuntu:22.04 # Cài đặt các phần mềm cần thiết RUN apt-get update && apt-get install -y python # Copy mã nguồn vào container COPY . /app # Đặt thư mục làm việc WORKDIR /app # Chạy ứng dụng CMD ["python", "app.py"]
- Giải thích: Dockerfile này bắt đầu từ một image Ubuntu, cài đặt Python, sao chép mã nguồn vào container, thiết lập thư mục làm việc và chỉ định lệnh để chạy ứng dụng.
- Ví dụ Dockerfile cơ bản:
Bài 4: Volume và Persistent Data trong Docker
Hiểu cách lưu trữ và quản lý dữ liệu bền vững trong Docker sử dụng Docker volumes.
- Định nghĩa: Docker volume là một cơ chế được quản lý bởi Docker để lưu trữ hoặc chia sẻ dữ liệu giữa các container và máy chủ. Volumes được sử dụng để lưu trữ dữ liệu bền vững và chia sẻ dữ liệu giữa các container.
- Cách sử dụng:
- Tạo Volume:
docker volume create my_volume
- Sử dụng Volume trong Container:
docker run -d -v my_volume:/data my_image
- Trong ví dụ này,
my_volume
là tên của volume, và/data
là thư mục trong container nơi volume được gắn.
- Tạo Volume:
- Khái niệm: Bind mount là một cách khác để lưu trữ dữ liệu. Nó cho phép bạn gắn một thư mục hoặc tệp tin từ máy chủ vào container.
- Cách sử dụng:
- Tạo Bind Mount:
docker run -d -v /path/to/data:/data my_image
- Trong đó,
/path/to/data
là đường dẫn tới thư mục hoặc tệp tin trên máy chủ và/data
là thư mục trong container.
- Tạo Bind Mount:
- Giới thiệu: Tmpfs mount tạo ra một không gian lưu trữ tạm thời trên RAM của máy chủ. Dữ liệu được lưu trữ trong tmpfs mount sẽ mất khi container bị dừng hoặc xóa.
- Cách sử dụng:
docker run -d --tmpfs /tmp my_image
- Trong ví dụ này,
/tmp
là thư mục trong container sẽ được lưu trữ trên RAM.
- Liệt kê Volumes:
docker volume ls
- Xem thông tin chi tiết Volume:
docker volume inspect my_volume
- Xóa Volume:
docker volume rm my_volume
Việc quản lý dữ liệu bền vững trong Docker thông qua việc sử dụng volumes, bind mounts, và tmpfs mounts là yếu tố quan trọng trong việc triển khai ứng dụng. Nó cho phép dữ liệu của bạn tồn tại độc lập với lifecycle của container.
Bài 5: Networking trong Docker
Hiểu cách thức mạng hoạt động trong Docker và cách thiết lập mạng cho containers.
- Bridge: Mạng mặc định cho containers. Khi bạn chạy một container mà không chỉ định mạng, nó tự động kết nối vào mạng bridge này.
- Host: Kết nối container trực tiếp với mạng của máy chủ. Containers sử dụng mạng này có thể hiệu suất mạng cao hơn và không cần NAT qua Docker host.
- None: Không cung cấp mạng cho container. Thường được sử dụng cho các tác vụ cần cô lập mạng.
- User-defined bridge: Cho phép tạo các mạng bridge tùy chỉnh, tăng cường sự cô lập và quản lý mạng giữa các container.
- Tạo User-defined bridge network:
docker network create --driver bridge my_bridge
- Chạy container trên User-defined network:
docker run -d --network=my_bridge my_image
- Port Mapping: Chuyển tiếp cổng từ máy chủ đến container.
docker run -p 80:80 nginx
- Trong ví dụ này, cổng 80 trên máy chủ sẽ được chuyển tiếp đến cổng 80 trên container chạy Nginx.
- Exposing Ports: Khi xây dựng một image, có thể sử dụng lệnh
EXPOSE
trong Dockerfile để chỉ định các cổng nên được mở.- Ví dụ trong Dockerfile:
EXPOSE 80
- Ví dụ trong Dockerfile:
- User-defined networks: Tạo môi trường cho các container giao tiếp với nhau một cách dễ dàng.
- Các container trên cùng một user-defined network có thể giao tiếp với nhau bằng tên container.
Hiểu về networking trong Docker và cách thiết lập mạng cho containers là rất quan trọng. Nó cho phép cấu hình giao tiếp giữa các container cũng như giữa container và mạng bên ngoài.
Tuần 6: Docker Compose
Tìm hiểu và sử dụng Docker Compose để quản lý và chạy ứng dụng đa container.
- Định nghĩa: Docker Compose là một công cụ giúp định nghĩa và chạy ứng dụng đa container với Docker.
- Cách hoạt động: Sử dụng một file YAML để cấu hình dịch vụ của bạn (các containers, mạng, volumes, v.v.). Sau đó, với một lệnh đơn giản, bạn có thể tạo và bắt đầu tất cả dịch vụ từ cấu hình đó.
- docker-compose.yml: File này chứa cấu hình cần thiết để thiết lập và chạy ứng dụng của bạn.
- Ví dụ cấu hình cơ bản:
version: '3' services: web: image: nginx ports: - "80:80" database: image: postgres environment: POSTGRES_PASSWORD: example
Trong ví dụ này, Có hai service: web (sử dụng image nginx) và database (sử dụng image postgres).
- Chạy ứng dụng: docker-compose up - Lệnh này sẽ read file docker-compose.yml, build (nếu cần) và run tất cả các service được định nghĩa.
- Dừng ứng dụng: docker-compose down - Dừng và xóa tất cả các resource được tạo ra bởi docker-compose up.
- Sử dụng: Docker Compose là 1 build image , viết 1 file chạy được nhiều server với nhau
Docker Compose là công cụ cho việc quản lý ứng dụng dùng nhiều container, đỡ quá tạo nhiều file cấu hình và hỗ trợ khả năng tái sử dụng cấu hình.
Bài 7: Quản lý Logs và Debugging trong Docker
Tìm hiểu cách xem logs và debugging containers.
- Sử dụng
docker logs
và các options khác. - Theo dõi logs của containers.
- Các phương pháp và công cụ để debug containers.
- Tìm và giải quyết vấn đề trong containers.
- Sử dụng
docker events
để theo dõi hoạt động của containers. - Hiểu và phản ứng với các sự kiện trong Docker.
Khả năng quản lý logs và debugging là cần thiết để duy trì và giải quyết các vấn đề trong ứng dụng Docker của bạn.
Bài 8: Docker Security
Tìm hiểu về các best practices để bảo mật containers và ứng dụng Docker.
- Các phương pháp tốt nhất để bảo mật Docker containers.
- Quản lý người dùng và quyền truy cập trong Docker.
- Bảo mật Docker images.
- Bảo mật giao tiếp giữa containers.
Bảo mật là một phần quan trọng không thể bỏ qua khi triển khai ứng dụng, đặc biệt là trong môi trường sản xuất.
Bài 9: Docker Registry
Tìm hiểu về Docker Registry và cách làm việc với nó.
- Hiểu về Docker Registry và mục đích sử dụng.
- Thực hành push và pull images từ/tới Docker Registry.
- Cài đặt và quản lý registry riêng của bạn.
Hiểu biết về cách lưu trữ và quản lý Docker images sử dụng Docker Registry.