Tải bản đầy đủ (.doc) (79 trang)

TỰ ĐỘNG HOÁ QUÁ TRÌNH XÂY DỰNG DOCKER CONTAINER VỚI ANSIBLE

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.32 MB, 79 trang )

BỘ THÔNG TIN VÀ TRUYỀN THÔNG
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THƠNG
------------------------------

BÁO CÁO ĐỒ ÁN
TỐT NGHIỆP ĐẠI HỌC
Đề tài:
“ TỰ ĐỘNG HỐ Q TRÌNH XÂY DỰNG
DOCKER CONTAINER VỚI ANSIBLE”

Người hướng dẫn
Sinh viên thực hiện
Mã số sinh viên
Lớp
Khố
Hệ

:
:
:
:
:
:

ĐẠI HỌC CHÍNH QUY

TP.HCM, tháng 12/2019


Báo cáo DATN Đại Học
Lời cảm ơn



LỜI CẢM ƠN
Trong thời thời gian học tập và hoàn thành đồ án tốt nghiệp “Tự động hố q trình xây
Docker container với Ansible” em ln nhận được sự giúp đỡ tận tình của thầy hướng dẫn,
quý thầy cô trong khoa Công nghệ Thông tin 2 và các bạn.
Lời đầu tiên em xin được gửi lời cảm ơn trân trọng tới thầy, TS. Nguyễn Hồng Sơn,
người đã tận tâm hướng dẫn em trong quá trình hồn thành đồ án. Thầy ln tận tâm truyền
đạt kiến thức mới và giúp em giải đáp các vấn đề cịn thiếu sót trong nhiệm vụ được giao.
Đồng thời em cũng xin chân thành cảm ơn quý thầy cô trong khoa Công nghệ thông tin 2
đã chỉ bảo và tạo mọi điều kiện để em có thể hồn thành đồ án tốt nghiệp này.
Tuy đã nỗ lực thực hiện đề tài được giao nhưng do thời gian có hạn và kiến thức chưa đầy
đủ, nên bài báo cáo còn nhiều thiếu sót, em mong nhận được sự thơng cảm và lời góp ý từ q
thầy cơ cùng các bạn để đề tài được hồn thiện hơn.
Em xin kính chúc quý thầy cô dồi dào sức khoẻ và thành công trong sự nghiệp cao quý.
Chúc các bạn sớm đạt được nguyện vọng và thành đạt trong cuộc sống.
Một lần nữa em xin chân thành cám ơn!
TPHCM, tháng 12 năm 2019
Sinh viên thực hiện

Nguyễn Thị Ngọc Yến – D15CQMT01-N
i


Báo cáo DATN Đại Học
Mục lục

MỤC LỤC
MỞ ĐẦU.........................................................................................................................................1
LÝ THUYẾT VỀ DOCKER........................................................................................................2
TỰ ĐỘNG HOÁ IT AUTOMATION VỚI ANSIBLE...........................................................17

GIẢI PHÁP CONSUL................................................................................................................30
THỰC HÀNH TỰ ĐỘNG HOÁ XÂY DỰNG DNS CONSUL BẰNG ANSIBLE TRÊN
NỀN TẢNG DOCKER CONTAINER.....................................................................................42
KẾT LUẬN..................................................................................................................................72
TÀI LIỆU THAM KHẢO..........................................................................................................73

Nguyễn Thị Ngọc Yến – D15CQMT01-N
ii


Báo cáo DATN Đại Học
Danh mục các ký hiệu và từ viết tắt

DANH MỤC CÁC KÝ HIỆU VÀ TỪ VIẾT TẮT
API: Application Programming Interface
AWS: Amazon Web Service
CD: Continuous Delivery
CPU: Central Processing Unit
DNS: Domain Name System
DSL: Domain Specific Language
HTTP: Hypertext Transfer Protocol
IP: Internet Protocol
IT: Information Technology
LAN: Local Area Network
OS: Operation System
RAM: Random Memory Access
RPC: Remote Procedure Call
SR: Service Registry
SSH: Secure Shell
TCP: Transmission Control Protocol

TLD: Top Level Domain
UDP: User Datagram Protocol
VM: Virtual Machine
WAN: Wide Area Network
YAML: YAML Ain't Markup Language

Giao diện lập trình ứng dụng
Nền tảng điện tốn đám mây Amazon
Phân phối liên tục
Đơn vị xử lý trung tâm
Hệ thống phân giải tên miền
Ngôn ngữ đặc tả chuyên biệt
Giao thức truyền tin siêu văn bản
Giao thức Internet
Công nghệ thông tin
Mạng cục bộ
Hệ điều hành
Bộ nhớ truy xuất ngẫu nhiên
Gọi thủ tục từ xa
Cơ sở dữ liệu dịch vụ
Giao thức kết nối an toàn
Giao thức điều khiển truyền tin
Tên miền mức cao nhất
Giao thức dữ liệu người dùng
Máy ảo
Mạng diện rộng
Ngôn ngữ tuần tự hoá dữ liệu

Nguyễn Thị Ngọc Yến – D15CQMT01-N
iii



Báo cáo DATN Đại Học
Danh mục các bảng, sơ đồ, hình ảnh

