Cách sử dụng Ansible để cài đặt và thiết lập Docker trên Ubuntu 18.04
Tự động hóa server hiện nay đóng một role thiết yếu trong quản trị hệ thống, do tính chất dùng một lần của các môi trường ứng dụng hiện đại. Các công cụ quản lý cấu hình như Ansible thường được sử dụng để hợp lý hóa quá trình tự động hóa cài đặt server bằng cách cài đặt các quy trình tiêu chuẩn cho các server mới đồng thời giảm lỗi do con người liên quan đến cài đặt thủ công.Ansible cung cấp một kiến trúc đơn giản không yêu cầu cài đặt phần mềm đặc biệt trên các node . Nó cũng cung cấp một bộ tính năng mạnh mẽ và các module tích hợp giúp tạo điều kiện thuận lợi cho việc viết các tập lệnh tự động hóa.
Hướng dẫn này giải thích cách sử dụng Ansible để tự động hóa các bước có trong hướng dẫn của ta về Cách cài đặt và sử dụng Docker trên Ubuntu 18.04 . Docker là một ứng dụng giúp đơn giản hóa quá trình quản lý vùng chứa , các quá trình tách biệt tài nguyên hoạt động theo cách tương tự như máy ảo, nhưng di động hơn, thân thiện với tài nguyên hơn và phụ thuộc nhiều hơn vào hệ điều hành server .
Yêu cầu
Để thực hiện cài đặt tự động được cung cấp bởi playbook mà ta đang thảo luận trong hướng dẫn này, bạn cần:
- Một nút điều khiển Ansible : máy Ubuntu 18.04 được cài đặt và cấu hình Ansible để kết nối với các server Ansible của bạn bằng các SSH key . Đảm bảo rằng nút điều khiển có regular user có quyền sudo và đã bật firewall , như được giải thích trong hướng dẫn Cài đặt Server Ban đầu của ta . Để cài đặt Ansible, hãy làm theo hướng dẫn của ta về Cách cài đặt và cấu hình Ansible trên Ubuntu 18.04 .
- Một hoặc nhiều Server Ansible : một hoặc nhiều server Ubuntu 18.04 từ xa đã được cài đặt trước đó theo hướng dẫn về Cách sử dụng Ansible để Tự động hóa Cài đặt Server Ban đầu trên Ubuntu 18.04 .
 Trước khi tiếp tục, trước tiên bạn cần  đảm bảo  nút điều khiển Ansible của bạn có thể kết nối và thực thi các lệnh trên (các)  server  Ansible của bạn. Để kiểm tra kết nối, vui lòng kiểm tra bước 3 của Cách cài đặt và cấu hình Ansible trên Ubuntu 18.04 .
Playbook này làm được gì?
Playbook Ansible này cung cấp một giải pháp thay thế cho việc chạy thủ công theo quy trình được nêu trong hướng dẫn của ta về Cách cài đặt và sử dụng Docker trên Ubuntu 18.04 .
Chạy playbook này sẽ thực hiện các việc sau trên server Ansible của bạn:
-  Cài đặt aptitude, được Ansible ưa thích như một giải pháp thay thế cho trình quản lý góiapt.
- Cài đặt các gói hệ thống cần thiết.
- Cài đặt khóa Docker GPG APT.
-  Thêm repository  Docker chính thức vào các nguồn apt.
- Cài đặt Docker.
-  Cài đặt module  Docker Python qua pip.
-  Kéo hình ảnh mặc định được chỉ định bởi default_container_imagetừ Docker Hub.
-  Tạo số lượng containers  được xác định bởi biến create_containers, mỗi containers sử dụng hình ảnh được xác định bởidefault_container_imagevà thực thi lệnh được xác định trongdefault_container_commandtrong mỗi containers mới.
Sau khi playbook chạy xong, bạn sẽ có một số containers được tạo dựa trên các tùy chọn bạn đã xác định trong các biến cấu hình của bạn .
Cách sử dụng Playbook này
Điều đầu tiên ta cần làm là tải về Docker playbook và các phụ thuộc của nó từ repository do-community / ansible-playbooks . Ta cần sao chép repository này vào một folder local bên trong Ansible Control Node.
Trong trường hợp bạn đã sao chép repository  này trước đó trong khi làm theo một hướng dẫn khác, hãy truy cập bản sao ansible-playbooks hiện có của bạn và chạy git pull  đảm bảo  bạn có nội dung cập nhật:
- cd ~/ansible-playbooks 
- git pull 
Nếu đây là lần đầu tiên bạn sử dụng repository  do-community/ansible-playbooks , bạn nên bắt đầu bằng cách sao chép repository  vào folder  chính của bạn với:
- cd ~ 
- git clone https://github.com/do-community/ansible-playbooks.git 
- cd ansible-playbooks 
Các file   ta  quan tâm nằm bên trong folder  docker_ubuntu1804 , có cấu trúc như sau:
docker_ubuntu1804 ├── vars │   └── default.yml ├── playbook.yml └── readme.md Đây là nội dung của từng file này:
-  vars/default.yml: Tệp biến để tùy chỉnh cài đặt sách vở.
-  playbook.yml: Tệp playbook, chứa các việc sẽ được thực thi trên (các) server từ xa.
-  readme.md: Tệp văn bản chứa thông tin về sách chơi này.
  Ta  sẽ chỉnh sửa file  biến của playbook để tùy chỉnh  cài đặt  Docker của  ta . Truy cập folder  docker_ubuntu1804 và mở file  vars/default.yml bằng  editor  dòng lệnh mà bạn chọn:
