Tải bản đầy đủ (.pdf) (26 trang)

ĐỀ TÀI DOCKER TRONG C# MÔN CÔNG NGHỆ .NET

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 (423.82 KB, 26 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM

ĐỀ TÀI: DOCKER TRONG C#
MÔN: CÔNG NGHỆ .NET
Giảng viên hướng dẫn: Huỳnh Hồ Thị Mộng Trinh
Sinh viên thực hiện:
Nguyễn Công Phi – 19522006
Lương Thiện Phước – 19522055
Bùi Như Phước - 19522052


LỜI CẢM ƠN
Chúng em xin gửi lời cảm ơn chân thành đến cô Huỳnh Hồ Thị Mộng Trinh giảng
viên bộ môn “Công nghệ .Net” khoa Công nghệ phần mềm đã tận tâm hướng dẫn chúng
em và trang bị cho chúng em những kiến thức, kĩ năng cơ bản cần có để hoàn thành đề tài
nghiên cứu này.
Tuy nhiên trong quá trình nghiên cứu đề tài, do kiến thức chuyên ngành cịn hạn chế
cũng như chưa có kinh nghiệm làm việc thực thế nên chúng em vẫn cịn nhiều thiếu sót
khi tìm hiểu, đánh giá và trình bày về đề tài. Rất mong nhận được sự quan tâm, góp ý của
cơ để đề tài chúng em được đầy đủ và hoàn chỉnh hơn.
Chúng em xin chân thành cảm ơn.

Nhóm thực hiện đề tài


Mục lục
I.

Giới thiệu chung:.......................................................................................................3


1.

Đặt vấn đề:............................................................................................................3

2.

Định nghĩa:...........................................................................................................3

II.

Công nghệ của Docker:.............................................................................................4
1.

Containerlization:.................................................................................................4

2.

Lịch sử container..................................................................................................6

III.
1.

2.1

Định nghĩa:....................................................................................................6

2.2

Lịch sử hình thành của Container...................................................................8


Các thành phần cơ bản của docker.........................................................................10
Các thành phần...................................................................................................10
1.1

Docker Engine:............................................................................................10

1.3 Docker Registry/Docker Hub............................................................................13
2.

Một số lệnh cơ bản:.............................................................................................13
2.1 Các câu lệnh:.....................................................................................................13
2.3

IV.

Một số option thường dùng với docker run:.................................................15

Docker trong C#.....................................................................................................16

1.

Docker trong C# làm được gì:............................................................................16

2.

Giải thích dockerfile...........................................................................................17
2.1

3.


Cấu trúc của dockerfile:...............................................................................17

Giải thích dockercompose...................................................................................19
3.1

Khái niệm.....................................................................................................19

1


V.

3.2

Đặc điểm......................................................................................................20

3.3

Lợi ích..........................................................................................................20

Kết luận................................................................................................................... 20
1.

Độ hữu dụng của docker.....................................................................................20

2.

Ưu nhược điểm...................................................................................................21

VI.


2.1

Ưu điểm.......................................................................................................21

2.2

Nhược điểm..................................................................................................21

Bảng phân công công việc.....................................................................................22

Tài liệu tham khảo............................................................................................................ 23

2


I.

Giới thiệu chung:
1. Đặt vấn đề:

- Khi phát triển hoặc bảo trì một ứng dụng, thơng thường chúng ta sẽ cần cài
đặt một số môi trường, thư viện, phụ thuộc cho chính chương trình đó, việc
này sẽ khá khó khăn khi chuyển môi trường, đặc biệt với những môi trường
yêu cầu những hệ điều hành khác nhau lại càng thêm rắc rối, và Docker
chính là cơng cụ để chúng ta có thể đơn giản hóa điều đó. Chỉ với vài dịng
lệnh, chúng ta sẽ có thể nhanh chóng tạo được mơi trường ảo hố chứa đầy
đủ những cài đặt cần thiết cho dự án mới. Nhưng không dừng lại ở đó, cơng
dụng của Docker cịn khá nhiều và ngày càng được sử dụng phổ biến ở khắp
mọi nơi.

2. Định nghĩa:

- Docker là nền tảng cung cấp cho các công cụ, service để các developers,
adminsystems có thể phát triển, thực thi, chạy các ứng dụng với containers.
Hay nói một cách khác nó là một nền tảng để cung cấp cách để building,
deploy và run các ứng dụng một cách dễ dàng trên nền tảng ảo hóa
- Phần lớn khi nói về Docker, ta thường sẽ hiểu là Cơng nghệ Docker. Nó là 1
phần mềm chạy trên Linux hoặc Windows, cho phép chúng ta dựng, kiểm
thử và triển khai ứng dụng một cách nhanh chóng. Docker đóng gói phần
mềm vào các đơn vị tiêu chuẩn hóa được gọi là container. Docker được đặt
tên xuất phát từ cách diễn đạt dock worker.
- Docker có hai phiên bản chính:
o Docker Community Editon – CE: Là phiên bản miễn phí

3


o Docker Enterprise – EE: Phiên bản này là phiên bản trả phí, khi sử
dụng phiên bản này chúng ta sẽ có được sự hỗ trợ từ nhà phát hành.

II.

Cơng nghệ của Docker:
1. Containerlization:

- Trước đây, mơ hình máy chủ thường là:
o Máy chủ vật lý (physical server) + hệ điều hành (operating system) +
ứng dụng (application).

- Vấn đề gặp phải ở đây là lãng phí tài nguyên

o Một máy chủ chỉ cài được một OS
o Cho dù có ổ cứng khủng, ram khủng thì cũng khơng tận dụng hết lợi
thế.
- Sau đó ra đời cơng nghệ ảo hóa virtualization.
o Có thể chúng ta đã nghe tới cái tên Virtualbox hay VMware rồi đúng
khơng, đó đó chính nó đó.

4


o Với cơng nghệ này, trên một máy chủ vật lý mình có thể cài đặt
được nhiều OS, tận dụng tài nguyên đã tốt hơn.

- Nhưng lại nảy sinh vấn đề tiếp:
o Về tài nguyên:
 Khi bật máy ảo, chúng ta cần cấu hình để cung cấp ngay từ đầu
tài nguyên ổ cứng và ram từ máy thật cho máy ảo.
 Sau khi bật máy ảo, máy thật không thể tái sử dụng tài nguyên
đã cho đi.
o Về thời gian:
 Việc khởi động, tắt máy ảo khá lâu, có thể lên tới hàng phút.
- Ở bước tiến hố tiếp theo, cơng nghệ containerlization ra đời:
o Với cơng nghệ này, trên một máy chủ vật lý, ta sẽ cài đặt được nhiều
máy ảo (giống với cơng nghệ ảo hóa virtualization), nhưng tốt hơn ở
chỗ là các máy con này (Guess OS) đều dùng chung phần nhân của
máy mẹ (Host OS) và chia sẻ với nhau tài nguyên máy mẹ.

5





Có thể nói là khi nào cần tài ngun thì được cấp, cần bao nhiêu
thì cấp bấy nhiêu, như vậy việc tận dụng tài nguyên đã tối ưu
hơn.

2. Lịch sử container
2.1 Định nghĩa:
-

Các phần mềm, chương trình sẽ được Container Engine (là một cơng
cụ ảo hóa tinh gọn được cài đặt trên host OS) đóng gói thành
các container.

6


- Vậy Container là một giải pháp để chuyển giao phần mềm một cách đáng tin
cậy giữa các mơi trường máy tính khác nhau bằng cách:
o Tạo ra một môi trường chứa mọi thứ mà phần mềm cần để có thể chạy
được.
o Khơng bị các yếu tố liên quan đến môi trường hệ thống làm ảnh
hưởng tới.
o Không làm ảnh hưởng tới các phần cịn lại của hệ thống.
- Ví dụ: Chúng ta có thể hiểu là ruby, rails, mysql ... kia được bỏ gọn vào một
hoặc nhiều cái thùng (container), ứng dụng của chúng ta chạy trong những
chiếc thùng đó, đã có sẵn mọi thứ cần thiết để hoạt động, khơng bị ảnh
hưởng từ bên ngồi và cũng khơng gây ảnh hưởng ra ngồi.
- Các tiến trình (process) trong một container bị cơ lập với các tiến trình của
các container khác trong cùng hệ thống tuy nhiên tất cả các container này

đều chia sẻ kernel của host OS (dùng chung host OS).
- Ưu điểm của Container:
o Linh động: Triển khai ở bất kỳ nơi đâu do sự phụ thuộc của ứng dụng
vào tầng OS cũng như cơ sở hạ tầng được loại bỏ.
7


o Nhanh: Do chia sẻ host OS nên container có thể được tạo gần như một
cách tức thì.
o Nhẹ: Container cũng sử dụng chung các images nên cũng không tốn
nhiều disks.
o Đồng nhất: Khi nhiều người cùng phát triển trong cùng một dự án sẽ
không bị sự sai khác về mặt mơi trường.
o Đóng gói: Có thể ẩn mơi trường bao gồm cả app vào trong một gói
được gọi là container. Có thể test được các container. Việc bỏ hay tạo
lại container rất dễ dàng.
- Nhược điểm của Container:
o Do dùng chung OS nên nếu như xuất hiện lỗ hổng ở kernel của host
OS thì nó sẽ ảnh hưởng tới tồn bộ container có trong host OS đó.
o Với host OS là Linux, nếu trong trường hợp có người hoặc một ứng
dụng nào đó có trong container chiếm được quyền superuser, về lý
thuyết thì tầng OS sẽ bị crack và ảnh hưởng trực tiếp tới máy host bị
hack cũng như các container khác trong máy đó.
2.2 Lịch sử hình thành của Container

8


- Chroot: Cho phép thay đổi thư mục gốc của user - để phục vụ cho việc share
tài nguyên ( vì lúc đó máy tính rất to lớn và đắt đỏ)

- Namespace: Quản lý các tập tin riêng lẻ theo từng namespace cho người
dùng, cô lập những người dùng khác nhau trên 1 máy
- UnionFS (file system): Tạo ra các layer lưu trử riêng lẻ, nhưng khi truy cập
thì sẽ merge lại. Nó là nền tảng cho việc khởi chạy image theo từng layer
của docker ở hiện tại
- Cgroup: Điều khiển kiểm sốt tài ngun của các nhóm tiến trình, kết hợp
với namespace thì nó là nền tảng
- Docker: Dựa trên những cơng nghệ trên, Docker tổng hợp, hồn thiện cơng
nghệ container, container runtime.
- Docker là cty hồn thiện cơng nghệ container tốt nhất, nhiều người sử dụng,
nên nhiều người cịn lầm tưởng nó là cơng nghệ docker, nhưng nó chỉ là
phần mềm, tên đầy đủ là docker engine, hoạt động dựa trên công nghệ
container
- Một số dịch vụ khác xử lý bằng container giống docker

9


III. Các thành phần cơ bản của docker
1. Các thành phần
1.1 Docker Engine:

- Docker Engine là phần cốt lõi của Docker, như một cơng cụ để đóng gói ứng
dụng, được xây dựng theo kiểu kiến trúc client-server và được cài đặt trên
máy Host.
- Docker Engine có 3 thành phần:
o Server: Docker Daemon dùng để tạo và quản lý các images,
containers, networks, volumes.
o Rest API: controller cho docker daemon, chỉ ra những gì docker
daemon sẽ làm.

o Client: Là một công cụ giúp người dùng giao tiếp với Docker host.
Người dùng tương tác với docker thông qua command trong terminal
(CLI). Docker Client sẽ sử dụng API gửi lệnh tới Docker Daemon.
10


- Có 5 đối tượng của Docker Engine:
o Dockerfile:
 Dockerfile là một file dạng text khơng có phần đi mở rộng,
chứa các đặc tả về một trường thực thi phần mềm, cấu trúc cho
Docker image.
 Docker image có thể được tạo ra tự động bằng cách đọc các chỉ
dẫn trong Dockerfile.
 Từ những câu lệnh đó, Docker sẽ build ra Docker image
(thường có dung lượng nhỏ từ vài MB đến lớn vài GB).
o Image:
 Image trong docker còn được gọi là mirror, nó là 1 đơn vị đóng
gói chứa mọi thứ cần thiết để 1 ứng dụng chạy.
 Image được tạo thành từ nhiều layer xếp chồng lên nhau, bên
trong image là 1 hệ điều hành bị cắt giảm và tất cả các phụ
thuộc (dependencies) cần thiết để chạy 1 ứng dụng.
o Container:
 Một image có thể được sử dụng để tạo 1 hoặc nhiều container.
 Ta có thể create, start, stop, move hoặc delete dựa trên Docker
API hoặc Docker CLI.
 Trên hệ điều hành, ta cài đặt container engine là docker. Sau đó,
cơng cụ container sẽ lấy các tài nguyên hệ điều hành và ghép
chúng lại thành các cấu trúc riêng biệt được gọi làcontainer.
 Mỗi container bao gồm mọi thứ cần thiết để chạy được
nó: code, runtime, system tools, system libraries, setting. Mỗi

container như 1 hệ điều hành thực sự, bên trong mỗi container
sẽ chạy 1 ứng dụng.
11


 Container và VM có sự cách ly và phân bổ tài nguyên tương tự
nhưng có chức năng khác nhau vì container ảo hóa hệ điều hành
thay vì phần cứng.
 Các container có tính portable và hiệu quả hơn.
 Container nhằm làm cho các ứng dụng trở nên dễ dàng xây
dựng, di chuyển và chạy.
 Quá trình đưa 1 ứng dụng chạy trong container có để được hiểu
như sau:
 Đầu tiên ta bắt đầu với code app và các phụ thuộc của nó
 Tạo Dockerfile mơ tả app, các phụ thuộc và cách run app
 Bulid Dockerfile thành image
 Push image mới build vào registry(option)
 Chạy container từ image
o Network:
 Docker network có nhiệm vụ cung cấp private network
(VLAN) để các container trên một host có thể liên lạc được với
nhau, hoặc các container trên nhiều hosts có thể liên lạc được
với nhau (multi-host networking).
o Volume:
 Docker volume là cơ chế tạo và sử dụng dữ liệu của docker, có
nhiệm vụ lưu trữ dữ liệu độc lập với vòng đời của container.
 Có 3 trường hợp sử dụng Docker Volume:
 Giữ lại dữ liệu khi một Container bị xóa.
 Để chia sẻ dữ liệu giữa máy chủ vật lý và Docker Container.
 Chia sẻ dữ liệu giữa các Docker Container.


12


1.3 Docker Registry/Docker Hub

- Docker Registry là một dịch vụ máy chủ cho phép lưu trữ các docker image
của cá nhân, cơng ty, team,... Dịch vụ Docker Registry có thể được cung cấp
bởi tổ chức thứ 3 hoặc là dịch vụ nội bộ được xây dựng riêng nếu chúng ta
muốn.
- Một số dịch vụ Docker Registry phổ biến như:
o Azure Container Registry
o Docker Hub
o Quay Enterprise
o Google Container Registry.
o AWS Container Registry
2. Một số lệnh cơ bản:
2.1 Các câu lệnh:

- Cấu trúc lệnh “docker <component> <command>”.
o Các component cơ bản là: image, container, docker, volume,
network,..
o Các command cơ bản là: ls, rm, prune, build, run, ….
- docker ps:
o Là viết tắt của docker container ls. Dùng để liệt kê ra các container
đang chạy.
o Khi sử dụng với các tham số:
 -a/-all: Liệt kê tất cả các container, kể cả đang chạy hay đã kể
thúc



-q/-quiet: chỉ liệt kê ra id của các container.

- docker pull:
o Là viết tắt của docker image pull. Để tải một image cụ thể hoặc một
tập hợp image.
13


o Hầu hết các image sẽ được tạo dựa trên các image cơ sở từ Docker
Hub. Docker Hub chứa rất nhiều các image được dựng sẵn, mà ta có
thể pull về và dùng mà không cần phải định nghĩa và cấu hình lại từ
đầu.
- docker build:
o Là viết tắt của docker image build. Lệnh này dùng để build một image
từ Dockerfile và context. Context ở đây là một tập file được xác đinh
bởi đường dẫn hoặc url cụ thể. Ta có thể sử dụng thêm tham số -t để
gắn nhãn cho image.
- docker run:
o Là viết tắt của docker container run. Lệnh này dùng để chạy một
container dựa trên một image mà ta có sẵn. Ta có thể thêm vào sau
lệnh này một vài câu lệnh khác như -it bash để chạy bash từ container
này.
- docker logs:
o Lệnh này được sử dụng để hiển thị logs của một container, ta cần phải
chỉ rõ container để hiển thị logs thông qua tên của nó. Ngồi cũng có
thể sử dụng thêm một số flag như --follow để giữ việc theo dõi logs.
- docker volume ls:
o Lệnh này dùng để liệt kê ra các volumn mà các container sử dụng,
volume là một cơ chế dùng để lưu trữ dữ liệu sinh ra và sử dụng bởi

Docker.
- docker rm:
o Là viết tắt của docker container rm. Lệnh này dùng để xóa một hoặc
nhiều container.
- docker rmi:
14


o Lệnh này dùng để xóa một hoặc nhiều images.
- docker stop:
o Là viết tắt của docker container stop. Lệnh này dùng để stop một hoặc
nhiều container. Ngoài ra ta có thể dung docker kill để bắt buộc
container dừng lại.
2.3 Một số option thường dùng với docker run:

- Trong các lệnh trên có lẽ docker run là lệnh hữu ích nhất và ta sẽ thường sử
dụng nhất. Nó sử dụng để tạo container dựa vào một image cụ thể. Có nhiều
option có thể sử dụng với docker run.
o --detach, -d : Mặc định docker container chạy thì mọi input, output,
lỗi được hiện thị trực tiếp trên màn hình terminal. Tuy nhiên với tùy
chọn --detach/-d, container sẽ được chạy ngầm vì vậy mọi output, lỗi
sẽ không hiển thị.
o --entrypoint: Thiết lập hoặc ghi đè các lệnh mặc định khi chạy
images. Entrypoint là một tập các lệnh và tham số sẽ chạy đầu tiên khi
container được chạy từ image. Bất kỳ câu lệnh và tham số được truyền
vào sau docker run sẽ được nối vào entrypoint.
o --env, -e: Thiết lập biến môi trường sử dụng cặp (key=value). Nếu ta
có biến mơi trường trong file ta có thể truền nó vào file bằng tùy chọn
--env-file.
o --ip: Khai báo địa chỉ IP cho container

o --name: Gắn tên cho container
o --publish, -p | --publish-all, -p: Do các container của docker được
gộp và chạy trong một network riêng nên nó sẽ độc lập với máy chủ
mà docker chạy trên đó. Để mở các cổng của network các container và

15


ánh xạ nó với cổng của máy host ta sử dụng tùy chọn --publish, -p.
Hoặc sử dụng --publish-all, -P sẽ mở tất cả các cổng của container.
o --rm: Tự động xóa container khi nó thốt.
o --tty, -t: Cấp một terminal ảo cho container. Tùy chọn này thường
được sử dụng với --interactive, -i giúp cho STDIN mở ngay cả khi
container chạy ở dạng ngầm.
o --volume, -v: Gắn một volume vào một container, cho phép chúng ta
thao tác ở container nhưng dữ liệu vẫn được lưu trữ ở máy chủ.
o --workdir, -w: Chỉ định thư mục sẽ làm việc bên trong container. Giả
sử ta sẽ làm việc với thư mục app trong docker

IV. Docker trong C#
1. Docker trong C# làm được gì:

- Docker hoạt động tốt với tất cả ứng dụng C# không sử dụng GUI (Graphic
User Interface), tức là những ứng dụng khi chạy khơng render ra màn hình
một giao diện của chính nó.
- Tức là trong C# và .NET thì Docker sẽ được sử dụng hiệu quả trong các ứng
dụng .NET không sử dụng giao diện, web ASP.NET,… Và không sử dụng
được thực sự hiệu quả trong Windows Form và WPF.
- Deploy ứng dụng C# bằng Docker
- Chúng ta có thể khởi chạy dự án C# trên nhiều môi trường khác nhau