DANH MỤC CÁC BẢNG, SƠ ĐỒ, HÌNH ẢNH
Hình 1.1 Mơ hình máy chủ cổ điển.............................................................................................2
Hình 1.2 Mơ hình máy chủ sử dụng cơng nghệ ảo hố............................................................5
Hình 1.3 Mơ hình máy chủ sử dụng cơng nghệ containerlization..........................................5
Hình 1.4 Docker Engine...............................................................................................................6
Hình 1.5 REST API.......................................................................................................................8
Hình 1.6 Hoạt động của API........................................................................................................9
Hình 1.7 Kiến trúc của Docker..................................................................................................10
Hình 1.8 Quy trình tạo ra Docker Container..........................................................................12
Hình 1.9 Thơng tin Docker network mode bridge.................................................................15
Hình 1.10 Thơng tin Docker network mode User-defined bridge........................................16
Hình 2.11 So sánh các cơng cụ Automation.............................................................................17
Hình 2.12 Độ phổ biến của các cơng cụ Automation..............................................................18
Hình 2.13 Kiến trúc hoạt động của Ansible.............................................................................21
Hình 2.14 So sánh các Data Model...........................................................................................21
Hình 2.15 Sự khác nhau giữa Dictionary và Array/List trong YAML................................23
Hình 2.16 Ansible Role...............................................................................................................29
Hình 3.17 Khó khăn của việc truy tìm dịch vụ trong ứng dụng Microservices.................32
Hình 3.18 Client-side Discovery................................................................................................33
Hình 3.19 Server-side Discovery...............................................................................................35
Hình 3.20 Giao tiếp trong một cụm Consul Datacenter........................................................38
Hình 3.21 Giao tiếp giữa nhiều cụm Consul Datacenter.......................................................40
Hình 4.22 Hệ thống phân cấp DNS - DNS Hierachy..............................................................43
Hình 4.23 File cấu hình Ansible - ansbile.cfg..........................................................................44
Hình 4.24 File Inventory - hosts................................................................................................44

Hình 4.25 Playbook cấu hình Server node - server.yml.........................................................45
Hình 4.26 Playbook cấu hình Agent node – agent.yml..........................................................45
Hình 4.27 Playbook cấu hình Registrator – registrator.yml.................................................46
Hình 4.28 Playbook tạo Service trên Client – service.yml....................................................47
Hình 4.29 Playbook tạo Service trên Server – service.yml...................................................47
Hình 4.30 Playbook kiểm tra kết quả DNS nslookup - test.yml...........................................49
Hình 4.31 Playbook kiểm tra kết quả DNS dig – test.yml.....................................................50
Hình 4.32 Thư mục Docker roles..............................................................................................50
Hình 4.33 Docker roles - /tasks/main.yml (1)..........................................................................52
Hình 4.34 Docker roles - /tasks/main.yml (2)..........................................................................52
Hình 4.35 Thư mục Consul roles..............................................................................................53
Hình 4.36 File biến mặc định - /defaults/main.yml................................................................53
Hình 4.37 File jinja2 cấu hình Consul Server - /templates/server.json.j2...........................54
Nguyễn Thị Ngọc Yến – D15CQMT01-N
iv


Báo cáo DATN Đại Học
Danh mục các bảng, sơ đồ, hình ảnh
Hình 4.38 File jinja2 cấu hình Consul Agent - /templates/agent.json.j2.............................55
Hình 4.39 File jinja2 cấu hình dnsmasq - /templates/10-consul.j2......................................55
Hình 4.40 Consul Role cấu hình Consul Server - /tasks/server.yml....................................56
Hình 4.41 Consul Role cấu hình Consul Agent - /tasks/agent.yml.......................................56
Hình 4.42 Consul Role cấu hình dnsmasq - /tasks/dnsmasq.yml.........................................57
Hình 4.43 Consul Role cấu hình tổng hợp - /tasks/main.yml...............................................59
Hình 4.44 Thư mục Ansbile trên server ansbile.....................................................................60
Hình 4.45 Run playbook server.yml (1)...................................................................................61
Hình 4.46 Run playbook server.yml (2)...................................................................................61
Hình 4.47 Run playbook agent.yml (1)....................................................................................62
Hình 4.48 Run playbook agent.yml (2)....................................................................................62

Hình 4.49 Run playbook registrator.yml.................................................................................63
Hình 4.50 Run playbook service.yml........................................................................................63
Hình 4.51 Docker container trên server ansible.....................................................................63
Hình 4.52 Docker container trên agent ansbile_1..................................................................63
Hình 4.53 Consul members........................................................................................................64
Hình 4.54 Consul node................................................................................................................64
Hình 4.55 Consul Service...........................................................................................................65
Hình 4.56 Service nginx trên host ansible...............................................................................65
Hình 4.57 Service httpd trên host ansible_1............................................................................66
Hình 4.58 Kiểm tra tự động bằng playbook test.yml (1).......................................................66
Hình 4.59 Kiểm tra tự động bằng playbook test.yml (2).......................................................67
Hình 4.60 Kiểm tra tự động bằng playbook test.yml (3).......................................................67
Hình 4.61 Kiểm tra tự động bằng playbook test.yml (4).......................................................68
Hình 4.62 Kiểm tra tự động bằng playbook test.yml (5).......................................................69
Hình 4.63 Kiểm tra thủ cơng trên host ansbile - nslookup...................................................69
Hình 4.64 Kiểm tra thủ cơng trên host ansbile - ping (1)......................................................70
Hình 4.65 Kiểm tra thủ cơng trên host ansbile - ping (2)......................................................70
Hình 4.66 Kiểm tra thủ cơng trên host ansbile - dig..............................................................70
Hình 4.67 Kiểm tra thủ cơng trên host ansbile_1 - nslookup...............................................71
Hình 4.68 Kiểm tra thủ cơng trên host ansbile_1 - ping (1)..................................................71
Hình 4.69 Kiểm tra thủ công trên host ansbile_1 - ping (2)..................................................71
Hình 4.70 Kiểm tra thủ cơng trên host ansbile_1 – dig.........................................................71

