Docker Container là gì? - Chứa ứng dụng của bạn bằng Docker



Docker Container là một giải pháp thay thế nhẹ cho Máy ảo để tạo, triển khai và chạy các ứng dụng bên trong một vùng chứa.

Tôi hy vọng bạn đã đọc các blog trước đây của tôi trên Docker nơi tôi đã trình bày những kiến ​​thức cơ bản về Docker. Ở đây, trong blog Docker Container này, tôi sẽ thảo luận về Docker Container là gì và nó hoạt động như thế nào. Phần lớn, chúng tôi sẽ tập trung vào các trường hợp Thực hành và sử dụng của Docker.

Tôi đã liệt kê các chủ đề cho blog Docker Container này:





  • Tại sao chúng ta cần Docker Container?
  • Docker Container hoạt động như thế nào?
  • Các trường hợp sử dụng của Docker Container

Tại sao chúng ta cần Docker Container?

Tôi vẫn nhớ không lầm, tôi đang thực hiện một dự án. Trong dự án đó, chúng tôi đã tuân theo kiến ​​trúc microservice. Đối với những bạn chưa biết microservice là gì, đừng lo lắng, tôi sẽ giới thiệu cho các bạn về nó.

Ý tưởng đằng sau microservices là một số loại ứng dụng nhất định trở nên dễ xây dựng và bảo trì hơn khi chúng được chia thành các phần nhỏ hơn, có thể ghép lại và hoạt động cùng nhau. Mỗi thành phần được phát triển riêng biệt và ứng dụng sau đó chỉ đơn giản là tổng các thành phần cấu thành của nó.



Hãy xem xét ví dụ dưới đây:

Ứng dụng mua sắm trực tuyến - Docker Container - Edureka

Trong sơ đồ trên có một cửa hàng trực tuyến với các dịch vụ nhỏ riêng biệt cho tài khoản người dùng, danh mục sản phẩm, xử lý đơn hàng và giỏ hàng.



Chà, kiến ​​trúc này có rất nhiều lợi ích:

tìm phần tử lớn nhất trong mảng java
  • Ngay cả khi một trong những microservice của bạn bị lỗi, toàn bộ ứng dụng của bạn hầu như không bị ảnh hưởng.
  • Nó dễ dàng hơn để quản lý

Ngoài ra còn có nhiều lợi ích khác, tôi sẽ không đi sâu chi tiết về microservices trong bài đăng này. Tuy nhiên, tôi cũng sẽ sớm tạo ra một vài blog trên microservices.

Trong kiến ​​trúc này, chúng tôi đã sử dụng Máy ảo CentOS. Các Máy ảo đó được cấu hình bằng cách viết các đoạn mã dài. Vâng, cấu hình các máy ảo đó không phải là vấn đề duy nhất.

Việc phát triển các ứng dụng như vậy yêu cầu khởi động một số dịch vụ nhỏ trong một máy. Vì vậy, nếu bạn đang khởi động năm trong số các dịch vụ đó, bạn cần có năm máy ảo trên máy đó. Hãy xem xét sơ đồ dưới đây:

Vấn đề khác là khá phổ biến, tôi biết nhiều bạn có thể liên quan đến nó. Ứng dụng hoạt động trên máy tính xách tay của nhà phát triển nhưng không hoạt động trong quá trình thử nghiệm hoặc sản xuất. Điều này có thể là do không giữ một môi trường máy tính nhất quán. Hãy xem xét sơ đồ dưới đây:

Ngoài ra còn có nhiều vấn đề khác ngoài vấn đề này, nhưng tôi cảm thấy, những vấn đề này đủ để tôi giải thích cho bạn sự cần thiết của Docker Containers.

Tìm hiểu cách Máy chứa Docker tốt hơn Máy ảo

Vì vậy, hãy tưởng tượng nếu tôi cung cấp 8 GB RAM cho tất cả các máy ảo của mình và tôi có 5 microservices đang chạy trên các Máy ảo khác nhau. Trong trường hợp đó, các máy ảo này sẽ yêu cầu 40 GB RAM. Vâng, bây giờ tôi yêu cầu cấu hình của máy chủ của tôi rất cao, gần 44 GB RAM phải có trong máy chủ của tôi. Rõ ràng, đây không phải là một giải pháp bền vững cho một kiến ​​trúc như vậy bởi vì, tôi đang lãng phí rất nhiều nguồn lực ở đây.