(window, macos, linux,..)
- Dễ dàng thiết lập môi trường làm việc. Chỉ cần config 1 lần duy nhất và
không bao giờ phải cài đặt lại các dependencies. Nếu chúng ta thay đổi máy
hoặc có người mới tham gia vào project thì chúng ta chỉ cần lấy config đó và
đưa cho họ.
16


- Docker được tích hợp VCS-git, để tracking các dịng lệnh thiết lập, hay đánh
dấu version cho ứng dụng.
- Tiết kiệm thời gian cho dev (Docker start va stop chỉ trong vài giây)
2. Giải thích dockerfile
2.1 Cấu trúc của dockerfile:

- Cấu trúc một Dockerfile thường thấy gồm các thành phần: FROM, RUN,
CMD.
- Trong đó FROM là chỉ thị bắt buộc phải có trong file. Ngồi ra cịn có các
chỉ thị khác cũng hay xuất hiện, đó là: MAINTAINER, COPY, ENV,
ENTRYPOINT, WORKDIR, USER, VOLUME, EXPOSE
2.1.1 From:
- Là chỉ thị bắt buộc của file. Chỉ thị này phải được đặt trên cùng của
Dockerfile. Ý nghĩa là chỉ định một image cơ sở để từ đó triển khai, xây
dựng image mới. Để xây dựng từ image cơ sở thì chúng ta cần đọc
document của image đó để biết trong đó đang chứa gì, có thể chạy các lệnh
gì trong đó. Ví dụ, nếu chúng ta chọn xây dựng từ image centos:lastest thì
lệnh cài đặt, cập nhật các gói là yum, nhưng nếu chúng ta chọn ubuntu:latest
thì trình quản lý gói của nó lại là apt… 
- FROM có thể xuất hiện nhiều lần trong 1 Dockerfile, tạo nhiều image hoặc
sử dụng trong 1 giai đoạn build khác nhau. Với mỗi lệnh FROM, sẽ xóa đi
trạng thái của FROM được tạo ra ở trước đó. 