Nguyễn Thị Ngọc Yến – D15CQMT01-N
v


Báo cáo DATN Đại Học
Mở đầu


MỞ ĐẦU
Ngày nay với sự phát triển vũ bão của cơng nghệ thơng tin thì nhu cầu sử dụng các máy
tính ngày càng nhiều, tuy nhiên với cách xây dựng máy tính cổ điển đã khơng tận dụng được
tối đa các tài ngun sẵn có, từ đó các cơng nghệ ảo hố ra đời. Ảo hố tạo ra các VM (Virtual
Machine) có các hệ điều hành khác nhau nhưng vẫn có sự tiêu tốn tài ngun được cấp phát
cho chúng. Cơng nghệ Containerlization đóng gói các ứng dụng thành các container tận dụng
tối đa khi chia sẻ tài nguyên với máy chủ vật lý . Docker là một trong các dự án mã nguồn mở
cho phép phát triển, đóng gói, thực thi các ứng dụng thành các container.
Tuy nhiên thực hiện cấu hình và quản lý các container và số lượng máy tính lớn gây ra
việc phải lặp đi lặp lại nhiều thao tác giống nhau. Các cơng cụ tự động hố Automation giúp
chúng ta thực hiện điều này dễ dàng, nhanh chóng và tập trung hơn. Trong đó Ansible là cơng
cụ nổi bật hơn hết với tính tiện dụng và dễ dàng tiếp cận. Đây chính là lý do em chọn đề tài
“Tự động hố q trình xây dựng Docker Container với Ansible”.
Nội dung chính của đồ án tốt nghiệp bao gồm các mục sau:
Chương 1: Lý thuyết về Docker
Chương 2: Tự động hoá IT Automation với Ansible
Chương 3 Giải pháp Consul
Chương 4: Thực hành tự động hoá xây dựng DNS Consul bằng Ansible trên nền tảng Docker
Container

Nguyễn Thị Ngọc Yến – D15CQMT01-N
1


Báo cáo DATN Đại Học
Chương 1. Lý thuyết về Docker

LÝ THUYẾT VỀ DOCKER
1.1


Quá trình hình thành

Theo cách cổ điển, một máy chủ thường bao gồm một máy chủ vật lý, hệ điều hành và
các ứng dụng
INCLUDEPICTURE "a/uploads/19a271ca-f444-4bd5-b04af1b9c5ce10fd.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/19a271ca-f444-4bd5-b04a-f1b9c5ce10fd.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/uploads/19a271ca-f4444bd5-b04a-f1b9c5ce10fd.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/19a271ca-f444-4bd5-b04a-f1b9c5ce10fd.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/uploads/19a271ca-f4444bd5-b04a-f1b9c5ce10fd.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/19a271ca-f444-4bd5-b04a-f1b9c5ce10fd.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/uploads/19a271ca-f4444bd5-b04a-f1b9c5ce10fd.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/19a271ca-f444-4bd5-b04a-f1b9c5ce10fd.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/uploads/19a271ca-f4444bd5-b04a-f1b9c5ce10fd.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/19a271ca-f444-4bd5-b04a-f1b9c5ce10fd.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/uploads/19a271ca-f4444bd5-b04a-f1b9c5ce10fd.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/19a271ca-f444-4bd5-b04a-f1b9c5ce10fd.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/uploads/19a271ca-f4444bd5-b04a-f1b9c5ce10fd.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/19a271ca-f444-4bd5-b04a-f1b9c5ce10fd.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/uploads/19a271ca-f4444bd5-b04a-f1b9c5ce10fd.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/19a271ca-f444-4bd5-b04a-f1b9c5ce10fd.png" \*
MERGEFORMATINET

Hình 1.1 Mơ hình máy chủ cổ điển
Nguyễn Thị Ngọc Yến – D15CQMT01-N
2


Báo cáo DATN Đại Học
Chương 1. Lý thuyết về Docker
Nhưng cách xây dựng máy chủ này gây lãng phí tài nguyên khi không thể tận dụng tài

nguyên về CPU, RAM, dung lượng lưu trữ và chỉ chạy một hệ điều hành. Từ đó cơng nghệ ảo
hố ra đời

Nguyễn Thị Ngọc Yến – D15CQMT01-N
3