Tốt thôi, tôi có rất nhiều tài nguyên để lãng phí, nhưng tôi vẫn gặp vấn đề không nhất quán trong vòng đời phân phối phần mềm (SDLC) của mình. Tôi phải cấu hình các máy ảo này trong thử nghiệm cũng như trong môi trường sản xuất. Ở một nơi nào đó trong quá trình đó, một số phần mềm không được cập nhật trong máy chủ thử nghiệm và nhóm Dev đang sử dụng phiên bản cập nhật của phần mềm. Điều này dẫn đến xung đột.

Điều gì sẽ xảy ra nếu tôi đang sử dụng 100 máy ảo, thì việc cấu hình từng máy ảo sẽ mất rất nhiều thời gian và đồng thời nó cũng dễ bị lỗi.

Bây giờ, chúng ta hãy hiểu Docker Container là gì và nó hoạt động như thế nào cũng như cách nó giải quyết vấn đề của tôi.

Docker Container là gì?

Docker là một công cụ được thiết kế để giúp tạo, triển khai và chạy các ứng dụng dễ dàng hơn bằng cách sử dụng vùng chứa.

Bạn có thể tạo Docker Containers, những container này sẽ chứa tất cả các tệp nhị phân và thư viện cần thiết cho ứng dụng của bạn hoặc microservice trong trường hợp của tôi. Vì vậy, ứng dụng của bạn hiện diện trong một vùng chứa, hoặc bạn đã chứa ứng dụng của mình. Bây giờ, cùng một vùng chứa đó có thể được sử dụng trong môi trường Thử nghiệm và Sản xuất.

Docker Containers là một giải pháp nhẹ cho Máy ảo và nó sử dụng hệ điều hành chủ. Phần tốt nhất, bạn không phải phân bổ trước bất kỳ RAM nào cho Docker Container, nó sẽ lấy nó khi cần thiết. Vì vậy, với Docker Container, tôi không phải lo lắng về việc lãng phí tài nguyên.

Bây giờ chúng ta hãy hiểu cách hoạt động của Docker Container.

Docker Container hoạt động như thế nào?

Sơ đồ dưới đây về cơ bản là một cách sử dụng Docker. Và tôi giả định rằng, bạn có ý tưởng về Docker Image và Dockerfile.

Các bạn, tôi biết sơ đồ trông hơi phức tạp, nhưng hãy tin tôi rằng nó không phức tạp như vậy. Dưới đây là giải thích của sơ đồ, ngay cả sau đó bạn cảm thấy nó khó hiểu, bạn có thể bình luận nghi ngờ của bạn, tôi sẽ giải quyết những câu hỏi đó càng sớm càng tốt.

  • Đầu tiên một nhà phát triển sẽ viết mã dự án trong tệp Docker và sau đó xây dựng hình ảnh từ tệp đó.
  • Hình ảnh này sẽ chứa toàn bộ mã dự án.
  • Bây giờ, bạn có thể chạy Docker Image này để tạo nhiều vùng chứa tùy thích.
  • Hình ảnh Docker này có thể được tải lên trung tâm Docker (Về cơ bản, nó là một kho lưu trữ đám mây cho Hình ảnh Docker của bạn, bạn có thể giữ nó ở chế độ công khai hoặc riêng tư).
  • Hình ảnh Docker này trên trung tâm Docker, có thể được các nhóm khác như QA hoặc Prod.

Điều này không chỉ ngăn ngừa sự lãng phí tài nguyên mà còn đảm bảo rằng môi trường máy tính có trong máy tính xách tay của Nhà phát triển cũng được nhân rộng trong các nhóm khác. Tôi cảm thấy bây giờ, tôi không cần phải cho bạn biết lý do tại sao chúng tôi cần Docker.

