1 Giớithiệu 3 1.1 Tổngquanvềcontainerization . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 MụcđíchvàýnghĩacủaDocker . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Mụctiêucủabàibáocáo. . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 BốicảnhcủaDocker 3 2.1 Sựtiếnhóacủacáccôngnghệcontainerization . . . . . . . . . . . . . . 4 2.2 TạisaoDockertrởthànhmộtnềntảngcontainerphổbiến . . . . . . . . 4 3 Dockerlàgì? 5 3.1 ĐịnhnghĩavàcáckháiniệmcốtlõicủaDocker . . . . . . . . . . . . . . 5 3.2 Sosánhvớimáyảo(VMs) . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.3 KiếntrúcvàcácthànhphầncủaDocker . . . . . . . . . . . . . . . . . . 6 4 DockerUseCases 8 5 BắtđầuvớiDocker 8 5.1 Càiđặtvàthiếtlậptrêncácnềntảngkhácnhau(Windows,macOS,Linux) 8 5.2 Chạycontainerđầutiêncủabạn . . . . . . . . . . . . . . . . . . . . . . 9 5.3 CáclệnhvàthaotáccơbảncủaDocker . . . . . . . . . . . . . . . . . . 9 6 CáckháiniệmcốtlõicủaContainer 10 6.1 ContainerLifeCircle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 6.2 CáccâulệnhbêntrongContainer . . . . . . . . . . . . . . . . . . . . . . 10 6.3 PortMapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 6.4 LogsTrace. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 6.5 Volumebindmount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 7 DockerfilevàDockerCompose 12 7.1 ViếtDockerfilesđểxâydựngcácảnhtùychỉnh . . . . . . . . . . . . . . 12 7.2 BuildContext .dockerignore . . . . . . . . . . . . . . . . . . . . . . . . 13 7.3 SửdụngDockerComposechocácứngdụngđacontainer . . . . . . . . . 13 1 8 Mạng và Volumes 15 8.1 Hiểu về mạng Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 8.2 Quản lý dữ liệu với Docker volumes . . . . . . . . . . . . . . . . . . . . . 16 9 Docker Demo 10 Thách thức và những điều cần cân nhắc 11 References 16 16 18
Khoa Công nghệ thông tin Đại học Công nghệ – Đại học Quốc gia Hà Nội Tìm hiểu Docker Nguyễn Xuân Hòa 21020072@vnu.edu.vn Trịnh Văn Khánh 21020343@vnu.edu.vn Mục lục Giới thiệu 1.1 Tổng quan containerization 1.2 Mục đích ý nghĩa Docker 1.3 Mục tiêu báo cáo Bối cảnh Docker 2.1 Sự tiến hóa cơng nghệ containerization 2.2 Tại Docker trở thành tảng container phổ biến Docker gì? 3.1 Định nghĩa khái niệm cốt lõi Docker 3.2 So sánh với máy ảo (VMs) 3.3 Kiến trúc thành phần Docker Docker Use Cases Bắt đầu với Docker 5.1 Cài đặt thiết lập tảng khác (Windows, macOS, Linux) 5.2 Chạy container bạn 5.3 Các lệnh thao tác Docker Các khái niệm cốt lõi Container 10 6.1 Container Life Circle 10 6.2 Các câu lệnh bên Container 10 6.3 Port Mapping 11 6.4 Logs Trace 11 6.5 Volume - bind mount 11 Dockerfile Docker Compose 12 7.1 Viết Dockerfiles để xây dựng ảnh tùy chỉnh 12 7.2 Build Context - dockerignore 13 7.3 Sử dụng Docker Compose cho ứng dụng đa container 13 Mạng Volumes 15 8.1 Hiểu mạng Docker 15 8.2 Quản lý liệu với Docker volumes 16 Docker Demo 16 10 Thách thức điều cần cân nhắc 16 11 References 18 Giới thiệu 1.1 Tổng quan containerization - Containerization kỹ thuật cho phép ứng dụng chạy tảng khác mà không cần phải cài đặt thành phần phụ thuộc (dependencies) chúng Các ứng dụng đóng gói container, container chứa tất thành phần cần thiết để chạy ứng dụng Các container chạy máy chủ vật lý máy ảo, chuyển máy chủ cách dễ dàng 1.2 Mục đích ý nghĩa Docker - Docker tảng containerization phổ biến Nó cung cấp cách tiếp cận đơn giản hiệu để phát triển, chạy quản lý ứng dụng container Docker cung cấp hệ sinh thái phong phú công cụ dịch vụ hỗ trợ cho việc phát triển triển khai ứng dụng container - Docker công nghệ quan trọng việc phát triển phần mềm đại Nó giúp nhà phát triển phần mềm phát triển chạy ứng dụng họ nhiều tảng khác cách dễ dàng Nó giúp nhà quản trị hệ thống quản lý ứng dụng cách hiệu 1.3 Mục tiêu báo cáo - Bài báo cáo cung cấp nhìn tổng quan Docker, bao gồm khái niệm bản, lợi ích, trường hợp sử dụng, thành phần hệ sinh thái Docker Nó đề cập đến số thách thức hạn chế Docker, xu hướng phát triển tương lai Bối cảnh Docker Hình 1: Docker công nghệ container phổ biến 2.1 Sự tiến hóa cơng nghệ containerization - Các công nghệ containerization tồn từ nhiều năm trước Docker đời Các công nghệ bao gồm công nghệ chroot, Solaris Zones, FreeBSD Jails, LinuxVServer, OpenVZ, LXC, Warden, cgroups, namespaces, AUFS Các công nghệ có mục đích chung lập ứng dụng môi trường độc lập với nhau, chúng có hạn chế khác - Containerization trước thường hỗ trợ cho ứng dụng chạy tảng cụ thể Docker đời với mục tiêu cung cấp tảng containerization độc lập với tảng, cho phép ứng dụng chạy nhiều tảng khác 2.2 Tại Docker trở thành tảng container phổ biến - Tính di động: Docker cho phép đóng gói ứng dụng môi trường chúng vào container Điều đồng nghĩa ứng dụng Docker hoạt động tương tự máy chủ hỗ trợ Docker, mơi trường máy chủ cài đặt - Tính đọng: Docker containers sử dụng hạt nhân hệ điều hành chia sẻ tài nguyên hệ thống với host OS Điều giúp tiết kiệm tài nguyên so với việc chạy máy ảo đầy đủ - Tính nhẹ nhàng: Containers Docker khởi động nhanh so với máy ảo truyền thống, chúng khơng cần chạy hệ điều hành đầy đủ - Quản lý tài nguyên tốt hơn: Docker cung cấp công cụ để quản lý tài nguyên containers, cho phép bạn giới hạn mức tiêu tốn tài nguyên CPU, RAM, mạng, v.v - Quản lý ứng dụng dễ dàng: Docker Compose công cụ quản lý tương tự giúp triển khai quản lý ứng dụng đa container cách dễ dàng Điều giúp tổ chức phát triển triển khai ứng dụng cách hiệu - Tích hợp liền mạch với công cụ hệ thống khác: Docker cung cấp API tiêu chuẩn mở, cho phép tích hợp với công cụ quản lý hệ thống khác Kubernetes, Jenkins, CI/CD pipelines, v.v - Cộng đồng hỗ trợ mạnh mẽ: Docker có cộng đồng lớn tích cực, điều có nghĩa có nhiều tài liệu, hướng dẫn hỗ trợ từ cộng đồng để giúp người dùng giải vấn đề tận dụng tối đa lợi ích từ Docker - Hỗ trợ đa tảng: Docker hỗ trợ nhiều tảng hệ điều hành Linux, Windows, MacOS chạy nhiều loại hạ tầng khác máy tính cá nhân, đám mây cơng cộng, hay mơi trường tự lập Docker gì? 3.1 Định nghĩa khái niệm cốt lõi Docker - Docker tảng phần mềm giúp người phát triển có khả đóng gói ứng dụng phụ thuộc vào container độc lập Container chứa môi trường tài nguyên cần thiết để ứng dụng hoạt động cách đáng tin cậy quán máy chủ - Các khái niệm cốt lõi Docker bao gồm: • Image: Một hình ảnh Docker gói chứa tất thành phần cần thiết để chạy ứng dụng, bao gồm mã nguồn, thư viện, biến môi trường cài đặt khác Images sử dụng để tạo container • Container: Một container Docker thực thể chạy hình ảnh Nó chứa tất cần thiết để thực thi ứng dụng, bao gồm hệ điều hành, môi trường thực thi, mã nguồn, thư viện, biến mơi trường cài đặt • Registry: Docker Registry nơi lưu trữ hình ảnh Docker Docker Hub ví dụ phổ biến public registry, nơi nhà phát triển chia sẻ tìm kiếm hình ảnh • Dockerfile: Dockerfile tệp văn chứa hướng dẫn để xây dựng hình ảnh Docker Nó mơ tả cách xếp thành phần hình ảnh, cài đặt phụ thuộc, cấu hình mơi trường • Compose: Docker Compose công cụ giúp định nghĩa quản lý ứng dụng multi-container Nó sử dụng tệp YAML để mơ tả cấu hình container, mạng lưu trữ liệu • Volume: Docker Volume cách để lưu trữ quản lý liệu container cách độc lập Điều cho phép liệu trì chia sẻ container khác • Network: Docker Network cung cấp cách để container giao tiếp với với mạng bên Điều cho phép container hoạt động máy ảo độc lập với địa IP cổng riêng • Swarm: Docker Swarm cơng cụ tích hợp sẵn cho việc quản lý triển khai ứng dụng đóng gói Docker Nó cho phép tổ chức container thành nhóm, gọi services, để tăng tính sẵn sàng mở rộng Hình 2: So sánh Docker VMs 3.2 So sánh với máy ảo (VMs) Khía cạnh Sử dụng lại OS máy chủ Tài nguyên hệ thống Docker Chia sẻ kernel OS máy chủ Yêu cầu tài nguyên Thời gian khởi đầu Khởi đầu nhanh chóng (tính giây) Dễ dàng cài đặt triển khai Đơn giản với Dockerfile Cài đặt Quản lý Hiệu suất tài nguyên Môi trường phát triển Cấp độ cô lập Công cụ Tận dụng tài nguyên kernel OS máy chủ Thường sử dụng môi trường phát triển Cơ lập quy trình nhẹ nhàng Docker, Docker Compose Máy ảo (VMs) Chạy hệ điều hành độc lập Yêu cầu nhiều tài nguyên Mất thời gian khởi đầu lâu (tính phút) Yêu cầu cài đặt hệ điều hành Yêu cầu cài đặt quản lý hệ điều hành Yêu cầu tài nguyên riêng biệt Được sử dụng cho ảo hóa hệ thống phát triển Cô lập hệ thống đầy đủ VMWare, Hyper-V, v.v Bảng 1: So sánh Docker VMs 3.3 Kiến trúc thành phần Docker - Docker sử dụng kiến trúc client – server Docker client sử dụng REST API (thông qua UNIX socket, cổng mạng) để giao tiếp với Docker daemon, tiến trình thực công việc tạo, chạy phân phối Docker container Docker client daemon chạy hệ thống kết nối Docker client với Docker daemon từ xa Kiến trúc Docker bao gồm: Hình 3: Kiến trúc Docker • Docker daemon: Daemon Docker lắng nghe yêu cầu người dùng thông qua Docker API quản lý đối tượng Docker image, container, network volume Một daemon giao tiếp với daemon khác để quản lý Docker service • Docker client: Docker client (docker) cách thức mà nhiều người dùng tương tác với Docker Khi bạn sử dụng câu lệnh docker run, client thông qua Docker API gửi lệnh đến dockerd, nơi thực chúng Docker client giao tiếp với nhiều Docker daemon • Docker registry: Docker registry nơi lưu trữ Docker image Docker Hub nơi lưu trữ Docker image công khai (public registry) mà sử dụng Docker định cấu hình mặc định để tìm image Docker Hub Ngồi người dùng cấu hình registry riêng tư khác để lưu trữ Docker image Khi người dùng sử dụng câu lệnh “docker pull” “docker run”, image định tải dựa registry cấu hình trước Khi người dùng sử dụng câu lệnh “docker push”, image tải lên registry mà người dùng cấu hình từ trước • Docker image: Docker Image template read-only (chỉ cho phép đọc) với hướng dẫn để tạo Docker container Image sử dụng để đóng gói ứng dụng thành phần kèm ứng dụng, lưu trữ server registry Ví dụ bạn sử dụng Dockerfile để tạo Docker image sử dụng hệ điều hành Ubuntu cài đặt Apache server với cài đặt, cấu hình tùy chỉnh riêng • Docker container: Container “runable instance” image Bạn khởi tạo, dừng xóa container cách sử dụng Docker API CLI Bạn kết nối container đến nhiều network, thư mục lưu trữ, chí tạo image dựa tình trạng container Mặc định container “cách ly” với container server người dùng cài đặt thêm • Docker volume: Volume thiết kể để làm nơi lưu trữ liệu độc lập với vịng đời container • Docker network: Cung cấp private network mà tồn container server, giúp container giao tiếp với cách dễ dàng • Docker service: Service cho phép bạn mở rộng contaner thông qua nhiều Docker daemon, chúng giao tiếp với thông qua swarm cluster bao gồm nhiều manager worker Mỗi node swarm Docker daemon giao tiếp với cách sử dụng Docker API Theo mặc định service cân tải node Docker Use Cases Tính Cơ lập ứng dụng Kiến trúc Microservices Tích hợp Triển khai liên tục (CI/CD) Thực hành DevOps Mô tả Các container Docker cung cấp môi trường nhẹ cô lập, cho phép ứng dụng chạy độc lập Docker hỗ trợ triển khai dịch vụ nhỏ gọn, giúp dễ dàng phát triển, triển khai mở rộ thành phần Docker giúp tạo môi trường đáng tin cậy cho việc xây dựng, kiểm tra triển khai ứng dụng Docker công cụ cốt lõi công cụ DevOps, hỗ trợ tự động hóa, triển khai liên tục sở hạ tầng dạng mã Bảng 2: Các trường hợp sử dụng Docker Bắt đầu với Docker 5.1 Cài đặt thiết lập tảng khác (Windows, macOS, Linux) - Set up Docker’s apt repository: # Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg # Add the repository to Apt sources: echo \ "deb [arch="$(dpkg print-architecture)" signed-by=\ /etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/ubuntu "$( /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update - Install the Docker packages: sudo apt-get install docker-ce docker-ce-cli \ containerd.io docker-buildx-plugin docker-compose-plugin 5.2 Chạy container bạn - Pull image Ubuntu 20.04 từ Docker Hub: docker pull ubuntu:20.04 - Chạy container Ubuntu 20.04: docker run -it rm ubuntu:20.04 Chú ý quan trọng: • Khi chạy Container chế độ -it (interactive mode), để thoát khỏi Container, ta sử dụng tổ hợp phím ”Ctrl D”, đồng nghĩa Container dừng lại Trong trường hợp ta muốn thoát tạm thời khơng muốn dừng Container, phải sử dụng tổ hợp phím ”Ctrl + P + Q” (Attach -detach mode) • Để trở lại Container (re-attach Container), sử dụng lệnh: docker attach 5.3 Các lệnh thao tác Docker Lệnh docker ps docker ps -a docker images docker rm docker rmi docker build -t docker run -it –rm Mô tả Liệt kê container chạy Liệt kê tất container Liệt kê image Xóa container Xóa image Tạo image từ Dockerfile Chạy container Bảng 3: Các lệnh thao tác Docker Các khái niệm cốt lõi Container 6.1 Container Life Circle Hình 4: Chu kỳ sống Container - Chu kỳ sống Container định tiến trình có PID = chạy bên (tiến trình chủ đạo) Tiến trình PID sống đồng nghĩa Container hoạt động - Khi sử dụng ‘docker stop‘, Docker gửi tín hiệu SIGTERM (terminating signal) để dừng tiến trình PID 1, sau Container dừng với EXITED(0) Trong vịng 10 giây, Container chưa dừng lại, Docker gửi tín hiệu SIGKILL (kill signal) Container dừng lại với exit code EXITED(137) 6.2 Các câu lệnh bên Container - Syntax: docker exec - Example Commands: • docker exec echo Helloworld • docker exec sh -c ”echo PATH ” • docker exec echo PATH - SSH (Secure Shell) Container: Docker cho phép người dùng kết nối từ xa tới Container chủ đạo câu lệnh: • docker exec -it sh • docker exec -it bash Các câu lệnh demo chương 10 6.3 Port Mapping - Trong thực tế, hành động SSH trực tiếp vào Container hành động tốt Việc người dùng truy cập vào Container từ xa khó khăn hầu hết người dùng không rõ khái niệm SSH, truy cập Container trực tiếp ảnh hướng đến bảo mật ứng dụng - Khái niệm Port Mapping giải vấn đề trên, cho phép chuyển tiếp kết nối mạng từ máy chủ host vào container Docker, ứng dụng container truy cập từ bên qua cổng định - Syntax: docker run -p : - Example docker run -p 80:80 nginx 6.4 Logs Trace - Logs trace cho phép giám sát hoạt động Container Docker, bao gồm thơng tin q trình khởi động, lỗi, cảnh báo hoạt động ứng dụng bên container Điều giúp bạn kiểm soát quản lý container cách hiệu quả, phát xử lý cố cách nhanh chóng - Syntax: docker logs -f • -f : keep following the log output 6.5 Volume - bind mount - Docker Engine đóng gói ứng dụng thành Images, Image Docker có tính chất bất biến (immutable), chỉnh sửa Do vậy, việc sửa đổi liệu bên Container không gây ảnh hưởng đến Images gốc ban đầu Container khác Tuy nhiên điều đồng nghĩa rằng, tắt Container cố Container tự động exit, liệu bị (Stateless Container) Trong tình trên, việc chạy ứng dụng database để lưu trữ liệu trở nên không hiệu - Volume: phần nhớ Docker dùng để lưu trữ nhớ cho Container (một thư mục ảo Docker quản lý) - Bind mount: thao tác gắn Volume vào Container nhằm giải tính chất stateless Container Syntax 11 docker volume create [volume_name] docker run -v [local_dir/volume]:[container_dir] Example docker volume create pgdata docker run -v pgdata:/var/lib/postgresql/data -p 5432:5432 postgres docker run -v /usr/data:/var/lib/postgresql/data -p 5432:5432 postgres Dockerfile Docker Compose 7.1 Viết Dockerfiles để xây dựng ảnh tùy chỉnh - Dockerfile tệp văn chứa hướng dẫn để xây dựng hình ảnh Docker Nó mơ tả cách xếp thành phần hình ảnh, cài đặt phụ thuộc, cấu hình mơi trường Syntax: FROM RUN WORKDIR COPY ADD EXPOSE CMD command argument1 argument2 CMD [“command”, “argument1”, “argument2”, ] - Build Process: • Image: tập hợp nhiều lớp (layers), layer tương ứng với câu lệnh bên Dockerfile • Build: build Image, Docker duyệt qua câu lệnh Dockerfile Qua câu lệnh, Docker khởi tạo Container tạm thời tương ứng với Image trước thay đổi theo mô tả câu lệnh, lưu thành layer Cuối cùng, Docker loại bỏ Container tạm thời tiếp tục lặp lại chạy hết Dockerfile - Ví dụ, Dockerfile sau tạo hình ảnh Docker chứa ứng dụng Node.js đơn giản: FROM node:14.17.0-alpine3.13 WORKDIR /app COPY package.json 12 RUN npm install COPY CMD ["node", "index.js"] // hook command - Câu lệnh tạo Image: Syntax docker build -t : // '.' dot is a parameter: Build context 7.2 Build Context - dockerignore - ”Build Context” toàn nội dung bên thư mục chứa Dockerfile bao gồm Dockerfile - Docker CLI (Docker client) gửi Build context tới Docker Daemon để build Docker Image - dockerignore: Trong trường hợp Dockerfile có chứa nhiều files images không cần thiết, việc gửi tới Docker Daemon trở nên khó khăn Do cần sử dụng tới dockerignore bỏ qua file liệt kê bên trước gửi tới Docker Daemon 7.3 Sử dụng Docker Compose cho ứng dụng đa container - Đặt vấn đề: Hình 5: modules + Giả sử ta có ứng dụng Web gồm modules trên, áp dụng Docker vào hệ thống, ta cần xây dựng Container tương ứng với modules Và Container cần có cấu hình riêng biệt, Frontend chạy port: 80, Backend port: 8080, Database port: 5432 cần bind mount để bảo toàn liệu 13 + Đối với ứng dụng multi-container phức tạp vậy, có tới hàng chục modules, việc xây dựng số Container tương ứng việc không dễ dàng - Docker Compose công cụ giúp định nghĩa quản lý ứng dụng multicontainer Nó sử dụng tệp YAML để mơ tả cấu hình container, mạng lưu trữ liệu - Ví dụ, tệp docker-compose.yml sau định nghĩa ứng dụng web đơn giản với hai container: container chứa ứng dụng web Node.js container chứa sở liệu MongoDB version: "3.9" services: web: build: ports: - "3000:3000" volumes: - :/app depends_on: - db db: image: mongo:4.4.6 ports: - "27017:27017" volumes: - /data:/data/db - Commandline với Compose: • Build Image: Thay sử dụng câu lệnh build Image giới thiệu phần 6, với Docker compose, ta build Image cách ngắn gọn sau: Syntax docker-compose build • Khởi tạo Compose: docker-compose up docker-compose up docker-compose up -d • Log Compose: docker-compose logs -f • Dừng Compse docker-compose stop 14 Mạng Volumes 8.1 Hiểu mạng Docker Hình 6: Docker network - Docker cung cấp cơng cụ để quản lý mạng cho container Các container kết nối với với mạng bên Điều cho phép container hoạt động máy ảo độc lập với địa IP cổng riêng - Docker cung cấp loại mạng sau: • Bridge: Mạng bridge mạng cục cho phép container kết nối với với mạng bên ngồi thơng qua interface NAT Điều cho phép container giao tiếp với với mạng bên ngồi • Host: Mạng host cho phép container sử dụng interface mạng với host Điều cho phép container truy cập vào dịch vụ mạng host • Overlay: Mạng overlay cho phép container host khác giao tiếp với Điều cho phép container hoạt động máy ảo độc lập với địa IP cổng riêng • Macvlan: Mạng Macvlan cho phép container có địa MAC IP riêng Điều cho phép container hoạt động máy ảo độc lập với địa IP cổng riêng • None: Mạng none khơng cho phép container truy cập vào mạng bên Điều sử dụng để lập container • Network plugins: Docker cung cấp plugin mạng bên thứ ba để cung cấp tính mạng bổ sung mạng SDN, mạng L2, mạng L3, v.v 15 8.2 Quản lý liệu với Docker volumes Hình 7: Docker volume - Docker Volume cách để lưu trữ quản lý liệu container cách độc lập Điều cho phép liệu trì chia sẻ container khác - Docker cung cấp loại volume sau: • Volume: Volume thực thể độc lập quản lý Docker Nó sử dụng để lưu trữ chia sẻ liệu container • Bind mount: Bind mount cho phép bạn chia sẻ thư mục tệp máy host container Điều cho phép bạn truy cập vào liệu từ bên container • Tmpfs mount: Tmpfs mount cho phép bạn tạo thư mục nhớ RAM máy host Điều cho phép bạn truy cập vào liệu từ bên container Docker Demo 10 Thách thức điều cần cân nhắc - Docker khơng phải giải pháp hồn hảo cho tất vấn đề Mặc dù có nhiều lợi ích, có số hạn chế hạn chế tiềm ẩn Các hạn chế hạn chế tiềm ẩn Docker bao gồm: • Khả quản lý lớn: Nếu bạn cần quản lý hàng trăm hàng ngàn container, việc theo dõi, quản lý triển khai chúng trở thành vấn đề phức tạp • Vấn đề bảo mật: Docker chia sẻ kernel với host, điều tạo vấn đề bảo mật Nếu container bị cơng bị nghi ngờ, có nguy ảnh hưởng đến container khác hệ thống 16 • Độ tin cậy hệ thống phụ thuộc vào Docker daemon: Nếu Docker daemon bị lỗi gặp vấn đề, tồn hệ thống bị ảnh hưởng • Khó khăn việc quản lý liệu liên tục: Docker không cung cấp giải pháp tự động cho việc quản lý liệu liên tục đảm bảo tính quán 17 11 References Docker Documentation (2021) Docker overview Retrieved from https://docs docker.com/get-started/overview/ Docker Documentation (2021) Docker architecture Retrieved from https://docs docker.com/get-started/overview/ Docker Documentation (2021) Docker Compose overview Retrieved from https: //docs.docker.com/compose/ Docker Documentation (2021) Docker networking Retrieved from https://docs docker.com/network/ Docker Documentation (2021) Docker volumes Retrieved from https://docs docker.com/storage/volumes/ 18