- Cấu trúc:
o FROM <image> [AS <name>]
o FROM <image>[:<tag>] [AS <name>]
o FROM <image>[@<digest>] [AS <name>]
17


- Trong đó: Từ khố “AS” dùng nếu các chúng ta muốn đổi tên
image; “tag” và “digest” là các tùy chọn của image, mặc định nếu khơng có
tag thì nó sẽ lấy version cuối cùng: latest.
- Ví dụ:
o FROM centos AS testImage
o FROM centos:7 AS testImage
2.1.2 Run
- Là chỉ thị không bắt buộc
- Chạy trong quá trình build image và kết quả sẽ đc lưu lại thêm cùng image
gốc
- Với câu lệnh RUN, có 2 forms cho các chúng ta lựa chọn:
- RUN (shell form, command được chạy bên trong shell, mặc định là /bin/sh c trên Linux hoặc cmd /S /C trên Windows. Chúng ta có thể thực hiện nhiều
lệnh cùng lúc ở cách thức ‘shell form‘ khi sử dụng chỉ thị RUN với dấu ‘\‘)
- Ví dụ:
o RUN apt-get update;
o apt-get install curl -y
o RUN [“executable”, “param1”, “param2”] (exec form)
- Ví dụ: RUN apt-get update và RUN apt-get install curl -y
2.1.3 CMD:
- Là chỉ thị không bắt buộc
- Định nghĩa câu lệnh được chạy sau khi chạy container
- Có thể khai báo được nhiều nhưng chỉ có CMD cuối cùng có tác dụng