- cd docker_ubuntu1804 
- nano vars/default.yml 
Tệp này chứa một số biến cần bạn chú ý:
--- create_containers: 4 default_container_name: docker default_container_image: ubuntu default_container_command: sleep 1d Danh sách sau đây chứa giải thích ngắn gọn về từng biến này và cách bạn có thể cần thay đổi chúng:
-  create_containers: Số lượng containers cần tạo.
-  default_container_name: Tên containers mặc định.
-  default_container_image: Docker image mặc định được sử dụng khi tạo containers .
-  default_container_command: Lệnh mặc định để chạy trên các containers mới.
 Khi bạn đã cập nhật xong các biến bên trong vars/default.yml , hãy  lưu file   này. Nếu bạn đã sử dụng nano , hãy làm như vậy bằng cách nhấn CTRL + X , Y , sau đó ENTER .
  Đến đây bạn  đã sẵn sàng để chạy playbook này trên một hoặc nhiều  server . Theo mặc định, hầu hết các sách chơi đều được  cấu hình  để chạy trên mọi  server  trong repository  của bạn.  Ta  có thể sử dụng cờ -l  đảm bảo  rằng chỉ một tập hợp con các  server  hoặc một  server  duy nhất bị ảnh hưởng bởi playbook.  Ta  cũng có thể sử dụng cờ -u để chỉ định  user  nào trên  server  từ xa mà  ta  đang sử dụng để kết nối và thực hiện các lệnh playbook trên  server  từ xa.
 Để thực thi playbook chỉ trên server1 , kết nối  với quyền  sammy , bạn có thể sử dụng lệnh sau:
- ansible-playbook playbook.yml -l server1 -u sammy 
Bạn sẽ nhận được kết quả tương tự như sau:
Output... TASK [Add Docker GPG apt Key] ******************************************************************************************************************** changed: [server1]  TASK [Add Docker Repository] ********************************************************************************************************************* changed: [server1]  TASK [Update apt and install docker-ce] ********************************************************************************************************** changed: [server1]  TASK [Install Docker Module for Python] ********************************************************************************************************** changed: [server1]  TASK [Pull default Docker image] ***************************************************************************************************************** changed: [server1]  TASK [Create default containers] ***************************************************************************************************************** changed: [server1] => (item=1) changed: [server1] => (item=2) changed: [server1] => (item=3) changed: [server1] => (item=4)  PLAY RECAP *************************************************************************************************************************************** server1                  : ok=9    changed=8    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0      Lưu ý : Để biết thêm thông tin về cách chạy sách chơi Ansible, hãy xem Hướng dẫn Trang tính Cheat Ansible của  ta .
 Khi playbook chạy xong, hãy đăng nhập qua SSH vào  server  do Ansible cung cấp và chạy docker docker ps -a để kiểm tra xem các containers  đã được tạo thành công hay chưa:
- sudo docker ps -a 
Bạn sẽ thấy kết quả tương tự như sau:
OutputCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES a3fe9bfb89cf        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker4 8799c16cde1e        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker3 ad0c2123b183        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker2 b9350916ffd8        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker1 Điều này nghĩa là các containers được xác định trong playbook đã được tạo thành công. Vì đây là tác vụ cuối cùng trong playbook nên nó cũng xác nhận playbook đã được thực thi đầy đủ trên server này.
Nội dung Playbook
 Bạn có thể tìm thấy  cài đặt   server  Docker được nêu trong hướng dẫn này trong folder  docker_ubuntu1804 bên trong repository  lưu trữ Playbooks Cộng đồng DigitalOcean . Để sao chép hoặc  download  trực tiếp nội dung tập lệnh, hãy nhấp vào nút Raw ở đầu mỗi tập lệnh.
