Dưới đây là danh sách các bài lab thực hành Docker cho người mới bắt đầu. Hãy viết solution của bạn vào một file ReadMe.md, đối với những bài tập phức tạp thì cho vào một thư mục con. Sau đó lưu vào github repo

1. Khởi động 1 container

  1. Cài đặt Docker: Hướng dẫn cài đặt Docker trên hệ thống của bạn.

  2. Hello World với Docker: Chạy một container Docker đơn giản chứa ứng dụng “Hello World”.

  3. Tạo container web server nginx

  • 3.1: Tạo web server sử dụng nginx hệ điều hành Alpine lắng nghe ở cổng 8080
  • 3.1: Tạo web server sử dụng nginx hệ điều hành Alpine lắng nghe ở cổng 9000, thư mục web gốc nginx sẽ tham chiếu (mapping volume) vào thư mục trên desk top của bạn chứa một file index.html. Nội dung file index.html in ra dòng chữ “Nginx Docker”
  1. Tạo container MySQL database
  • 4.1: Tạo MySQL lắng nghe ở cổng 3000, có password root là ‘abc123-’
  • 4.2: Tạo MySQL lắng nghe ở cổng mặc định, có password root là ‘abc123-’, có thêm công cụ quản trị adminer
  • 4.3 : Tạo MySQL lắng nghe ở cổng mặc định, có password root là ‘abc123-’, thư mục data tham chiếu vào thư mục trên desk top của bạn.
  1. Tạo container Postgresql database
  • 5.1: Tạo Postgresql database hệ điều hành Alpine lắng nghe ở cổng mặc định
  • 5.2: Tạo Postgresql cùng phần mềm quản lý Adminer, password root là ‘abc123-’
  • 5.3: Tạo Postgresql cùng phần mềm quản lý Adminer, password root là ‘abc123-’, thư mục data tham chiếu vào thư mục trên desk top của bạn.

2. Tạo Docker image

  1. Tạo Docker image của một ứng dụng Golang trả về REST API đơn giản ở cổng 8080.
  2. Tạo Docker image một database Postgresql database, cần thực hiện file SQL lần đầu tiên khi khởi động database
    -- Create the 'humanresource' database
    CREATE DATABASE humanresource;
    
    -- Connect to the 'humanresource' database
    \c humanresource
    
    -- Create the 'people' table
    CREATE TABLE people (
        id SERIAL PRIMARY KEY,
        first_name VARCHAR(255),
        last_name VARCHAR(255),
        gender VARCHAR(10),
        date_of_birth DATE
    );
    
    -- Create the 'university' table
    CREATE TABLE university (
        id SERIAL PRIMARY KEY,
        name VARCHAR(255),
        location VARCHAR(255)
    );
    
    -- Create the 'department' table
    CREATE TABLE department (
        id SERIAL PRIMARY KEY,
        name VARCHAR(255),
        description TEXT
    );
    
    -- Create the 'salary_history' table
    CREATE TABLE salary_history (
        id SERIAL PRIMARY KEY,
        person_id INT,
        salary DECIMAL(10, 2),
        effective_date DATE,
        FOREIGN KEY (person_id) REFERENCES people(id)
    );
       -- Insert data into the 'people' table
    INSERT INTO people (first_name, last_name, gender, date_of_birth)
    VALUES
        ('John', 'Doe', 'Male', '1990-01-15'),
        ('Jane', 'Smith', 'Female', '1985-03-20'),
        ('Michael', 'Johnson', 'Male', '1995-07-10'),
        ('Emily', 'Brown', 'Female', '1992-09-25'),
        ('David', 'Lee', 'Male', '1988-12-05');
    
    -- Insert data into the 'university' table
    INSERT INTO university (name, location)
    VALUES
        ('University of ABC', 'Cityville'),
        ('XYZ University', 'Townsville'),
        ('ABC Institute of Technology', 'Tech City');
    
    -- Insert data into the 'department' table
    INSERT INTO department (name, description)
    VALUES
        ('Human Resources', 'Manage personnel and hiring'),
        ('Finance', 'Manage financial transactions'),
        ('Computer Science', 'Teaching computer science courses');
    
    -- Insert data into the 'salary_history' table
    INSERT INTO salary_history (person_id, salary, effective_date)
    VALUES
        (1, 55000.00, '2022-01-01'),
        (2, 60000.00, '2022-01-01'),
        (3, 58000.00, '2022-01-01'),
        (4, 62000.00, '2022-01-01'),
        (5, 53000.00, '2022-01-01');
    
  3. Tạo Docker Image dự án bài số 2, sau đó thêm vào một ứng dụng Golang APP truy vấn bảng people bằng câu lệnh SELECT * FROM people rồi trả về JSON ở cổng 8080.

3. Tạo Docker compose

  1. Hãy viết file Docker compose gồm 2 docker image: Postgresql và một Golang APP có REST API. Golang REST API sẽ kết nối vào container Postgresql qua network chung là share_net. Golang REST API phục vụ JSON ở cổng 8080.
  2. Hãy viết file Docker compose gồm một image Adminer kết nối vào một image Postgresql để quản lý.
  3. Hãy viết file Docker compose gồm một image Traefik làm nhiệm vụ gateway và hai Nginx web server A và B.
    Hãy viết lệnh ở traefik gateway để định tuyến domain.com/product thì chuyển đến web server A, domain.com/service thì chuyển đến web server B.

4. Docker secret tăng

  1. Cải tiến lại bài tập số 3.1 ở đó thay vì viết password vào trực tiếp file docker compose hãy sử dụng docker secret