Báo cáo DATN Đại Học
Chương 1. Lý thuyết về Docker
INCLUDEPICTURE "a/uploads/f83e4a3a-bc95-4a4d-af37dbaa9e03d28f.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/f83e4a3a-bc95-4a4d-af37-dbaa9e03d28f.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/uploads/f83e4a3a-bc954a4d-af37-dbaa9e03d28f.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/f83e4a3a-bc95-4a4d-af37-dbaa9e03d28f.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/uploads/f83e4a3a-bc954a4d-af37-dbaa9e03d28f.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/f83e4a3a-bc95-4a4d-af37-dbaa9e03d28f.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/uploads/f83e4a3a-bc954a4d-af37-dbaa9e03d28f.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/f83e4a3a-bc95-4a4d-af37-dbaa9e03d28f.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/uploads/f83e4a3a-bc954a4d-af37-dbaa9e03d28f.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/f83e4a3a-bc95-4a4d-af37-dbaa9e03d28f.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/uploads/f83e4a3a-bc954a4d-af37-dbaa9e03d28f.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/f83e4a3a-bc95-4a4d-af37-dbaa9e03d28f.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/uploads/f83e4a3a-bc954a4d-af37-dbaa9e03d28f.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/f83e4a3a-bc95-4a4d-af37-dbaa9e03d28f.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/uploads/f83e4a3a-bc954a4d-af37-dbaa9e03d28f.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/uploads/f83e4a3a-bc95-4a4d-af37-dbaa9e03d28f.png" \*
MERGEFORMATINET

Nguyễn Thị Ngọc Yến – D15CQMT01-N
4



Báo cáo DATN Đại Học
Chương 1. Lý thuyết về Docker
Hình 1.2 Mơ hình máy chủ sử dụng cơng nghệ ảo hố
Với cơng nghệ này, trên một máy chủ vật lý có thể tạo ra nhiều máy ảo với hệ điều hành
khác nhau nhưng đồng thời cũng nảy sinh vấn đề về việc lãng phí khi cấp phát tài nguyên cho
các máy ảo. Vì vậy, người ta tạo ra cơng nghệ containerlization. Công nghệ này cho phép trên
một máy chủ vật lý sẽ sinh ra các máy con nhưng được tối ưu hơn khi các máy con dùng
chung hệ điều hành và chia sẻ tài nguyên với máy chủ vật lý. Việc cấp phát tài nguyên cho
các container sẽ được thực hiện theo nhu cầu và được tối ưu hơn.

Hình 1.3 Mơ hình máy chủ sử dụng cơng nghệ containerlization
1.2

Container

Các ứng dụng sẽ được Container Engine (cơng cụ ảo hố đặt trên host OS) đóng gói
thành các container. Container là giải pháp chuyển giao ứng dụng một cách tin cậy giữa các
máy tính khác nhau bằng cách: Tạo ra mơi trường chứa tất cả các điều kiện cần thiết để chạy
ứng dụng đó, khơng bị các yếu tố ảnh hưởng và làm ảnh hưởng đến hệ thống. Các tiến trình
(process) trong một container bị cô lập với các container khác cùng hệ thống nhưng chia sẻ
host OS với nhau.
Ưu điểm:
• Linh động: có thể triển khai ở bất kỳ đâu do khơng có sự phụ thuộc vào OS và các nền
tảng vật lý.
• Việc thực thi các container nhanh hơn do dùng chung OS với máy chủ vật lý
• Khơng tiêu tốn q nhiều dung lượng
• Khơng xảy ra sự sai khác về mơi trường khi thực hiện dự án nhóm
• Việc thực thi hay loại bỏ các container dễ dàng hơn khi các chương trình đã được đóng
gói vào một container.

1.3

Docker

Docker là một nền tảng mở cho phép phát triển, đóng gói, thực thi các ứng dụng thành
các Container. Nó có thể xây dựng, chuyển giao và thực thi ứng dụng trên các nền tảng mà
Docker có thể được cài đặt và làm việc trên đó.
Nguyễn Thị Ngọc Yến – D15CQMT01-N
5


Báo cáo DATN Đại Học
Chương 1. Lý thuyết về Docker
1.3.1

Các thành phần chính

1.3.1.a Docker Engine
Docker Engine là cơng cụ Client - Server hỗ trợ công nghệ container để xử lý các nhiệm
vụ và quy trình cơng việc liên quan đến việc xây dựng các ứng dụng dựa trên vùng chứa
(container). Engine tạo ra một quy trình daemon phía máy chủ lưu trữ images, containers,
networks và storage volumes. Daemon cũng cung cấp giao diện dịng lệnh phía máy khách
(CLI) cho phép người dùng tương tác với daemon thông qua giao diện lập trình ứng dụng
Docker.

Hình 1.4 Docker Engine
- Images: là thành phần để đóng gói ứng dụng và các thành phần mà ứng dụng phụ thuộc để
chạy. Và image được lưu trữ ở trên local hoặc trên một Registry (là nơi lưu trữ và cung cấp
kho chứa các image)
- Containers: là một instance của image, và nó hoạt động như một thư mục, chứa tất cả

những thứ cần thiết để chạy một ứng dụng
- Network: cung cấp một mạng riêng chỉ tồn tại giữa container và host
- Volume: Volume trong Docker được dùng để chia sẻ dữ liệu cho container
• Rest API (RESTful API):
REST là viết tắt của Representational State Transfer. Giải thích đơn giản, REST là một
loạt hướng dẫn và dạng cấu trúc dùng cho việc chuyển đổi dữ liệu. Thông thường, REST hay
được dùng cho ứng dụng web, nhưng cũng có thể làm việc được với dữ liệu phần mềm. API
là viết tắt của Application Programming Interface, phương thức kết nối với các thư viện và
ứng dụng khác. REST API là một ứng dụng chuyển đổi cấu trúc dữ liệu có các phương thức
để kết nối với các thư viện và ứng dụng khác.