Toàn bộ nội dung của playbook cũng như các file liên quan cũng được đưa vào đây để bạn tiện theo dõi.
vars / default.yml
 Tệp biến default.yml chứa các giá trị sẽ được sử dụng khi  cài đặt  Docker trên  server  của bạn.
--- create_containers: 4 default_container_name: docker default_container_image: ubuntu default_container_command: sleep 1d playbook.yml
 Tệp playbook.yml là nơi xác định tất cả  các việc  từ  cài đặt  này. Nó bắt đầu bằng cách xác định  group   server  nên là mục tiêu của  cài đặt  này ( all ), sau đó nó sử dụng hàm become: true để xác định rằng  các việc  phải được thực thi với sự leo thang  quyền  ( sudo ) theo mặc định. Sau đó, nó bao gồm file  biến vars/default.yml để tải các tùy chọn cấu hình.
--- - hosts: all   become: true   vars_files:     - vars/default.yml    tasks:     - name: Install aptitude using apt       apt: name=aptitude state=latest update_cache=yes force_apt_get=yes      - name: Install required system packages       apt: name={{ item }} state=latest update_cache=yes       loop: [ 'apt-transport-https', 'ca-certificates', 'curl', 'software-properties-common', 'python3-pip', 'virtualenv', 'python3-setuptools']      - name: Add Docker GPG apt Key       apt_key:         url: https://download.docker.com/linux/ubuntu/gpg         state: present      - name: Add Docker Repository       apt_repository:         repo: deb https://download.docker.com/linux/ubuntu bionic stable         state: present      - name: Update apt and install docker-ce       apt: update_cache=yes name=docker-ce state=latest      - name: Install Docker Module for Python       pip:         name: docker      - name: Pull default Docker image       docker_image:         name: "{{ default_container_image }}"         source: pull      # Creates the number of containers defined by the variable create_containers, using values from vars file     - name: Create default containers       docker_container:         name: "{{ default_container_name }}{{ item }}"         image: "{{ default_container_image }}"         command: "{{ default_container_command }}"         state: present       with_sequence: count={{ create_containers }}  Vui lòng sửa đổi sổ chơi này để phù hợp nhất với nhu cầu cá nhân của bạn trong quy trình làm việc  của bạn . Ví dụ: bạn có thể sử dụng module docker_image để đẩy hình ảnh đến Docker Hub hoặc module  docker_container để  cài đặt  mạng containers .
Kết luận
Tự động hóa cài đặt cơ sở hạ tầng của bạn không chỉ có thể giúp bạn tiết kiệm thời gian mà còn giúp đảm bảo các server của bạn sẽ tuân theo một cấu hình tiêu chuẩn có thể được tùy chỉnh theo nhu cầu của bạn. Với bản chất phân tán của các ứng dụng hiện đại và nhu cầu nhất quán giữa các môi trường dàn dựng khác nhau, tự động hóa như thế này đã trở thành một thành phần trung tâm trong quá trình phát triển của nhiều group .
 Trong hướng dẫn này,  ta  đã trình bày cách sử dụng Ansible để tự động hóa quá trình cài đặt và  cài đặt  Docker trên  server  từ xa. Bởi vì mỗi cá nhân thường có nhu cầu khác nhau khi làm việc với các container,  ta  khuyên bạn kiểm tra tài liệu Ansible chính thức để biết thêm thông tin và sử dụng trường hợp của docker_container module  Ansible.
Nếu bạn muốn bao gồm các việc khác trong playbook này để tùy chỉnh thêm cài đặt server ban đầu của bạn , vui lòng tham khảo hướng dẫn giới thiệu về Quản lý cấu hình của Ansible 101: Viết Playbook Ansible .
Các tin liên quan
Cách tạo ứng dụng Django và Gunicorn với Docker2019-10-25
Cách thiết lập Flask với MongoDB và Docker
2019-10-11
Cách cài đặt và sử dụng Docker trên Debian 10
2019-07-08
Cách sử dụng server Docker từ xa để tăng tốc quy trình làm việc của bạn
2019-06-25
Cách cài đặt WordPress với Docker Compose
2019-05-24
Cách di chuyển Docker compose workflow sang Kubernetes
2019-04-03
Cách tối ưu hóa image Docker cho sản xuất
2019-03-25
Giữ lại một ứng dụng Node.js để phát triển với Docker Compose
2019-03-05
Cách cài đặt và sử dụng Docker Compose trên CentOS 7
2019-01-23
Cách sử dụng Traefik làm reverse-proxy cho container Docker trên Debian 9
2019-01-08
 

