Một số khái niệm trong Docker
Một số khái niệm trong Docker
- Image: – Là một khuôn mẫu, lớp chưá các file cần thiết để taọ nên 1 container – Chứa các tài nguyên có sẵn – Không được tiếp cận vào CPU, memory,storage..
- Container – Được xem như 1 Object tồn tại trên host với một IP có các cổng được expose ra bên ngoài – Được deploy, chạy, xoá bỏ thông qua remote client
- Docker engine – Tạo và chạy các container – Chạy các lệnh trong chế độ daemon – Linux trở thành máy chủ Docker – Các Container được deploy, chạy, xoá bỏ thông qua remote client
- Docker daemon – Là tiến trình chạy ngầm quản lý các container
- Docker client – Kiểm soát hầu hết các workflow của Docker – Giao tiếp với các máy chủ của Docker thông qua daemon
- Docker Hub, – Chứa các component Docker – Lưu, sử dụng, tìm kiếm các image
### Một số lầm tưởng về Docker
Dưới đây là một số lầm tưởng nhiều người hay gặp phải khi liên tưởng Docker với các công nghệ khác trên thị trường
- KHÔNG phải là một công cụ quản lý thiết lập hay thiết lập tự động ( Peppet, chef)
- KHÔNG phải là giải pháp ảo hoá phần cứng (VMWare KVM)
- KHÔNG phải là một nền tảng điện toán đám mây ( OpenStack, CloudStack…)
- KHÔNG phải là một deployment framwork ( Capistrano,Fabric .. dùng để chạy script deploy trên nhiều server khác nhau)
- KHÔNG phải là một công cụ quản lý wokload (Mesos, Fleet…)
- KHÔNG phải là một môi trường phát triển (vagrant)
### Docker life cycle
### Cơ chế lưu trữ của Docker
- Docker sử dụng cơ chế lưu trữ
copy-on-write
- thay vì nói là tôi cần tạo 1container
thì sẽ nói là tôi muốn tạo 1 bản sao của một khuôn mẫu có sẵn ( image ) bởi vì bản chất là tạo ra 1 container từ 1 bản image gốc, - Tạo một hệ thống mới ngay lập tức mà không cần copy tất cả file hệ thống - cứ mỗi khi tạo ra 1 thay đổi trên đó thì thay đổi được ghi lại nhưng ở 1 vùng lưu trữ khác
- Hệ thống lưu trữ lại mỗi thay đổi
### Chạy các tiến trình trong Container
docker run
### Liên kết các container
1 Liên kết thông qua host
Hướng tiếp cận này như sau, Từ 1 container liên kết đến máy host, host liên kết đến container thứ 2 –> chúng ta liên kết được 2 container với nhau bằng cách expose cổng trên mỗi container,
2 Liên kết trực tiếp các container
Tức là liên kết sao cho thông tin được truyền thẳng từ container A đến container B mà không thông qua host
Step:
- Đầu tiên chúng ta run 1 container với name =
server
- Container server listen port 111
- Tiếp theo ta cũng run 1 container với name =
client
nhưng thêm 1 param--link server
- Dùng nestcat để ping tới container
server
với port 111 // `nc [name container] port - Container
server
nhận thông tin và hiển thị trên màn hình console
???? Vậy làm thế nào mà với cái tên server
mà container client connect được tới container server
Khi bạn thêm param --link server
thì nó đã tự thêm 1 line vào file /etc/hosts
Vì chính Docker chạy container server nên nó sẽ biết container server có IP
là bao nhiêu
Note:
- Tự động gán hostname khi container bắt đầu chạy
- Liên kết có thể bị đứt nên container
server
khởi động lại –> tính rủi ro khá cao
### Liên kết động giữa các container
- Docker cung cấp tính năng tạo mạng riêng nội bộ // dễ dàng thêm/xoá các container vào mạng
- Name server với cơ chế quản lý
IP & name
// Các container sẽ tìm lẫn nhau qua tên - Cần tạo lập mạng trước rồi chạy các container liên quan
- Dùng lệnh sau để tạo mạng riêng: ` docker network create [OPTIONS] NETWORK Ex:
1
2
3
4
5
docker network create demonetwork
docker run --rm -ti --net=demonetwork --name server ubuntu:14.04 bash // chạy container server nằm trong mạng demonetwork
nc -l 111
1
2
3
docker run --rm -ti --link server --net=demonetwork --name client ubuntu:14.04 bash
nc server 111