Nguyễn Thị Ngọc Yến – D15CQMT01-N
6


Báo cáo DATN Đại Học
Chương 1. Lý thuyết về Docker
INCLUDEPICTURE " \* MERGEFORMATINET INCLUDEPICTURE
" \* MERGEFORMATINET INCLUDEPICTURE
" \* MERGEFORMATINET INCLUDEPICTURE
" \* MERGEFORMATINET INCLUDEPICTURE
" \* MERGEFORMATINET INCLUDEPICTURE
" \* MERGEFORMATINET INCLUDEPICTURE
" \* MERGEFORMATINET INCLUDEPICTURE
" \* MERGEFORMATINET INCLUDEPICTURE
" \* MERGEFORMATINET INCLUDEPICTURE
" \* MERGEFORMATINET INCLUDEPICTURE
" \* MERGEFORMATINET INCLUDEPICTURE
" \* MERGEFORMATINET INCLUDEPICTURE
" \* MERGEFORMATINET INCLUDEPICTURE

" \* MERGEFORMATINET INCLUDEPICTURE
" \* MERGEFORMATINET INCLUDEPICTURE
" />
Nguyễn Thị Ngọc Yến – D15CQMT01-N
7


Báo cáo DATN Đại Học
Chương 1. Lý thuyết về Docker
1014x457.jpg?resize=806,363" \* MERGEFORMATINET

Hình 1.5 REST API
Nhìn chung, có bốn lệnh dùng để truy cập RESTful API:
• GET để truy vấn object
• POST để tạo object mới
• PUT để sửa đổi hoặc thay thế một object
• DELETE để loại bỏ một object
Mỗi phương thức trên phải được API call thông qua để gửi chỉ thị cho server phải làm gì.

Nguyễn Thị Ngọc Yến – D15CQMT01-N
8


Báo cáo DATN Đại Học
Chương 1. Lý thuyết về Docker
INCLUDEPICTURE " \* MERGEFORMATINET INCLUDEPICTURE
" \*
MERGEFORMATINET INCLUDEPICTURE " \* MERGEFORMATINET INCLUDEPICTURE
" \*
MERGEFORMATINET INCLUDEPICTURE " \* MERGEFORMATINET INCLUDEPICTURE

" \*
MERGEFORMATINET INCLUDEPICTURE " \* MERGEFORMATINET INCLUDEPICTURE
" \*
MERGEFORMATINET INCLUDEPICTURE " \* MERGEFORMATINET INCLUDEPICTURE
" \*
MERGEFORMATINET INCLUDEPICTURE " \* MERGEFORMATINET INCLUDEPICTURE
" \*
MERGEFORMATINET INCLUDEPICTURE " \* MERGEFORMATINET INCLUDEPICTURE
" \*
MERGEFORMATINET INCLUDEPICTURE " \* MERGEFORMATINET INCLUDEPICTURE
" \*
MERGEFORMATINET

Hình 1.6 Hoạt động của API
1.3.1.b Docker Hub (Distribution Tool)
Docker Hub là một công cụ phần mềm như một dịch vụ cho phép người dùng public hay
private các images. Dịch vụ cung cấp hơn 100.000 ứng dụng có sẵn cơng khai, cũng như các
cơ quan đăng ký container công cộng và tư nhân.
Nguyễn Thị Ngọc Yến – D15CQMT01-N
9


Báo cáo DATN Đại Học
Chương 1. Lý thuyết về Docker
1.3.1.c Orchestration tool (cơng cụ điều phối)
• Docker Machine: Machine tạo Docker Engine trên máy tính hoặc trên bất cứ dịch vụ
cloud phổ biến nào như AWS, Azure, Google Cloud, Softlayer hoặc trên hệ thống data
center như VMware, OpenStack. Docker Machine sẽ tạo các máy ảo và cài Docker Engine
lên chúng và cuối cùng nó sẽ cấu hình Docker Client để giao tiếp với Docker Engine một
cách bảo mật.

• Docker Compose: là công cụ giúp định nghĩa và khởi chạy multi-container Docker
applications.
• Docker Swarm: là một cơng cụ giúp chúng ta tạo ra một clustering Docker. Nó giúp chúng
ta gom nhiều Docker Engine lại với nhau như duy nhất một virtual Docker Engine.
1.3.2

Kiến trúc của Docker

Hình 1.7 Kiến trúc của Docker
Docker sử dụng kiến trúc client-server. Docker client sẽ liên lạc với các Docker daemon,
các Docker daemon sẽ thực hiện các tác vụ build, run và distributing các Docker container. Cả
Docker client và Docker daemon có thể chạy trên cùng 1 máy, hoặc có thể kết nối theo kiểu
Docker client điều khiển các docker daemon như hình trên. Docker client và daemon giao tiếp
với nhau thông qua socket hoặc RESTful API. Docker daemon chạy trên các máy Docker
host. Người dùng sẽ không tương tác trực tiếp với các Daemon, mà thông qua Docker Client.
1.3.3

Lợi ích của việc sử dụng Docker

