Skip to content

Latest commit

 

History

History
149 lines (107 loc) · 7.93 KB

4.Docker-Containerd-&&-VM.md

File metadata and controls

149 lines (107 loc) · 7.93 KB

1. Docker Container

  • 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...] `

2. Docker container & Virtual Machine

  • 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"

4. Begin With Container

  • 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ện exit , 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