18


- Khi chúng ta sử dụng hình thức shell cho lệnh CMD, thì sẽ thực thi với
/bin/sh –c
- Ví dụ:
o CMD [“/bin/sh”, “/home/run.sh”]
o LABEL: cung cấp metadata cho image. Có thể sử dụng để add
thông tin maintainer.
o INSPECT: Để xem các label của images
o ENV: thiết lập một biến môi trường.
o COPY: Sao chép các file và thư mục vào container.
o WORKDIR: Thiết lập thư mục đang làm việc cho các chỉ thị khác
như: RUN, CMD, ENTRYPOINT, COPY, ADD,…
o ARG: Định nghĩa giá trị biến được dùng trong lúc build image.
o ENTRYPOINT: cung cấp lệnh và đối số cho một container thực
thi.
o EXPOSE: khai báo port lắng nghe của image.
o VOLUME: tạo một điểm gắn thư mục để truy cập và lưu trữ data.
3. Giải thích dockercompose
3.1 Khái niệm

- Docker compose là công cụ dùng để định nghĩa và run multi-container
cho Docker application. Với compose chúng ta sử dụng file YAML để
config các services cho application của chúng ta. Sau đó dùng command
để create và run từ những config đó. Sử dụng cũng khá đơn giản chỉ với
ba bước:
- Khai báo app’s environment trong Dockerfile.