Đây là một cách để sử dụng nó, tôi đoán các bạn phải tò mò muốn biết cách tôi sử dụng Docker để giải quyết vấn đề microservices của mình. Hãy để tôi cung cấp cho bạn một cái nhìn tổng quan về cùng một.

Dưới đây là giải thích của sơ đồ:

  • Đầu tiên, chúng tôi đã viết các yêu cầu phức tạp trong Dockerfile.
  • Sau đó, chúng tôi đã đẩy nó lên GitHub.
  • Sau đó, chúng tôi sử dụng máy chủ CI (Jenkins).
  • Máy chủ Jenkins này sẽ kéo nó xuống khỏi Git và xây dựng môi trường chính xác. Điều này sẽ được sử dụng trong máy chủ Sản xuất cũng như máy chủ Thử nghiệm.
  • Chúng tôi đã triển khai nó ra ngoài môi trường dàn dựng (Nó đề cập đến việc triển khai phần mềm của bạn trên các máy chủ cho mục đích thử nghiệm, trước khi triển khai chúng hoàn toàn vào môi trường sản xuất.)
  • Về cơ bản, chúng tôi đã đưa chính xác những gì chúng tôi có trong Phát triển, Thử nghiệm và Dàn dựng vào Sản xuất.

Thực sự công bằng mà nói, Docker đã khiến cuộc sống của tôi trở nên dễ dàng.

Chà, đó là câu chuyện của công ty tôi, hãy xem nghiên cứu điển hình của Đại học Indiana. Cách Docker giải quyết vấn đề của họ.

Nghiên cứu điển hình của Đại học Indiana:

Đại học Indiana là một hệ thống trường đại học công lập nhiều cơ sở ở bang Indiana, Hoa Kỳ.

Báo cáo vấn đề

Họ đang sử dụng các tập lệnh tùy chỉnh để triển khai các ứng dụng trong máy ảo.

Môi trường của họ đã được tối ưu hóa cho các ứng dụng dựa trên Java kế thừa của họ. Môi trường phát triển của họ liên quan đến các sản phẩm mới không chỉ dựa trên java. Để mang đến cho sinh viên của mình trải nghiệm tốt nhất có thể, trường Đại học cần bắt đầu hiện đại hóa các ứng dụng.

Trường đại học muốn cải thiện cách họ kiến ​​trúc các ứng dụng, bằng cách chuyển sang kiến ​​trúc dựa trên microservices cho các ứng dụng của họ.

Cần bảo mật cho dữ liệu của học sinh, chẳng hạn như SSN và dữ liệu sức khỏe của học sinh.

Giải pháp:

Tất cả các vấn đề đã được Trung tâm Dữ liệu Docker (DDC) giải quyết, hãy xem xét sơ đồ dưới đây:

Docker Trusted Registry - Nó lưu trữ Hình ảnh Docker.

Giao diện người dùng web UCP (Mặt phẳng điều khiển toàn cầu) - Giúp quản lý toàn bộ cụm từ một nơi duy nhất. Các dịch vụ được triển khai bằng giao diện người dùng web UCP, sử dụng hình ảnh Docker được lưu trữ trong DTR (Docker Trusted Registry).

Các nhóm hoạt động CNTT tận dụng Universal Control Plane để cung cấp phần mềm được cài đặt Docker trên máy chủ, sau đó triển khai ứng dụng của họ mà không cần phải thực hiện một loạt các bước thủ công để thiết lập tất cả cơ sở hạ tầng của họ.

UCP và DTR tích hợp với máy chủ LDAP của họ để nhanh chóng cấp quyền truy cập vào các ứng dụng của họ.

Tôi hy vọng các bạn đã đọc các blog trước để tìm hiểu những điều cơ bản về Docker.

Bây giờ, tôi sẽ giải thích cho bạn cách chúng ta có thể sử dụng Docker Compose cho ứng dụng nhiều vùng chứa.

Thực hành Docker:

Tôi giả sử bạn đã cài đặt Docker.Tôi sẽ sử dụng Docker Compose trong bài đăng này, dưới đây tôi đã đưa ra một giới thiệu nhỏ về Docker Compose.