• Thay thế cho các máy ảo: Docker có thể được thay thế cho các máy ảo trong nhiều tình
huống:
- Nếu chỉ quan tâm đến ứng dụng mà không quan tâm đến hệ điều hành, việc sử dụng
Docker sẽ loại bỏ việc sử dụng máy ảo và không phải quan tâm đến môi trường làm việc
- Docker chạy nhanh hơn và nhẹ hơn nhiều so với các máy ảo, vì vậy có thể dễ dàng chuyển
giao, chia sẻ với người dùng khác.
• An tồn: Docker có thể cung cấp một mơi trường sandbox dành cho việc thử nghiệm một
phần mềm mà không làm ảnh hưởng đến hệ thống một cách nhanh chóng.
• Đóng gói phần mềm một cách nhanh chóng
Nguyễn Thị Ngọc Yến – D15CQMT01-N
10



Báo cáo DATN Đại Học
Chương 1. Lý thuyết về Docker
• Tạo nên một kiến trúc microservices: Docker tạo điều kiện để phân rã một hệ thống phức
tạp thành nhiều bộ phận khác nhau, cho phép tái cấu trúc phần mềm để dễ dàng quản lý
hơn mà không làm ảnh hưởng đến các tồn bộ
• Tạo mơ hình mạng: Docker có thể tạo ra hàng trăm các container độc lập với nhau, điều
này có thể dễ dàng giả lập một kịch bản mơ hình mạng mà khơng ảnh hưởng đến mạng
thật.
• Giảm thiểu việc gỡ lỗi trong quá trình chuyển giao phần mềm: Q trình chuyển giao phần
mềm có thể xảy ra sai sót khi có sự phụ thuộc của mơi trường, thư viện, thứ tự sai. Docker
cho phép liệt kê tất cả các bước để làm cho việc gỡ lỗi trở nên dễ dàng hơn nhiều.
• Continuous Delivery (CD)
CD là một mơ hình phân phối phần mềm trong chu kỳ ngắn, đảm bảo rằng các phần mềm
có thể được phát hành một cách tự động hoặc tự động một phần. Nó nhằm mục đích xây
dựng, kiểm thử, và phát hành phần mềm nhanh hơn và thường xuyên hơn. Cách tiếp cận này
giúp giảm chi phí, thời gian và nguy cơ khi thay đổi bằng cách gia tăng cập nhật các ứng dụng
trong sản phẩm.
Docker có thể thay thế phương pháp xây dựng phần mềm truyền thống, điều này làm cho
việc thực hiện CD dễ dàng hơn. Các kỹ thuật CD tiêu chuẩn có thể được thay thế bởi thực
hiện quy trình của Docker.
1.3.4

Các câu lệnh cơ bản

• Pull một image từ Docker Hub
sudo docker pull image_name
• Chạy một container
sudo

docker
run
-v
<forder_in_computer>:<forder_in_container>
: -it <image_name> /bin/bash
• Một số câu lệnh khác
-

-p

Liệt kê các images hiện có: docker images
Xóa một image: docker rmi {image_id/name}
Liệt kê các container đang chạy: docker ps
Liệt kê tất cả các container : docker ps -a
Xóa một container: docker rm -f {container_id/name}
Khởi động một container: docker start {new_container_name}
Truy cập vào container đang chạy: docker exec -it {new_container_name} /bin/bash

1.3.5

Docker file

Dockerfile là file giúp thiết lập cấu trúc cho docker image nhờ chứa một tập hợp các câu
lệnh. Quá trình tạo ra một container được thể hiện ở hình dưới.

Nguyễn Thị Ngọc Yến – D15CQMT01-N
11


Báo cáo DATN Đại Học

Chương 1. Lý thuyết về Docker
INCLUDEPICTURE "a/751d7512-c9e7-44a5-be566b1ff9096adf.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/751d7512-c9e7-44a5-be56-6b1ff9096adf.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/751d7512-c9e744a5-be56-6b1ff9096adf.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/751d7512-c9e7-44a5-be56-6b1ff9096adf.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/751d7512-c9e744a5-be56-6b1ff9096adf.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/751d7512-c9e7-44a5-be56-6b1ff9096adf.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/751d7512-c9e744a5-be56-6b1ff9096adf.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/751d7512-c9e7-44a5-be56-6b1ff9096adf.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/751d7512-c9e744a5-be56-6b1ff9096adf.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/751d7512-c9e7-44a5-be56-6b1ff9096adf.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/751d7512-c9e744a5-be56-6b1ff9096adf.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/751d7512-c9e7-44a5-be56-6b1ff9096adf.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/751d7512-c9e744a5-be56-6b1ff9096adf.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/751d7512-c9e7-44a5-be56-6b1ff9096adf.png" \*
MERGEFORMATINET INCLUDEPICTURE "a/751d7512-c9e744a5-be56-6b1ff9096adf.png" \* MERGEFORMATINET INCLUDEPICTURE
"a/751d7512-c9e7-44a5-be56-6b1ff9096adf.png" \*
MERGEFORMATINET

Hình 1.8 Quy trình tạo ra Docker Container
Các bước viết một Dockerfile:
• Thiết lập image gốc
Nguyễn Thị Ngọc Yến – D15CQMT01-N
12


Báo cáo DATN Đại Học
Chương 1. Lý thuyết về Docker
- FROM image_name
Image_name: có thể là ubuntu, centos, debian …

