Bài 6. Tìm hiểu về Dockerfile

Giới Thiệu

Dockerfile là một tệp tin văn bản không có phần đuôi mở rộng, chứa tất cả các câu lệnh chỉ dẫn để Docker có thể tạo ra một Docker Image. Bằng cách sử dụng Dockerfile, người dùng có thể định nghĩa môi trường và các dependencies cần thiết để chạy ứng dụng của mình. Dockerfile giúp đơn giản hóa quá trình cấu hình và triển khai ứng dụng, đảm bảo tính nhất quán giữa các môi trường phát triển, thử nghiệm và sản xuất.

Yêu Cầu

Để làm việc với Dockerfile, bạn cần có:

  • Docker đã được cài đặt trên máy tính của bạn.
  • Kiến thức cơ bản về các lệnh Linux.
  • Kiến thức cơ bản về Docker và cách Docker hoạt động.

Nội Dung

1. Dockerfile và Cấu Trúc Cơ Bản

Dockerfile chứa các chỉ dẫn (instructions) mà Docker sẽ thực hiện theo trình tự từ trên xuống. Một Dockerfile phải bắt đầu với chỉ dẫn FROM, xác định image cơ sở mà các câu lệnh tiếp theo sẽ được thực thi trên đó.

2. Parser Directives

Parser directives là các comment đặc biệt trong Dockerfile cung cấp chỉ dẫn cho Docker biết cách thức đọc nội dung tệp tin. Có hai dạng được hỗ trợ:

  • syntax: Mô tả cho parser biết syntax version nào được sử dụng khi đọc Dockerfile.
  • escape: Mô tả cho parser biết ký tự nào được escape trong quá trình parse Dockerfile.

3. Biến Môi Trường

Biến môi trường được định nghĩa bằng lệnh ENV và có thể được sử dụng trong các instructions dưới dạng $variable_name hoặc ${variable_name}.

4. Các Chỉ Thị Chính Trong Dockerfile

  • FROM: Chỉ định image cơ sở để build image.
  • LABEL: Thêm thông tin meta vào Docker Image dưới dạng các cặp key-value.
  • MAINTAINER: Khai báo thông tin tác giả của Dockerfile.
  • RUN: Chạy một lệnh trong quá trình build image, thường là các lệnh Linux.
  • COPY & ADD: Thêm thư mục, file vào Image.
  • ENV: Thiết lập biến môi trường cho container.
  • VOLUME: Tạo ổ đĩa chia sẻ giữa các container.
  • USER: Chỉ định user chạy các command được khai báo ở các chỉ thị RUN, CMDWORKDIR.
  • WORKDIR: Thiết lập thư mục làm việc hiện tại cho các chỉ thị CMD, ENTRYPOINT, ADD thực thi.
  • EXPOSE: Thiết lập cổng mà container lắng nghe.
  • ENTRYPOINT & CMD: Chạy lệnh trong chỉ thị này khi container khởi chạy.

5. Ví Dụ về Dockerfile

- Dưới đây là một ví dụ đơn giản về Dockerfile cho một ứng dụng Node.js:

1. Tạo ra dự án Nodejs

- Tạo file Package.json:

{
  "name": "docker-node-app",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "express": "^4.17.1"
  }
}


- Tạo file index.js:

const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(port, () => {
  console.log(`App is running on port ${port}`);
});

2. Tạo ra file Dockerfile

# Sử dụng image cơ sở 
FROM node:14 

# Thiết lập thư mục làm việc
WORKDIR /app

# Sao chép file package.json vào thư mục làm việc
COPY package.json ./ 

# Cài đặt các dependencies
RUN npm install 

# Sao chép toàn bộ mã nguồn vào thư mục làm việc
COPY . . 

# Thiết lập biến môi trường
ENV PORT=3000

# Mở cổng 3000
EXPOSE 3000 

# Chạy ứng dụng
CMD ["node", "index.js"]

3. Build Dockerfile

docker build -t docker-node-app .

docker run -p 3000:3000 docker-node-app

4. Chạy dự án
- Truy cập http://localhost:3000.

curl localhost:3000

Kết Luận

Dockerfile là một công cụ mạnh mẽ giúp bạn tạo ra các Docker Image tùy chỉnh theo nhu cầu của mình. Bằng cách sử dụng Dockerfile, bạn có thể đảm bảo rằng ứng dụng của mình sẽ chạy nhất quán trên mọi môi trường. Việc nắm vững các chỉ thị và cú pháp của Dockerfile sẽ giúp bạn tối ưu hóa quá trình phát triển và triển khai ứng dụng, đồng thời tiết kiệm thời gian và nguồn lực.


Tác giả: Đỗ Thiên Giang

Chú ý: Tất cả các bài viết trên TEDU.COM.VN đều thuộc bản quyền TEDU, yêu cầu dẫn nguồn khi trích lại trên website khác.

Lên trên