---
# System prepended metadata

title: Docker cơ bản
tags: [learn]

---

# docker cơ bản


## Phần 4

**Cú pháp CLI của docker:** ``` docker <Management command> <action command> [OPTIONS]```
**Cú pháp đọc logs của 1 container:** `docker container logs <tên container muốn đọc>`

**Những cú pháp theo dõi một container:**
```
1. docker container top <id hoặc tên container>
2. docker container stats [Container id]
3. docker container inspect (xem cấu hình hiện tại của file)
```
**Cách vào Shell của container**
1. Đối với container mới và vào shell: `docker container run -it`
2. Đối với container đang chạy: `docker container exec <tên container hoặc id container> -it`
***Note:*** Đối với container chạy app thì cần command `bash`
![image](https://hackmd.io/_uploads/Sk6HdrW_T.png)
- tên docker luôn là phần cuối cùng trong câu lệnh

**Docker thực chất là một process:** 
 1. Process này được giới hạn tài nguyên trên OS
 2. Container dừng và đóng như một process
![image](https://hackmd.io/_uploads/B1LAdWb_p.png)



---

## Phần 5
### Hệ Thống Network của Docker

**Một số câu lệnh**
**`Docker network <action-commands>`**
![image](https://hackmd.io/_uploads/HJb8_UWOT.png)
Sử dụng `--network -alias` để đặt tên alias cho một container 
=> đây là một cách sử dụng load-balancing ở mức độ dns 
![image](https://hackmd.io/_uploads/rySeSI-_6.png)


---
## Phần 6
### Tự tạo image
![image](https://hackmd.io/_uploads/rJ3zPSfOp.png)

**CLI:** `docker image build -t <tên image> <đường dẫn thư mục chứa Dockerfile>`

### Đăng nhập docker hub trên CLI
**CLI:** `docker login`

### Push image lên docker hub
**CLI:** `docker image push <image-tag>`

### Căn bản về Dockerfile
![image](https://hackmd.io/_uploads/BJmIftzdT.png)


**Phân biệt `RUN` và `CMD`**: `RUN` được dùng để chạy các câu lệnh build lên image, còn `CMD` thì được dùng để chạy các câu lệnh sau khi container được chạy.

> chưa làm bài tập p6


----
## Phần 7
### Chia sẻ và lưu trữ File cho Container

![image](https://hackmd.io/_uploads/r1Z_BjMua.png)

---
## Phần 8
### Tự động hóa trong môi trường container
![image](https://hackmd.io/_uploads/HJdNCCuO6.png)

### sử dụng
1. file mô tả yaml
2. **CLI:** `docker-compose`

`docker-compose down` để xóa đi hạ tầng mà một cách đơn giản

### Cách viết file docker-compose

- Khuyến nghị sử dụng engine docker từ version 3x trở lên (nên sử dụng version gần mới nhất)
- Sử dụng cùng CLI `docker-compose`
- Sử dụng trong môi trường cluster (docker swarm)
- đặt tên là `docker-compose.yml `
- Muốn sử dụng tên khác thì cần dùng option 
    - `docker-compose -f <filename> 

### Docker-compose CLI
- Chủ yếu dùng cho môi trường dev/test. Môi trường prod thường dùng stack trong docker swarm 
- 2 câu lệnh thường dùng:
    - `docker-compose up`  -> set up network, volume và bật containers
    - `docker-compose down` -> tắt hết container và xóa network, volume

### Cú pháp viết docker-compose 
![image](https://hackmd.io/_uploads/B1VWFkY_T.png)

![image](https://hackmd.io/_uploads/BJvS9JYu6.png)
![image](https://hackmd.io/_uploads/BkTwcF5O6.png)




## Phần 9: Chạy container trên cluster

### Vì sao?

![image](https://hackmd.io/_uploads/r1WS_lT_p.png)

### Docker swarm Orchestrator
![image](https://hackmd.io/_uploads/S1O7a-Tua.png)

- Hỗ trợ môi trường clustering
- 1 container chạy ra có thể phân phối điều trên nhiều host khác nhau

### Thực hành

- Có thể dùng `docker service ps <name of service>` để xem các service được chạy trên node nào, trạng thái ra sao

![image](https://hackmd.io/_uploads/ByqqJDTOT.png)
