cindylearnsdocker
cindylearnsdocker
Learning docker
2 posts
Dịch bài về docker trêm docs.docker.com
Don't wanna be here? Send us removal request.
cindylearnsdocker · 5 years ago
Text
Bắt đầu nhanh - Phần 1
Bài gốc: https://docs.docker.com/get-started/
Định hướng và thiết lập
Bài này sẽ hướng dẫn bạn cài đặt môi trường Docker.
Khái niệm Docker
Docker là một nền tảng dành cho developer và quản trị hệ thống để xây dựng, chạy và chia sẻ ứng dụng với các container. Việc sử dụng các container để triển khai các ứng dụng được gọi là container hóa. Các container không mới, nhưng việc sử dụng chúng để dễ dàng triển khai ứng dụng thì mới.
Container hóa ngày càng phổ biến vì container là:
Linh hoạt: Ngay cả một ứng dụng phức tạp nhất vẫn có thể container hóa.
Gọn nhẹ: Các container tận dụng và chia sẻ nhân máy chủ, khiến chúng hiệu quả nhiều hơn máy áo về mặt tài nguyên hệ thống.
Di động: Bạn có thể build cục bộ, triển khai lên đám mây và chạy ở bất cứ đâu.
Ghép nối lỏng lẻo: Các container có khả năng độc lập và đóng gói, cho phép bạn thay thế hoặc nâng cấp một container mà không phá vỡ một container khác.
Khả năng mở rộng: Bạn có thể tăng và tự động phân phối các bản sao container trên một data center.
Bảo mật: Các container áp dụng các ràng buộc và độc lập mạnh mẽ cho các tiến trình mà không cần bất kỳ cấu hình bắt buộc nào từ phía người dùng.
Image và container
Về cơ bản, một container không là gì ngoài một tiếng trình đang chạy, với một số tính năng đóng gói bổ sung được áp dụng để giữ nó độc lập với máy chủ và độc lập với những container khác.một trong những khía cạnh quan trọng nhất của cô lập container là mỗi container tương tác với hệ thống tập tin riêng của nó; hệ thống tập tin này được cung cấp bởi Docker image. Một image bao gồm mọi thứ cần thiết để chạy một ứng dụng, code hoặc mã nhị phân, thời gian chạy, dependencies, và bất kỳ đối tượng hệ thống tập tin nào khác được yêu cầu.
Container và máy ảo
Một container chạy tự nhiên trên Linux và chia sẻ nhân với máy chủ với những container khác. Nó chạy một tiến trình riêng biệt, không chiếm nhiều bộ nhớ hơn bất kỳ thực thi nào, khiến nó nhẹ hơn.
Ngược lại, một máy ảo (VM) chạy một hệ điều hành “khách” đầy đủ với quyền truy cập ảo tới tài nguyên máy chủ thông qua một trình ảo hóa. Nói chung VM phải chịu rất nhiều chi phí vượt quá những gì đang được sử dụng bởi ứng dụng logic của bạn.
Tumblr media Tumblr media
Cài đặt môi trường Docker
Tải và cài đặt Docker Desktop
Docker Desktop là một ứng dụng dễ cài đặt cho môi trường Mac hoặc Windows cho phép bạn bắt đầu code và container hóa theo đơn vị phút. Docker Desktop bao gồm mọi thứ bạn cần để build, run và chia sẻ ứng dụng container hóa ngay trên chính thiết bị của bạn.
Download Docker Desktop cho máy theo hệ điều hành:
Mac - https://docs.docker.com/docker-for-mac/install/
Windows - https://docs.docker.com/docker-for-windows/install/
Kiểm tra phiên bản Docker
Sau khi cài đặt thành công Docker Desktop, mở terminal và chạy lệnh docker --version để kiểm tra phiên bản của Docker được cài trên máy bạn.
$ docker --version Docker version 19.03.5, build 633a0ea
Kiểm tra Cài đặt Docker
Kiểm tra các cài đặt của bạn có hoạt động không bằng Docker image hello-world:
$ docker run hello-world    Unable to find image 'hello-world:latest' locally    latest: Pulling from library/hello-world    ca4f61b1923c: Pull complete    Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7    Status: Downloaded newer image for hello-world:latest    Hello from Docker!    This message shows that your installation appears to be working correctly.    ...
2. Chạy docker image ls để liệt kê image hello-world mà bạn đã tải về máy của mình.
3. Liệt kê container hello-world (sinh ra bởi image) tồn tại sau khi hiển thị message của nó. Nếu nó vẫn chạy, bạn không cần tùy chọn --all:
$ docker container ls --all    CONTAINER ID     IMAGE           COMMAND      CREATED            STATUS    54f4984ed6a8     hello-world     "/hello"     20 seconds ago     Exited (0) 19 seconds ago
Kết luận
Như vậy, bạn đã cài xong Docker Desktop trên máy tính của mình, và chạy một kiểm thử nhanh để chắc chắn rằng bạn đã cài đặt để build và run ứng dụng container hóa đầu tiên của mình.
Phần 2 >>
0 notes
cindylearnsdocker · 5 years ago
Text
Tổng quát về docker
Bài gốc: https://docs.docker.com/engine/docker-overview
Dịch bởi Cindy.
Docker là một nền tảng mở cho việc phát triển, vận chuyển và chạy các ứng dụng. Docker cho phép tách các ứng dụng ra khỏi cơ sở hạ tầng để có thể phân phối phần mềm nhanh hơn. Với Docker, chúng ta có thể quản lý cơ sở hạ tầng giống như cách quản lý ứng dụng. Bằng cách tận dụng các phương pháp của Docker cho việc vận chuyển, kiểm tra và triển khai code nhanh chóng, chúng ta có thể giảm đáng kể độ trễ giữa việc viết code và chạy chúng trong môi trường production.
Nền tảng Docker
Docker cung cấp khả năng đóng gói và chạy một ứng dụng trong môi trường cô lập gọi là container. Sự cô lập và bảo mật này cho phép bạn chạy đồng thời nhiều container trên một máy chủ có sẵn. Container rất nhẹ bởi vì chúng không cần tải thêm của một máy ảo, chúng chạy trực tiếp bằng nhân của máy chủ. Có nghĩa là chúng ta có thể chạy nhiều container với một tổ hợp phần cứng nhất định so với khi bạn sử dụng máy ảo. Chúng ta thậm chí có thể chạy Docker container trong cách máy chủ nhưng thực chất chúng là những máy ảo!
Docker cung cấp công cụ và một nên tảng để quản lý vòng đời của container:
Phát triển ứng dụng và và các component hỗ trợ bằng cách sử dụng container.
Container trở thành đơn vị phân phối và kiểm thử ứng dụng.
Khi đã sẵn sàng, hãy triển khai ứng dụng lên môi trường production, dưới dạng một container hoặc một dịch vụ phối hợp (orchestrated service). Chúng hoạt động giống nhau dù môi trường production là một data center cục bộ, một nhà cung cấp đám mây, hay là kết hợp cả hai.
Docker Engine
Docker Engine là một ứng dụng client-server với những thành phần chính:
Một server là một loại chương trình chạy dài được gọi là tiến trình daemon (lệnh dockerd).
Một REST API chỉ định các gia diện mà chương trình có thể sử dụng để nói chuyện với daemon và hướng dẫn nó phải làm gì.
Một client là giao diện dòng lệnh (CLI) (lệnh docker).
Tumblr media
CLI sử dụng Docker REST API để điều khiển và tương tác với Docker daemon thông qua script hoặc những lệnh CLI trực tiếp. Nhiều ứng dụng Docker khác sử dụng nền tảng API và CLI.
Daemon khởi tạo và quản lý đối tượng (objects) Docker, như image, container, mạng và dung lượng (volume).
Ghi chú: Docker được cấp phép theo giấy phép Apache 2.0 nguồn mở.
Chi tiết hơn, xin mời đọc Kiến trúc Docker phía dưới.
Tôi có thể dùng Docker để làm gì?
Chuyển phát ứng dụng nhanh, nhất quán
Docker hợp lý hóa vòng đời phát triển bằng cách cho phép các developer làm việc trong môi trường chuẩn hóa sử dụng container cục bộ cung cấp các ứng dụng và service. Container rất tốt cho quy trình tích hợp liên tục và phân phối liên tục (CI/CD).
Hãy xem xét kịch bản ví dụ sau:
Các developer viết code và chia sẻ với các đồng nghiệp bằng Docker container.
Họ dùng Docker đẩy các ứng dụng lên môi trường test và thực hiện các kiểm thử tự động và thủ công.
Khi developer thấy bug, họ có thể chỉnh sửa chúng ở môi trường development và triển khai lại lên môi trường test để kiểm thử và xác nhận.
Khi kiểm thử xong, việc sửa lỗi cho khách hàng cũng đơn giản như đẩy image được cập nhật lên môi trường sản xuất.
Triển khai nhanh và co dãn
Nền tảng Docker dựa trên container cho phép khối lượng công việc di động cao. Docker container có thể chạy trên một laptop của một developer, trên một máy vật lý hoặc máy ảo của một data center, trên một đám mây, hoặc trên một môi trường hỗn hợp.
Tính di động và tính chất nhẹ của Docker cũng giúp bạn dễ dàng quản lý linh hoạt khối lượng công việc, nhân rộng hoặc phá bỏ các ứng dụng và dịch vụ khi doanh nghiệp cần, trong thời gian thực.
Chạy nhiều khối lượng công việc hơn trên cùng một phần cứng
Docker nhẹ và nhanh. Cung cấp một sự thay thế khả thi, hiệu quả về chi phí cho các máy ảo dựa trên nền tảng ảo hóa, do đó bạn có thể sử dụng nhiều khả nắng tính toán hơn để đạt được mục tiêu nghiệp vụ của mình. Docker hoàn hảo cho môi trường mật độ cao và cho các triển khai vừa và nhỏ nơi bạn cần phải làm nhiều với ít tài nguyên.
Kiến trúc Docker
Docker sử dụng kiến trúc client-server. Docker client nói chuyện với Docker daemon, việc này rất nặng trong việc xây dựng, chạy và phân phối các Docker container. Docker client và daemon có thể chạy trên cùng một hệ thống, hoặc bạn có thể kết nối một Docker client với một Docker daemon từ xa. Docker client và deamon giao tiếp bằng REST API, thông qua UNIX socket hoặc giao diện mạng.
Tumblr media
Docker daemon
Docker daemon (dockerd) lắng nghe request từ Docker API và quản lý Docker object như image, container, mạng và dung lượng. Một daemon cũng có thể giao tiếp với những daemon khác để quản lý Docker service.
Docker client
Docker client (docker) là cách chính nhiều người dùng Docker sử dụng để tương tác với Docker. Khi bạn dùng lệnh như docker run, client sẽ gửi những lệnh đó tới dockerd, nơi có thể mang chúng. Lệnh docker sử dụng Docker API. Docker clinet có thể giao tiếp với nhiều hơn một daemon.
Docker registries
Một đăng ký Docker lưu trữ nhiều Docker image. Docker Hub là một đăng ký công cộng mà mọi người đều có thể dùng, và Docker được cấu hình mặc định để tìm kiếm image trên Docker Hub. Bạn thậm chí có thể chạy đăng ký riêng của bạn. Nếu bạn sử dụng Docker Datacenter (DDC), nó bao gồm Docker Trusted Registry (DTR).
Khi bạn dùng lệnh docker pull hoặc docker run, image cần thiết được lấy từ registry được cấu hình của bạn. Khi bạn sử dụng lệnh docker push, image sẽ được đẩy lên registry cấu hình của bạn.
Docker objects (Đối tượng Docker)
Khi bạn dùng Docker, bạn đang tạo và sử dụng iamge, container, mạng, dung lượng, plugin, và những đối tượng khác. Đây là một tổng quan ngắn gọn về những đối tượng trên.
IMAGE
Một image là một mẫu chỉ đọc với các hướng dẫn để tạo một Docker container. Thông thường, một image dựa trên một image khác, với một số tùy chỉnh bổ sung. Ví dụ, bạn có thể xây dựng một image dựa trên image ubuntu, nhưng cài đặt máy chủ web Apache và ứng dụng của bạn, cũng như các cấu hình chi tiết cần thiết để ứng dụng của bạn chạy.
Bạn có thể tạo image riêng của mình hoặc bạn chỉ có thể sử dụng những image của người khác tạo và công bố trong một registry. Để xây dựng image riêng, bạn tạo một Dockerfile với cú pháp đơn giản để định nghĩa những bước cần thiết để tạo một image và chạy nó. Mỗi hướng dẫn trong Dockerfile tạo ra một layer trên image. Khi bạn thay đổi nội dung Dockerfile, chỉ những layer bị thay đổi mới được build lại. Đây là một phần khiến image nhẹ, nhỏ và nhanh, khi so sánh với các công nghệ ảo hóa khác.
CONTAINER
Một container là một thực thể chạy được của một image. Bạn có thể tạo, khởi động, dừng, di chuyển hoặc gỡ bỏ một container bằng Docker API hoặc CLI. Bạn có thể kết nối một container này với một hoặc nhiều mạng, đính kèm bộ lưu trữ, hoặc thậm chí tạo mới một image dựa trên trạng thái hiện tại của nó.
Mặc định, một container được cô lập tương đối tốt với những container khác và máy chủ của nó. Bạn có thể kiểm soát cách cô lập mạng container, bộ lưu trữ, hoặc các hệ thống con cơ bản khác từ các container khác từ máy chủ.
Một container được định nghĩa bởi image của nó cũng như bất kỳ cấu hình tùy chọn nào bạn cung cấp cho nó khi bạn tạo hoặc khởi động nó. Khi một container được gỡ bỏ, mọi thay đổi về trạng thái của nó không được lưu trữ trong bộ lưu trữ liên tục sẽ biến mất.
Ví dụ lệnh docker run
Lệnh phía dưới chạy trên một container ubuntu, đính kèm tương tác vào phiên dòng lệnh cục bộ của bạn và chạy /bin/bash .
$ docker run -i -t ubuntu /bin/bash
Khi bạn chạy lệnh trên, chuyện bên dưới sẽ diễn ra (giả sử bạn đang sử dụng cấu hình mặc định):
Nếu bạn không có image ubuntu ở local, Docker sẽ kéo nó về registry bạn cấu hình hệt như lúc chạy lệnh docker pull ubuntu bằng tay.
Docker tạo mới một container, tương tự lúc chạy lệnh docker container create bằng tay.
Docker phân bổ một hệ thống tập tin đọc-ghi vào container, như lớp cuối cùng của nó. Điều này cho phép một container đang chạy tạo hoặc thay đổi file và thư mục trong hệ thống tệp cục bộ của nó.
Docker tạo một giao diện mạng để kết nối với container với mạng mặc định, khi bạn không chỉ định bất kỳ tùy chọn mạng nào. Điều này bao gồm việc gán một địa chỉ IP cho container. Mặc định, container có thể kết nối với mạng bên ngoài bằng kết nối mạng của máy chủ.
Docker khởi động và container thực thi /bin/bash . Vì container đang chạy độc lập và đính kèm terminal của bạn (dựa theo cờ -i  và -t ), bạn có thể cung cấp đầu vào bằng bàn phím khi đầu ra là ghi log cho terminal.
Khi bạn gõ exit để kết thúc lệnh /bin/bash, container ngừng lại nhưng không bị gỡ bỏ. Bạn có thể khởi động lại hoặc gỡ bỏ tùy ý.
SERVICE
Những service cho phép bạn chia tỉ lệ các container trên nhiều Docker daemon, tất cả hoạt động cùng nhau như một nhóm (swarm) với nhiều người quản lý (managers) và nhiều công nhân (workers). Mỗi thành viên của swarm là một Docker daemon, và những daemon đều giao tiếp với nhau bằng Docker API. Một service cho phép xác định trạng thái mong muốn, chẳn hạn như số lượng bản sao của dịch vụ đó có sẵn sàng tại bất kỳ thời điểm nào không. Mặc định thì service được cân bằng tải trên tất cả các nút worker. Với người dùng, Docker service dường như là một ứng dụng đơn lẻ. Docker Engine hỗ trợ chế độ swarm trong Docker 1.12 và những phiên bản cao hơn.
Công nghệ cơ bản
Docker được viết trong Go (một ngôn ngữ lập trình mã nguồn mở) và tận dụng một số tính năng của nhân Linux để cung cấp chức năng của nó.
Namespaces
Docker sử dụng công nghệ namespaces để cung cấp không gian làm việc độc lập được gọi là container. Khi chạy một container, Docker tạo ra một bộ namespaces cho container đó.
Những namespace này cung cấp một layer cho sự cô lập. Mỗi khía cạnh của một container chạy trong một namespace riêng biệt và quyền truy cập bị giới hạn trong namespace đó.
Docker Engine sử dụng namespcae như sau trên Linus:
pid: Tiến trình độc lập (PID: ProcessID).
net: Quản lý giao diện mạng (NET: networking).
ipc: Quản lý truy cập đến tài nguyên IPC (IPC: InterProcess Communication).
mnt: Quản lý điểm gắn kết hệ thống file (MNT: Mount).
uts: Cô lập nhân và định danh phiên bản. (UTS: Unix Timesharing System).
Nhóm điều khiển (Control Groups)
Docker Engine trên Linux cũng dựa trên công nghệ khác gọi là nhóm điều khiển (cgroups). Một cgroup giới hạn một ứng dụng cho một bộ tài nguyên cụ thể. Các nhóm điều khiển cho phép Docker Engine chia sẻ tài nguyên phần cứng có sẵn cho container và tùy chọn thực thi các giới hạn và ràng buộc. Ví dụ, bạn có thể giới hạn bộ nhớ khả dụng cho một container cụ thể.
Hệ thống tập tin liên minh (Union file systems)
Hệ thống tập tin liên minh, hay UnionFS, là những hệ thống tập tin hoạt động bằng cách tạo layer, khiến chúng nhẹ và nhanh. Docker Engine sử dụng Unión để cung cấp các khối xây dựng cho container. Docker Engine có thể sử dụng nhiều biến thể UnionFS, bao gồm AUFS, btrfs, vfs, và DeviceMapper.
Định dạng container
Docker Engine kết hợp namespaces, control groups, và UnionFS thành một trình bao bọc gọi là định dạng container. Định dạng container mặc định là libcontainer. Trong tương lai, Docker có thể hỗ trợ những định dạng container khác bằng cách tích hợp với những công nghệ như BSD Jails hay Solaris Zones.
Phần kế tiếp: Quick Start
0 notes