-
Một container là một image đang ở dạng runtime. . Cũng giống như việc chúng ta chạy một máy ảo từ một template, chúng ta có thể chạy nhiều container từ một image có sẵn. . SỰ khác biệt lớn nhất giữa VM và container là các container hoạt động nhanh hơn và nhẹ hơn các VM , các container ko có một OS hoàn chỉnh ( kernel, shell ) như một VM, thay vào đó các container sẽ làm việc với thuật ngữ mới - Share Kernel OS ( sử dụng chung kernel với host OS ).
-
Việc pull image xuống local repository cũng giống như xây dựng các template VM , doceker thực hiện chạy ccác image ở dạng runtime với command
docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
`
-
Container và VM đều cần có một OS để hoạt động ( trong trường hợp VM đặt tại nền tảng ảo hóa host OS). Có thể đặt chúng trên một laptop hay là server chuyên dụng tại các DC.
-
Trong trường hợp chúng ta có một server vật lý , và yêu cầu đặt ra cần xây dựng 2 application :
- Đối ảo VM, chúng ta cần có hypervisor trên host OS. Khi các hypervisor được enable , chúng được quyền kiểm soát các CPU, RAM ... trên host OS, các VM được xây dựng lên sử dụng tài nguyên của máy chủ vật lý , các thông số trên VM giống như một máy tính hoàn chỉnh. . Trong trường hợp cần 2 app, chúng ta sẽ cần triển khai 2 VM , bao gồm các OS của riêng nó và cài đặt bằng tay các package trên này.
- Đối với container, chúng ta sẽ có một chút khác biệt . Trong trường hợp này các OS có thể là Linux hay Windows chỉ cần hỗ trợ container trong kernel. Giống như VM , OS sẽ kiểm soát các resouce vật lý. Trên OS, sẽ cài đặt và cấu hình container engine có thể là Docker . Container engine sẽ sử dụng các OS resource process, filesystem , network sau đó đưa vào một mô trường cô lập với host OS ( namespace ) được gọi là container. Các container sẽ thấy giống như một VM . Mỗi container có thể sửu dụng chạy 1 application, chúng ta chirt cần build 4 container.
-
Về mặt tổng quan ta có thể nói răngf "VM thuộc về ảo hóa phần cứng - Container ảo hóa OS"
- Kiểm tra version
root@nguyenhungsync:~# docker version
Client:
Version: 18.09.4
API version: 1.39
Go version: go1.10.8
Git commit: d14af54266
Built: Wed Mar 27 18:35:44 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.4
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: d14af54
Built: Wed Mar 27 18:01:48 2019
OS/Arch: linux/amd64
Experimental: false
- Kiểm tra service docker
root@nguyenhungsync:~# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: e
Active: active (running) since Sun 2019-04-14 11:21:30 +07; 2h 12min ago
Docs: https://docs.docker.com
Main PID: 2286 (dockerd)
Tasks: 15
CGroup: /system.slice/docker.service
└─2286 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/contain
Thg 4 14 11:21:29 nguyenhungsync dockerd[2286]: time="2019-04-14T11:21:29.828718
Thg 4 14 11:21:29 nguyenhungsync dockerd[2286]: time="2019-04-14T11:21:29.828950
Thg 4 14 11:21:29 nguyenhungsync dockerd[2286]: time="2019-04-14T11:21:29.829006
Thg 4 14 11:21:29 nguyenhungsync dockerd[2286]: time="2019-04-14T11:21:29.830957
Thg 4 14 11:21:29 nguyenhungsync dockerd[2286]: time="2019-04-14T11:21:29.973226
Thg 4 14 11:21:30 nguyenhungsync dockerd[2286]: time="2019-04-14T11:21:30.015499
Thg 4 14 11:21:30 nguyenhungsync dockerd[2286]: time="2019-04-14T11:21:30.112586
Thg 4 14 11:21:30 nguyenhungsync dockerd[2286]: time="2019-04-14T11:21:30.113198
Thg 4 14 11:21:30 nguyenhungsync dockerd[2286]: time="2019-04-14T11:21:30.133002
Thg 4 14 11:21:30 nguyenhungsync systemd[1]: Started Docker Application Containe
- Thực hiện khởi động một container
root@nguyenhungsync:~# docker container run -it ubuntu:latest /bin/bash
root@ad3165eacef1:/#
Trong đó : - docker container run : khởi động container - -it : cho phép thực hiện giao tác với terminal trong container
-
Workflow : sau khi thực hiện commmand
docker container run -it ubuntu:latest /bin/bash
. Docker client sẽ call đến APi của Docker Server ( daeomon ). Docker damon sẽ nhận request và thuực hiện serch trong local cache image được yêu cầu . Nếu trương trường hợp ko có , Docker engine sẽ lên Docker Hub thực hiện pull image về local repository . Sau khi đã có image , docker daomon sẽ thực hiện khởi tạo các resouce của container và thực hiện triển khai các application trong Docker image./ -
Sau khi thực hiện run contaier chúng ta sẽ vào làm việc được với terminal của container. Thực hiện một số commadn sẽ trả về error - command not found , điều này có nghĩa container hiện tại chỉ chứa một số command buildin system và không có các package khác
root@ad3165eacef1:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@ad3165eacef1:/#
root@ad3165eacef1:/#
root@ad3165eacef1:/# man ls
bash: man: command not found
- Trong command đã thực hiện ở trước đa chỉ định container chỉ chạy
/bin/bash
, có nghĩa trong container hiện tại chỉ bao gồm một process. Điều này có nghĩa khi thực hiệnexit
, thì sẽ process cuối cùng ( 1 process) trong container , đồng nghĩa vowisi việc container cũng bị xóa
root@ad3165eacef1:/# ps elf
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 1 0 20 0 18508 3236 wait Ss pts/0 0:00 /bin/bash P
0 0 17 1 20 0 18508 3380 wait S pts/0 0:00 bash LS_COL
0 0 37 17 20 0 25944 1452 - R+ pts/0 0:00 \_ ps elf
- Thực hiện kiểm tra container list trên terminal mới, thuực hiện exec trong container
root@nguyenhungsync:~# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3ca8098669c0 ubuntu:latest "/bin/bash" 39 seconds ago Up 37 seconds awesome_poincare
root@nguyenhungsync:~# docker container exec -it 3ca8098669c0 "/bin/bash"
root@3ca8098669c0:/#
- Thực hiện dừng container. Việc dừng contaier giống như sử dụng
klll
với singal SIGSTEM đến process là PID = 1 trong container
docker stop
root@nguyenhungsync:~# docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3ca8098669c0 ubuntu:latest "/bin/bash" 35 minutes ago Exited (0) 3 minutes ago awesome_poincare
ad3165eacef1 ubuntu:latest "/bin/bash" About an hour ago Exited (130) 45 minutes ago infallible_diffie
root@nguyenhungsyn
- Xoá container. Gửi singal SIGKILL đến process là PID = 1 trong container
- Restart Policy : Bao gồm 3 restart policy cho các cainter : always ( bao gồm cả việc stop container ), • unless-stopped, on-failed ( pending )
docker container run -it --restart always ubuntu /bin/bash
docker container stop 3e1a0b4a2d61