Ghi chép lại quá trình tìm hiểu Docker
docker container run <image> <app>
.docker container run -it ubuntu /bin/bash
. flag-it
để truy cập luôn từ terminal hiện tại của bạn vào shell của container.
Container chạy cho đến khi app mà nó thực thi thoát. Ở ví dụ trên, Linux container sẽ thoát sau khi Bash shell thoát.docker container stop
và chạy nó lại với lệnh docker container start
. Bạn cũng có thể xóa một container vĩnh viễn bằng lệnh docker container rm
.
root@lamth-Precision-M4700:~# 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
- Nếu lệnh trên không chạy được thì rất có thể docker daemon của bạn không chạy, hoặc bạn chưa có quyền.
- Để kiểm tra trạng thái của docker daemon:
service doker status
root@lamth-Precision-M4700:~# service docker status ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: en Active: active (running) since Sat 2019-04-20 12:48:15 +07; 46min ago Docs: https://docs.docker.com Main PID: 2354 (dockerd) Tasks: 19 CGroup: /system.slice/docker.service └─2354 /usr/bin/dockerd -H fd:// –containerd=/run/containerd/containe
Thg 4 20 12:48:14 lamth-Precision-M4700 dockerd[2354]: time=”2019-04-20T12:48:14. Thg 4 20 12:48:14 lamth-Precision-M4700 dockerd[2354]: time=”2019-04-20T12:48:14. Thg 4 20 12:48:14 lamth-Precision-M4700 dockerd[2354]: time=”2019-04-20T12:48:14. Thg 4 20 12:48:14 lamth-Precision-M4700 dockerd[2354]: time=”2019-04-20T12:48:14. Thg 4 20 12:48:15 lamth-Precision-M4700 dockerd[2354]: time=”2019-04-20T12:48:15. Thg 4 20 12:48:15 lamth-Precision-M4700 dockerd[2354]: time=”2019-04-20T12:48:15. Thg 4 20 12:48:15 lamth-Precision-M4700 dockerd[2354]: time=”2019-04-20T12:48:15. Thg 4 20 12:48:15 lamth-Precision-M4700 dockerd[2354]: time=”2019-04-20T12:48:15. Thg 4 20 12:48:15 lamth-Precision-M4700 dockerd[2354]: time=”2019-04-20T12:48:15. Thg 4 20 12:48:15 lamth-Precision-M4700 systemd[1]: Started Docker Application Co lines 1-19/19 (END)
- Hoặc `systemctl is-active docker`
## Chạy một container đơn giản.
- Chạy một container sử dụng `docker container run`:
```bash
docker container run -it ubuntu:latest /bin/bash
root@lamth-Precision-M4700:~# docker container run -it ubuntu:latest /bin/bash
root@a40bfb90337e:/#
root@a40bfb90337e:/#
docker container run <option> <name>:<tag> <app>
root@a40bfb90337e:/#
: 12 ký tự sau dấu @ là 12 ký tự đầu tiên của container ID.root@a40bfb90337e:/# ping lamth99.github.io bash: ping: command not found
## Những tiến trình trong container.
- Ở ví dụ trên, chúng ta chạy Ubuntu với Bash shell. Điều đó có nghĩa là Bash shell là tiến trình duy nhất của container đó.
root@a40bfb90337e:/# ps -elf F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S root 1 0 0 80 0 - 4627 wait 06:38 pts/0 00:00:00 /bin/bash 0 R root 13 1 0 80 0 - 8600 - 07:04 pts/0 00:00:00 ps -elf
- Tiến trình thứ hai là tiến trình tạm thời khi chúng ta dùng lệnh `ps -elf`, nên container chỉ chạy một tiến trình duy nhất có PID=1 là Bash shell.
- Nếu thoát tiến trình duy nhất này có nghĩa là container cũng sẽ bị xóa. Contanier không thể chạy mà không có một tiến trình nào đang chạy
- Dùng Ctrl+PQ để thoát về terminal trên host mà không xóa container.
- Liệt kê các container:
root@lamth-Precision-M4700:~# docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a40bfb90337e ubuntu:latest “/bin/bash” 38 minutes ago Up 38 minutes flamboyant_hamilton
- truy cập lại của container:
root@lamth-Precision-M4700:~# docker container exec -it a40bfb90337e /bin/bash root@a40bfb90337e:/#
- Lệnh trên tạo thêm một tiến trình Bash shell nữa nên nếu exit bash hiện tại thì sẽ không xóa container vì nó vẫn còn một process nữa.
- Xóa container:
root@lamth-Precision-M4700:~# docker container stop a40bfb90337e a40bfb90337e
root@lamth-Precision-M4700:~# docker container rm a40bfb90337e a40bfb90337e
- **Dữ liệu trong container**:
- Dữ liệu trong container sẽ không bị mất khi bạn start, stop, restart, nó chỉ mất khi bạn xóa container.
- Nếu bạn lưu trữ dữ liệu của container trong một *volume*, dữ liệu sẽ vẫn tồn tại ngay cả khi bạn xóa container đó.
## Stop container
- kill một container với `docker container rm <container> -f` sẽ dừng container mà không có cảnh báo. Nó như là giết một container mà không cho container hay ứng dụng chạy trên nó có cơ hội chuẩn bị. Như dùng **SIGTERM**.
- kill một container với hai bước là `docker container stop` và `docker container rm` được khuyến nghị. Nó như cho container và app thời gian để chuẩn bị trước khi bị kill. Như dùng **SIGKILL**.
## Tự phục hồi container với chính sách restart.
- Chính sách khởi động lại áp dụng với từng container, có thể cấu hình ngay trên lệnh docker run với flag **--restart <chính sách>**
- Có 4 chính sách tự khởi động lại
| Chính sách | đặc điểm |
|--|--|
| no | Không khởi động lại container. (Mặc định) |
| always | Luôn khởi động lại container nếu nó bị stop. Nếu nó được dừng thủ công, nó chỉ được khởi động lại khi Docker daemon khởi động lại hoặc chính container được khởi động lại theo cách thủ công. |
|unless-stoped | Luôn khởi động lại. Trừ khi mà nó bị dừng ( kể cả dừng thủ công hay vì lý do khác), nó sẽ không khởi động lại kể cả docker daemon có khởi động lại |
| on-failure | Khởi động lại khi mà contaner bị thoát ra vì lỗi, khi mà không có exit code |
root@lamth-Precision-M4700:~# docker container run -it –restart always ubuntu /bin/bash root@3df9779a3b7f:/# ```