Docker Soạn: Nó là một công cụ để xác định và chạy các ứng dụng Docker nhiều vùng chứa. Với Docker Compose, bạn có thể sử dụng tệp Soạn để định cấu hình các dịch vụ của ứng dụng. Sau đó, bằng một lệnh duy nhất, bạn có thể tạo và khởi động tất cả các dịch vụ từ cấu hình của mình.

Giả sử bạn có nhiều ứng dụng trong các vùng chứa khác nhau và tất cả các vùng chứa đó được liên kết với nhau. Vì vậy, bạn không muốn thực thi từng vùng chứa đó một. Tuy nhiên, bạn muốn chạy các vùng chứa đó bằng một lệnh duy nhất. Đó là nơi Docker Compose xuất hiện trong bức tranh. Với nó, bạn có thể chạy nhiều ứng dụng trong các vùng chứa khác nhau bằng một lệnh duy nhất. tức là docker-soạn thảo.

Ví dụ: Hãy tưởng tượng bạn có các vùng chứa khác nhau, một vùng chứa đang chạy ứng dụng web, một vùng chứa khác chạy postgres và một vùng chứa khác đang chạy redis, trong một tệp YAML. Đó được gọi là tệp soạn docker, từ đó bạn có thể chạy các vùng chứa này bằng một lệnh duy nhất.

Hãy để chúng tôi lấy một ví dụ nữa:

Giả sử bạn muốn xuất bản một blog, bạn sẽ sử dụng CMS (Hệ thống quản lý nội dung) và wordpress là CMS được sử dụng rộng rãi nhất. Về cơ bản, bạn cần một vùng chứa cho WordPress và bạn cần thêm một vùng chứa nữa làm MySQL cho back end, vùng chứa MySQL đó phải được liên kết với vùng chứa wordpress. Chúng tôi cũng cần một vùng chứa nữa cho Php Myadmin sẽ được liên kết với cơ sở dữ liệu MySQL, về cơ bản, nó được sử dụng để truy cập cơ sở dữ liệu MySQL.

Làm thế nào về việc tôi thực hiện ví dụ nêu trên một cách thực tế.

Các bước liên quan:

  1. Cài đặt Docker Compose :
  2. Cài đặt WordPress: Chúng tôi sẽ sử dụng chính thức WordPressMariaDB Hình ảnh Docker.
  3. Cài đặt MariaDB: Nó là một trong những máy chủ cơ sở dữ liệu phổ biến nhất trên thế giới. Nó được tạo ra bởi các nhà phát triển ban đầu của MySQL. MariaDB được phát triển dưới dạng phần mềm mã nguồn mở và là cơ sở dữ liệu quan hệ, nó cung cấp giao diện SQL để truy cập dữ liệu.
  4. Cài đặt PhpMyAdmin: Nó là một công cụ phần mềm miễn phí được viết bằng PHP, nhằm xử lý việc quản trị MySQL qua Web.
  5. Tạo trang web WordPress:

Bắt đầu nào!

Cài đặt Docker Compose:

Cài đặt Python Pip trước:

sudo apt-get install python-pip

Bây giờ, bạn có thể cài đặt Docker Compose:

sudo pip cài đặt docker-comp

Cài đặt WordPress:

Tạo một thư mục wordpress:

mkdir wordpress

Nhập thư mục wordpress này:

cd wordpress /

Trong thư mục này, hãy tạo tệp Docker Compose YAML, sau đó chỉnh sửa nó bằng gedit:

Đậu trong java là gì
sudo gedit docker -omp.yml

Dán các dòng mã dưới đây vào tệp yaml đó:

wordpress: image: wordpress links: - wordpress_db: mysql port: - 8080: 80 wordpress_db: image: mariadb environment: MYSQL_ROOT_PASSWORD: edureka phpmyadmin: image: corbinu / docker-phpmyadmin links: - wordpress_db: mysql port: - 8181: 80 environment: MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: edureka

Tôi biết bạn muốn tôi giải thích mã này, vì vậy những gì tôi sẽ làm, tôi sẽ lấy các phần nhỏ của mã này và giải thích cho bạn những gì đang xảy ra.

