Header Ads Widget

Docker và triển khai và chạy các ứng dụng trong các container

 Docker là một nền tảng giúp bạn tạo, triển khai và chạy các ứng dụng trong các container. Container là một môi trường tách biệt, bao gồm tất cả các thư viện, dependency mà ứng dụng cần, giúp ứng dụng chạy được trên bất kỳ máy nào mà không cần cấu hình lại môi trường


1 . Ưu điểm

  • Không phụ thuộc hệ điều hành.

  • Dễ triển khai, di chuyển và mở rộng.

  • Giúp phát triển, test và deploy đồng nhất.


2. Cài đặt Docker

Windows

  1. Tải Docker Desktop: https://www.docker.com/products/docker-desktop

  2. Cài đặt và bật tính năng WSL2 nếu bạn dùng Windows.

  3. Kiểm tra:

docker --version
docker compose version

Linux

sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
docker --version

macOS

Tải Docker Desktop cho Mac và làm tương tự như Windows.

Các khái niệm cơ bản trong Docker

  • Image: File template chứa ứng dụng và environment. 
  • Container: Thể hiện của image đang chạy. Bạn có thể tạo nhiều container từ cùng một image
  • Dockerfile: File cấu hình để build image
  • Volume: Dùng để lưu dữ liệu ngoài container, không bị mất khi container xóa
  • Network: Kết nối giữa các container

Một số lệnh cơ bản

1. Container

Khởi tạo container nếu chưa có: 
docker run -it --name mycontainer -p 8081:8081 -v /data/lienvu:/app ignite-apk
  • -it : interactive + terminal
  • --name : đặt tên cho container
  • ignite-apk: image sử dụng
  • -p: Map với port host và container
  • -v: Mount thư mục bên ngoài máy vào container,  /data/lienvu ánh xạ vào trong container tại: /app

Một thư mục trên host:

Hoặc start một container đã tạo trước đó
docker start -ai mycontainer
Xem container đang chạy:
docker ps
Xem tất cả container (kể cả đã dừng):
docker ps -a
Dừng container:
docker stop mycontainer
Xóa container:
docker rm mycontainer

Vào container đang chạy:
docker exec -it mycontainer bash

Hoặc vào chạy docker ignite-apk với thư mục app với name=ignite-run
docker run -it --name ignite-run -v $(pwd):/app ignite-apk /bin/bash
Hoặc chạy docker và thực thi 1 lệnh:
docker run -it --name ignite-run -p 8081:8081 -v $(pwd):/app ignite-apk /bin/bash -c "cd /path/to/lienvu && WEB_HOST=0.0.0.0 yarn start --dev-client --no-dev --host lan"
Hoặc chạy với quyền sudo xóa container cũ khởi tạo mới
sudo docker rm -f ignite-run && sudo docker run -it --name ignite-run -p 8081:8081 -v $(pwd):/app ignite-apk /bin/bash -c "cd /app/salekit_rsync/build/lienvu/ && WEB_HOST=0.0.0.0 yarn start --dev-client --no-dev --host lan"

2. Image

Xem image có sẵn:
docker images
Build image ignite-apk từ Dockerfile:
docker build -t ignite-apk .
Xóa image:
docker rmi ignite-apk

Tạo volume:
docker volume create mydata

Gắn volume vào container:
docker run -v mydata:/data -it ubuntu
Tạo network:
docker network create mynetwork

Chạy container với network:
docker run --network=mynetwork -it ubuntu

Docker Compose
Docker Compose giúp chạy nhiều container cùng lúc theo cấu hình file docker-compose.yml.

Ví dụ file docker-compose.yml:
version: "3" services: web: image: nginx ports: - "8080:80" db: image: mysql:8 environment: MYSQL_ROOT_PASSWORD: mypassword

Các lệnh Compose hay dùng:
docker-compose up # Chạy tất cả container
docker-compose down # Dừng và xóa container, network 
docker-compose build # Build image 
docker-compose logs # Xem log của các service
Ví dụ thực tế: Chạy ứng dụng Node.js
Tạo Dockerfile
FROM node:18 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD ["node", "index.js"]

Chạy container
docker run -p 3000:3000 mynodeapp
Xem log container
docker logs <container>  

Xem resource usage
docker stats  

Xem chi tiết container
docker inspect <container> 
Copy file từ container về host
docker cp <container>:<path> <host_path>
Tạo image từ container đang chạy
docker commit <container> <new_image_name>

Một số lệnh xử lý nhanh

Lệnh tìm 1 docker dừng và xóa các container đang sử dụng ignite-apk
docker ps -a -q --filter ancestor=ignite-apk | xargs -r docker stop
docker ps -a -q --filter ancestor=ignite-apk | xargs -r docker rm

Hoặc xóa image ignite-apk

docker image rm -f ignite-apk 2>/dev/null || true

Nhận xét