19



- Khai báo các services cần thiết để chạy application trong file dockercompose.yml.
- Run docker-compose up để start và run app.
3.2 Đặc điểm

- Không giống như Dockerfile (build các image). Docker compose dùng để
build và run các container. Các thao tác của docker-compose tương tự như
lệnh: docker run.
- Docker compose cho phép tạo nhiều service(container) giống nhau bằng
lệnh: $ docker-compose scale <tên service> = <số lượng>
3.3 Lợi ích

- Tạo ra nhiều môi trường độc lập (isolated environments) trong một
host: Compose cô lập môi trường của các project để đảm bảo chúng
không bị xung đột lẫn nhau, cũng như dễ dàng tạo những bản sao của
một mơi trường nào đó.
- Chỉ tạo lại các container đã thay đổi: Compose sẽ nhận biết được các
service chưa thay đổi và sử dụng lại các container tương ứng với service
đó.
- Điều chỉnh các biến sử dụng cho các môi trường: Compose sử dụng
các biến trong Compose file cho các mơi trường. Vì vậy với mơi trường
hay người dùng khác nhau, có thể điều chỉnh các biến khi sử dụng
Compose để thiết lập các service.

V.

Kết luận
1. Độ hữu dụng của docker


- Sử dụng docker sẽ giúp cho tất cả developer được phát triển cùng trên
một môi trường giống hệt nhau.

