# Hướng dẫn sử dụng docker ## Docker là gì tại sao nên xài docker Như đã biết các máy ảo như VMWare nè, Virtual Box nè cũng là một container ảo hóa nhưng ở cấp độ ***hệ điều hành***, tức là sao? tức là hệ điều hành là một môi trường để các app bên trong có thể chạy và sử dụng Vấn đề: Giả sử như ta có một ứng dụng *mongoDB* phiên bản 1.0 ta cài vào windows 8 64 bit. OK mongoDB này phát triển bự lên, bây giờ cần nâng cấp vps lên cho mạnh hơn nên ta tạo chuyển qua một vps mới mà nó lại xài windows 10 64 bit . Buồn thay, các package và một số module không tương thích với môi trường này :(. Giả sử nó có tương thích đi chăng nữa thì môi trường bây giờ cũng đã thay đổi có thể dẫn tới lỗi phát sinh sau này Giải pháp: Docker là một container ảo hóa môi trường cho app, ứng dụng. Thay vì ta phải cài lại hệ điều hành, phiên bản, ... rất mất thời gian thì chỉ cần cài docker và pull các app mình cần chạy là xong Ở ví dụ dưới: hồ cá đại diện cho container, con cá đại diện cho app, muốn di chuyển con cá ta di chuyển luôn cái hồ chứa môi trường cho nó cho chắc gạo ![](https://i.imgur.com/yEr9IRa.jpg) ## Các bước deploy app lên vps bằng docker Giả sử app ta sử dụng là python + flask ### B1: Tạo docker file Pull project về, giả sử thư mục là api_python Ta tạo docker file bên trong source app: $ sudo nano Dockerfile chép nội dung này vào ``` FROM python:3.6-alpine WORKDIR /app COPY . . RUN pip install -r requirements.txt CMD ["python", "main.py"] ``` Giải thích các lệnh * WORKDIR: thư mục sẽ là việc trong image * COPY . . : copy toàn bộ nội dung từ thư mục hiện tại vô thư mục WORKDIR ### B2: Build dockerfile -> image ``` docker build -t api_python ``` ### B3: Kiểm tra image vừa tạo ``` docker images ``` Có tên vừa tạo - api_python là được ### B4: Run image vừa tạo ``` docker run -d --name api_python -p 5000:5000 api_python ``` 5000:5000 -> port VPS map với port trong app ## Tổng hợp các lệnh docker thường sử dụng | ID | Lệnh | Ý nghĩa | | --- | -------------------------- | -------------------------------- | | 1 | docker ps | Show hết các container đang chạy | | 2 | docker images | Show hết các image hiện có | | 3 | docker stop <CONTAINER_ID/NAMES> | Stop container nào đó | | 4 | docker restart <CONTAINER_ID/NAMES>| restart container nào đó | | 4 | docker rm <CONTAINER_ID/NAMES> | Xóa container nào đó | | Column 1 | Column 2 | Column 3 | | -------- | -------- | -------- | | Text | Text | Text |