[Docker] Docker vs vagrant, tôi đã quản lý container như thế nào?

by Hieu Nguyen
493 views

Bạn có gặp khó khăn trong việc xây dựng môi trường phát triển ứng dụng không? Mỗi khi bắt đầu một dự án mới, việc cài đặt môi trường phát triển thường tốn khá nhiều thời gian. Do đó việc xây dựng và chia sẻ môi trường phát triển giữa các thành viên trong dự án là thực sự cần thiết. Trong bài viết này tôi sẽ chia sẻ với các bạn cách mà tôi đã làm với các dự án của mình.

Tại sao lại sử dụng docker?

Chia sẻ qua một chút về quá trình trước khi tôi sử dụng docker trong các dự án của mình. Năm 2014, tôi bắt đầu xây dựng môi trường phát triển cho dự án sử dụng vargrant. Với vargrant tôi đã có thể đóng gói các dịch vụ được sử dụng trong dự án và chia sẻ với các thành viên trong dự án. Nhưng bạn biết không dự án có sử dụng PostgreSQL và Couchbase, khi đó tôi đã tạo 2 máy ảo vagrant cho các dịch vụ này. Bạn biết đấy, vargrant sẽ tạo ra một máy ảo hoàn chỉnh và sau đó tôi cài các dịch vụ tôi cần sử dụng lên đó. Nó thực sự là vấn đề với chiếc PC của tôi :). Ngoài ra bạn sẽ gặp khó khăn trong việc kết nối các máy ảo này với nhau nữa, bạn cần setting sao cho chúng ở cùng một mạng riêng.

Khi sử dụng docker thì sao? Với mỗi dịch vụ bạn tạo ra một container riêng giống như một máy ảo vargrant tôi đã tạo ở trên. Nhưng điểm khác biệt là gì?

  • Với docker bạn không cần lo lắng về vấn đề cài dịch vụ nữa. Nó đã tự động làm việc đó rồi.

  • docker không tạo ra một máy ảo hoàn chỉnh với các dịch vụ thừa trong đó. Nó đơn giản tạo ra một môi trường đủ để bạn chạy dịch vụ của mình.

  • Việc cấu hình mạng riêng và chuyển tiếp cổng vào container cũng được được thiết lập dễ dàng hơn.

Với chừng đó lý do là đủ để tôi chuyến sang sử dụng docker rồi 🙂

Tôi đã quản lý container bằng docker như thế nào?

Để quản lý container tôi sử dụng Docker Compose, công cụ này có sẵn khi bạn cài Docker Desktop

Cấu hình container

  • Sử dụng docker-compose.yml để cấu hình các dịch vụ bạn muốn sử dụng trong ứng dụng

Trong phạm vi bài viết này tôi sẽ cấu hình để tạo ra hai container cho các dịch vụ MySQL và DynamoDB.

docker-compose.yml

version: '3'
services:
  mysql:
    image: mysql:5.7.26
    # set hostname để bạn có thể access vào container bằng tên này
    container_name: mysql
    ports:
      # Cấu hình forward port từ host vào docker container
      - '3306:3306'
    volumes:
      # Cấu hình thư mục chưa schema bạn muốn import vào MySQL
      - ./mysql/initdb.d:/docker-entrypoint-initdb.d
      # mount thư mục MySQL data để có thể backup dữ liệu nếu cần
      - ./mysql/data:/var/lib/mysql
      # Các cấu hình bạn cần thay đổi cho dịch vụ MySQL
      - ./mysql/conf.d/my.cnf:/etc/mysql/my.cnf
      # mount thư mục log để trace lỗi nếu cần
      - ./mysql/log:/var/log/mysql
    # các biến môi trường sử dụng qua tham số -e khi run container hoặc cấu hình trong .env như bên dưới
    environment:
      # set mật khẩu cho tài khoản root
      - MYSQL_ROOT_PASSWORD=$DB_ROOT_PASSWORD
      # tên database bạn muốn tạo sau khi container được khởi động
      - MYSQL_DATABASE=$DB_DATABASE
      # tạo thêm một user mới với tên được cấu hình trong $MYSQL_USER
      - MYSQL_USER=$DB_USER
      # set mật khẩu cho user được tạo ở trên
      - MYSQL_PASSWORD=$DB_PASSWORD

  dynamodb:
    image: amazon/dynamodb-local
    # set hostname để bạn có thể access vào container bằng tên này
    container_name: dynamodb
    ports:
      # Cấu hình forward port từ host vào docker container
      - '8000:8000'
    volumes:
      # mount thử mục data của DynamoDB để có thể backup
      - ./dynamodb/data:/home/dynamodblocal/data
    entrypoint: java
    command: '-jar DynamoDBLocal.jar -sharedDb -dbPath /home/dynamodblocal/data'
  • Set các biến môi trường bằng .env

Tại thư mục chưa docker-compose.yml bạn tạo .env như sau:

.env

DB_ROOT_PASSWORD=hieunv@123456
DB_DATABASE=test
DB_USER=hieunv
DB_PASSWORD=hieunv@123456

Khởi động các dịch vụ

Bạn sử dụng docker-compose để khởi động các dịch vụ như đã cấu hình ở trên

docker-compose up -d
Tạo container bằng docker-compose

Xoá các container

Khi bạn không muốn sử dụng container nữa hoặc khi có lỗi container mà bạn muốn tạo lại thì có thể xoá nhanh các container đã tạo bằng lệnh sau:

docker-compose down -v

Cám ơn các bạn đã theo dõi bài viết. Hy vọng sau bài viết này các bạn sẽ sử dụng Docker trong dự án của mình.

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

You may also like