Ví dụ: FROM ubuntu:16.04
- MAINTAINER : Một tuỳ chọn dùng để đặt tên cho tác giả của Dockerfile đang viết. Ví dụ:
MAINTAINER abc<>
• Cài đặt ứng dụng, thiết lập mơi trường
- RUN : Để thực thi một câu lệnh nào đó trong quá trình build images.
- CMD : Để thực thi một câu lệnh trong quá trình bật container. Mỗi Dockerfile chỉ có một
câu lệnh CMD, nếu như có nhiều hơn một câu lệnh CMD thì chỉ có câu lệnh CMD cuối
cùng được sử dụng.
- ENTRYPOINT: Để thực thi một số câu lệnh trong quá trình start container, những câu lệnh
này sẽ được viết trong file .sh.
• Cấu hình
- EXPOSE: Container sẽ lắng nghe trên các cổng mạng được chỉ định khi chạy
- ADD : Copy file, thư mục, remote file thêm chúng vào filesystem của image.
- COPY : Copy file, thư mục từ host machine vào image. Có thể sử dụng url cho tập tin cần
copy.
- WORKDIR : Định nghĩa thư mục cho CMD
- VOLUME : Mount thư mục từ máy host vào container.
• Ví dụ
File: start.sh
#!/bin/bash
service nginx start
exec $@
File: ubuntu-nginx
FROM ubuntu:16.04
MAINTAINER abc<>
RUN DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get install -y nginx
RUN echo "mysql-server mysql-server/root_password password root" | debconf-setselections \
&& echo "mysql-server mysql-server/root_password_again password root" |