20


- Do môi trường test và phát triển giống nhau nên sẽ phịng trừ trường hợp
test tại local thì được nhưng lại fail với CI.
- Có thể cố định version bằng cách chia sẻ các image đã fetch library liên
quan. Hoạt động của các library được lấy về bằng go get khơng bị thay
đổi.
- Vì các chúng ta có thể kiểm tra hoạt động mà mình đã cài đặt ngay lập
tức và nếu OK có thể deploy docker image đó, cho nên việc login vào
server để thay đổi cài đặt trở nên khơng cần thiết nữa. Hơn nữa, hồn
tồn có thể test blackbox xem việc cài đặt đã chuẩn hay chưa.
- Đây chỉ là một vài ví dụ, tuy nhiên cũng cho thấy Docker có ích thế nào
khi giúp các chúng ta giải quyết những vấn đề bên lề và nhiều khi rất mất
thời gian bên cạnh việc phát triển.
2. Ưu nhược điểm
2.1 Ưu điểm

- Tính đồng nhất: Khi nhiều người cùng phát triển trong cùng một dự án sẽ
không bị sự sai khác về mặt mơi trường.
- Đóng gói:
o Có thể ẩn mơi trường bao gồm cả app vào trong một gói được gọi
là container.
o Có thể test được các container.
o Việc bỏ hay tạo lại container rất dễ dàng.
- Linh động (tính nhất qn):
o Có thể test container được dùng để phát triển bằng CI.