wordpress_db: ... môi trường: MYSQL_ROOT_PASSWORD: edureka ...

Điều này sẽ đặt một biến môi trường bên trong vùng chứa wordpress_db có tên MYSQL_ROOT_PASSWORD với mật khẩu mong muốn của bạn. Hình ảnh MariaDB Docker được cấu hình để kiểm tra biến môi trường này khi nó khởi động và sẽ quản lý việc thiết lập DB với tài khoản gốc với mật khẩu được xác định là MYSQL_ROOT_PASSWORD.

wordpress: ... các cổng: - 8080: 80 ...

Số cổng đầu tiên là số cổng trên máy chủ và số cổng thứ hai là cổng bên trong container. Vì vậy, cấu hình này chuyển tiếp các yêu cầu trên cổng 8080 của máy chủ tới cổng 80 của máy chủ web mặc định bên trong vùng chứa.

phpmyadmin: image: corbinu / docker-phpmyadmin links: - wordpress_db: mysql port: - 8181: 80 environment: MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: edureka

Điều này lấy docker-phpmyadmin bởi thành viên cộng đồng corbinu, liên kết nó với vùng chứa wordpress_db của chúng tôi với tên mysql (có nghĩa là từ bên trong vùng chứa phpmyadmin tham chiếu đến tên máy chủ mysql sẽ được chuyển tiếp đến vùng chứa wordpress_db của chúng tôi), hiển thị cổng 80 của nó trên cổng 8181 của hệ thống máy chủ và cuối cùng đặt một vài biến môi trường với tên người dùng và mật khẩu MariaDB của chúng tôi. Hình ảnh này không tự động lấy biến môi trường MYSQL_ROOT_PASSWORD từ môi trường của wordpress_dbcontainer, giống như hình ảnh wordpress. Chúng tôi thực sự phải sao chép dòng MYSQL_ROOT_PASSWORD: edureka từ vùng chứa wordpress_db và đặt tên người dùng thành root.

Bây giờ hãy bắt đầu nhóm ứng dụng:

docker-soạn up -d

Đó là tất cả những gì bạn phải làm. Bạn có thể thêm bao nhiêu vùng chứa tùy thích theo cách này và liên kết tất cả chúng lại theo bất kỳ cách nào bạn muốn.

Bây giờ, trong trình duyệt, hãy chuyển đến cổng 8080, sử dụng IP công cộng hoặc tên máy chủ của bạn, như được hiển thị bên dưới:

localhost: 8080

Điền vào biểu mẫu này và nhấp vào cài đặt WordPress.

Sau khi hoàn tất, hãy truy cập lại địa chỉ IP của máy chủ của bạn (lần này sử dụng cổng 8181, ví dụ: localhost: 8181). Bạn sẽ được chào đón bởi màn hình đăng nhập phpMyAdmin:

Hãy tiếp tục và đăng nhập bằng tên người dùng và mật khẩu bạn đã đặt trong tệp YAML và bạn sẽ có thể duyệt cơ sở dữ liệu của mình. Bạn sẽ nhận thấy rằng máy chủ bao gồm cơ sở dữ liệu wordpress, chứa tất cả dữ liệu từ cài đặt WordPress của bạn.

Đến đây, tôi kết thúc blog Docker Container của mình. Tôi hy vọng bạn đã thích bài viết này. Bạn có thể kiểm tra các blog khác trong loạt bài này cũng đề cập đến những điều cơ bản của Docker.

Nếu bạn thấy blog Docker Container này có liên quan, hãy xem của Edureka, một công ty học trực tuyến đáng tin cậy với mạng lưới hơn 250.000 người học hài lòng trải dài trên toàn cầu. Khóa đào tạo Chứng chỉ Edureka DevOps giúp người học có được kiến ​​thức chuyên môn về các quy trình và công cụ DevOps khác nhau như Puppet, Jenkins, Docker, Nagios, Ansible, Chef, Saltstack và GIT để tự động hóa nhiều bước trong SDLC.

Có một câu hỏi cho tôi? Vui lòng đề cập đến nó trong phần bình luận và tôi sẽ liên hệ lại với bạn.