debconf-set-selections \
&& apt-get install -y mysql-server
WORKDIR /nginx
COPY start.sh /nginx
RUN chmod a+x /nginx/*
ENTRYPOINT ["/nginx/start.sh"]
EXPOSE 80
File: hello.html

Hello word


• Build Image từ dockerfile
sudo docker build -t <image_name>
Ví dụ: sudo docker build –t ubuntu-nginx
• Run container
Nguyễn Thị Ngọc Yến – D15CQMT01-N
13


Báo cáo DATN Đại Học
Chương 1. Lý thuyết về Docker
sudo
docker
run
-v
<forder_in_computer>:<forder_in_container>
-p
: -it <image_name> /bin/bash
Trong đó:
-v : Thể hiện việc mount volume, dữ liệu từ thư mục từ máy thật có thể được truy cập từ thư
mục của máy ảo.
-p: Cổng mạng từ máy thật để dẫn tới cổng mạng của máy ảo đang chạy.

-t: Chạy container và mở terminal bằng /bin/bash
Ví dụ:
Sudo docker run –v /test: /var/www/html –p 9000:80 ubuntu-nginx /bin/bash
1.3.6

Network mode trong Docker

Khi cài đặt Docker, mặc định 3 mạng được tạo ra.
# docker network ls
NETWORK ID

NAME

DRIVER

SCOPE

f8e060b83952

Bridge

Bridge

Local

3120118683f2

Host

Host


Local

6b857938ab70

None

null

Local

Ba mạng này đều là thành phần mặc định của Docker. Khi chạy 1 container có tuỳ chọn
--network thì nó sẽ chỉ định trực tiếp mạng mà container chạy trên đó:
- Bridge: là mạng mặc định chạy với Docker nếu khơng có tuỳ chọn --network đi cùng.
- None: Nó hồn tồn tắt card mạng đi.
- Host: là mạng chỉ gắn container với host ngoài. Container có cấu hình mạng giống như
host, thường sẽ là card loopback.
• Default Bridge network
Default bridge network được hiện diện trên tất cả các Docker hosts. Câu lệnh docker
network inspect trả lại các thông tin về network:

Nguyễn Thị Ngọc Yến – D15CQMT01-N
14


Báo cáo DATN Đại Học
Chương 1. Lý thuyết về Docker

Hình 1.9 Thông tin Docker network mode bridge
Câu lệnh docker network inspect hiển thị toàn bộ các container được kết nối và network

resources của loại network được truyền vào. Containers trong default network có thể giao tiếp
với nhau bằng IP addresses. Docker không hỗ trợ tự động quét service trên default bridge
network. Nếu muốn giao tiếp thông qua container names trong default bridge network phải
kết nối các containers với nhau thông qua tuỳ chọn docker run --link.
• User-defined network
user-defined network dễ dàng tạo ra nhất là bridge network. Network này tương tự default
docker0 network.

Nguyễn Thị Ngọc Yến – D15CQMT01-N
15


Báo cáo DATN Đại Học
Chương 1. Lý thuyết về Docker

Hình 1.10 Thông tin Docker network mode User-defined bridge
Sau khi tạo ra network, các containers có thể chạy trên đó bằng cách sử dụng tuỳ chọn docker
run --network=<NETWORK>
Trong mạng tự xác định, link không được hỗ trợ và phải public port trên mạng này ra ngoài.

Nguyễn Thị Ngọc Yến – D15CQMT01-N
16


Báo cáo DATN Đại Học

Chương 2. Tự động hoá IT Automation với Ansible

TỰ ĐỘNG HOÁ IT AUTOMATION VỚI ANSIBLE
1.4 Tự động hố

Tự động hố IT automation hay cịn được gọi là tự động hoá hạ tầng Infrastructure
automation là việc sử dụng phần mềm để tạo ra các hướng dẫn và quy trình lặp lại để thay thế
hoặc giảm sự tương tác của con người với các hệ thống công nghệ thơng tin. Phần mềm tự
động hóa hoạt động trong giới hạn của các chỉ dẫn, công cụ và framework để thực hiện các
nhiệm vụ mà không cần sự can thiệp của con người.
Có nhiều cơng cụ quản lý cấu hình tự động như Chef, Puppet, Saltstack, Ansible.
• So sánh các cơng cụ

Hình 2.11 So sánh các cơng cụ Automation
- Về Availability: tất cả các cơng cụ đều có khả năng sẵn sàng cao, có nhiều server hoạt
động, nếu có sự cố với server hoặc master, ln có server hoặc master dự phịng
- Cài đặt dễ dàng:
+ Chef: có kiến trúc master - agent, chef server chạy trên máy master và chef client chạy như
là agent trên mỗi máy client. Thêm vào đó là workstation chứa các cấu hình được kiểm tra
và đẩy lên chef server.
+ Puppet: tương tự như Chef có kiểu kiến trúc master – agent. Puppet server chạy trên máy
master, và Puppet client chạy trên máy client. Thêm vào đó phải có chứng chỉ đăng nhập
giữa master và agent.
+ Ansible: đơn giản hơn khi chỉ có một master chạy trên máy server và dùng kết nối ssh để
đăng nhập vào hệ thống client muốn cấu hình.
+ Saltstack: Server được gọi là salt master và clients được gọi là salt minions
- Ngôn ngữ sử dụng
+ Chef sử dụng Ruby DSL nên người sử dụng phải biết về lập trình.
+ Puppet khơng dễ quản lý khi nó sử dụng ngơn ngữ riêng Puppet DSL (Domain Specific
Language).
+ Ansible có thể dễ dàng sử dụng và quản lý bởi nó sử dụng YAML (YAML Ain't Markup
Language) gần với ngôn ngữ tự nhiên, máy chủ sẽ đẩy cấu hình tới các node.
Nguyễn Thị Ngọc Yến – D15CQMT01-N
17



Báo cáo DATN Đại Học

Chương 2. Tự động hoá IT Automation với Ansible

+ Saltstack tương tự như Ansible do cùng sử dụng YAML, máy chủ sẽ đẩy cấu hình đến các
client.
- Khả năng mở rộng: tất cả đều có khả năng mở rông cao do máy chủ được chạy trên hệ điều
hành Unix/Linux nhưng các máy client có thể hoạt động được trên windows.
- Phổ biến

Hình 2.12 Độ phổ biến của các công cụ Automation
1.5

Tại sao phải thực hiện tự động

Với sự phát triển nhanh chóng của Internet, Cloud computing trở nên phổ biến hơn, các
dịch vụ điện toán đám mây như Amazon Web Service AWS có hàng triệu người dùng và cung
cấp nền tảng cho doanh nghiệp và người dùng cá nhân.
Tuy nhiên, dù điện toán đám mây dần chiếm ưu thế hơn so với loại truyền thống nhưng
các dịch vụ vẫn cần được cài đặt và cấu hình thủ cơng.
Việc cài đặt, cấu hình các dịch vụ phải được diễn ra càng nhanh càng tốt. Thời gian
ngừng hoạt động và cập nhật có thể bị kéo dài nếu các tiến trình diễn ra. Vì vậy mà việc cấu
hình và quản lý tự động được phát triển nhằm giúp cho các kỹ sư, đồng thời cũng giảm chi
phí khi dịch vụ ngừng hoạt động. Đặc biệt là các công ty có hàng nghìn server sẽ tốn rất nhiều
thời gian để cập nhật các cấu hình. Việc giảm thiểu chi phí của thời gian tạm ngừng hoạt
động, cấu hình, cập nhật có hiệu quả hơn đã khiến nó càng ngày phổ biến hơn với các cơng ty
lớn.
Việc tự động hố có thể sử dụng cho nhiều mục đích, ở đây Ansible có thể được sử dụng
cho việc cung cấp dịch vụ cloud, quản lý cấu hình tự động, triển khai ứng dụng, điều phối các

dịch vụ… Mục đích khác của tự động hoá đơn giản là cập nhật hệ thống và phần mềm, nâng
cấp dịch vụ hoặc cài đặt lại.
1.6

Ansible

Ansible là một cơng cụ dùng để tự động hóa việc cấu hình trên nhiều server. So với các
cơng cụ khác với tính năng tương đương thì Ansible dễ học và dễ tiếp cận hơn rất nhiều.
Cơ bản, Ansible gồm các thành phần chính:
• Playbooks: khai báo kịch bản cho các cơng việc
• Inventory: địa chỉ các node cần được cấu hình
• Tasks: các cơng việc thực hiện trong playbooks
• Modules: những chức năng hỗ trợ cho việc thực thi các tasks

Nguyễn Thị Ngọc Yến – D15CQMT01-N
18


Báo cáo DATN Đại Học
1.6.1

Chương 2. Tự động hoá IT Automation với Ansible

Cách Ansible hoạt động

Ansible sử dụng kiến trúc agentless để giao tiếp với các máy khác mà không cần agent.
Cơ bản nhất là giao tiếp thông qua giao thức SSH trên Linux, WinRM trên Windows hoặc
giao tiếp qua chính API của thiết bị đó cung cấp.

Nguyễn Thị Ngọc Yến – D15CQMT01-N

19


×