o Có thể deploy container đã được test bằng CI lên server.
o Có thể scale container đã được deploy.
2.2 Nhược điểm

- Tốn thời gian học tập
o Đoạn đầu (chạy 1 container) sẽ khá thoải mái và cảm thấy như làm
chủ cả thế giới, tuy nhiên các chúng ta sẽ nhanh chóng gặp khá
nhiều vấn đề khi thực tế áp dụng nó vào mơi trường phát triển,
những câu hỏi như "đoạn này làm thế nào nhỉ?", hay "khơng biết
cài đặt bằng cách nào thì tốt hơn nhỉ?".. sẽ xuất hiện và đòi hỏi
kiến thức chuyên sâu.

21


o Trong một đội phát triển không cần tất cả phải có kiến thức chun
sâu về Docker, tuy nhiên ít nhất cũng cần một người nắm vững
những kiến thức để có thể giải quyết được vấn đề nếu gặp phải.
- Công cần thiết để biết viết code tại một môi trường gần như không kém
hơn so với phát triển trên local.

22


VI. Bảng phân công công việc
STT

Tên công việc

Thành viên

Công Phi

Như Phước

Thiện Phước

1

Chuẩn bị, lên kế hoạch

x

x

x

2

Chuẩn bị nội dung

x

x

x

3

x


x

x

x

5

Soạn nội dung thuyết trình
docker
Quay video thuyết trình nội
dung docker
Quay video demo

x

6

Soạn nội dung báo cáo

x

x

x

Tỷ lệ công việc phân công

33%


33%

33%

Mức độ hoàn thành

100%

100%

100%

4

23


×