Cách Sử Dụng Docker Trên Ubuntu: Hướng Dẫn Toàn Diện Về Cài Đặt, Ảnh, Dockerfile và Tối Ưu Hóa

目次

1. Giới thiệu

Docker Là Gì?

Docker là một nền tảng sử dụng công nghệ ảo hóa dựa trên container để phát triển, phân phối và chạy ứng dụng một cách hiệu quả. Không giống như các máy ảo truyền thống (VM), các container chia sẻ kernel của hệ điều hành chủ, cho phép khởi động nhanh hơn và tiêu thụ tài nguyên thấp hơn.

Lợi Ích Của Việc Sử Dụng Docker Trên Ubuntu

Ubuntu là một trong những bản phân phối Linux có tính tương thích mạnh mẽ với Docker. Các lý do chính bao gồm:

  • Hỗ Trợ Chính Thức : Docker chính thức hỗ trợ Ubuntu, cho phép cài đặt dễ dàng qua kho lưu trữ chính thức.
  • Quản Lý Gói Ổn Định : Trình quản lý gói APT của Ubuntu làm cho việc quản lý phiên bản trở nên đơn giản.
  • Hỗ Trợ Cộng Đồng Rộng Rãi : Ubuntu có một cộng đồng người dùng toàn cầu lớn, giúp việc khắc phục sự cố dễ dàng hơn khi gặp vấn đề.

Những Gì Bạn Sẽ Học Trong Bài Viết Này

Hướng dẫn này giải thích các chủ đề sau một cách từng bước:

  1. Cách cài đặt Docker trên Ubuntu
  2. Các hoạt động cơ bản với hình ảnh Docker
  3. Tạo hình ảnh tùy chỉnh bằng Dockerfile
  4. Thiết lập locale tiếng Nhật trong container Ubuntu
  5. Tối ưu hóa và giảm thiểu hình ảnh Docker
  6. Phát triển ứng dụng bên trong container Ubuntu
  7. Các lỗi phổ biến và khắc phục sự cố

Nội dung hữu ích cho cả người mới bắt đầu và người dùng nâng cao, vì vậy hãy tham khảo nó ở bất kỳ giai đoạn nào.

2. Cài Đặt Docker Trên Ubuntu

Cài Đặt Docker Sử Dụng Kho Lưu Trữ Chính Thức

Trên Ubuntu, bạn có thể dễ dàng cài đặt Docker bằng kho lưu trữ chính thức. Hãy làm theo các bước dưới đây để thiết lập môi trường của bạn.

1. Xóa Các Gói Docker Hiện Có

Ubuntu có thể bao gồm một gói gọi là docker.io, có thể là phiên bản cũ. Hãy xóa nó trước khi cài đặt Docker mới nhất.

sudo apt remove docker docker-engine docker.io containerd runc

2. Cài Đặt Các Gói Yêu Cầu

Cài đặt các gói phụ thuộc trước khi cài đặt.

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

3. Thêm Kho Lưu Trữ Docker Chính Thức

Thêm khóa GPG chính thức của Docker và cấu hình kho lưu trữ.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4. Cài Đặt Docker

Sau khi thêm kho lưu trữ, cài đặt Docker.

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

5. Xác Minh Cài Đặt

Kiểm tra xem Docker đã được cài đặt đúng chưa bằng cách hiển thị thông tin phiên bản.

docker --version

Thiết Lập Ban Đầu Sau Khi Cài Đặt

1. Khởi Động Và Kích Hoạt Dịch Vụ Docker

Khởi động dịch vụ Docker và kích hoạt khởi động tự động khi boot.

sudo systemctl start docker
sudo systemctl enable docker

2. Cho Phép Người Dùng Không Phải Root Chạy Docker

Mặc định, chỉ root mới có thể chạy Docker. Cho phép người dùng thông thường thực thi các lệnh Docker.

sudo usermod -aG docker $USER

Đăng xuất và đăng nhập lại để áp dụng các thay đổi.

3. Kiểm Tra Hoạt Động Của Docker

Chạy container hello-world bằng tài khoản người dùng thông thường.

docker run hello-world

Nếu đầu ra bao gồm “Hello from Docker!”, thì việc cài đặt đã thành công.

3. Các Hoạt Động Cơ Bản Của Hình Ảnh Docker

Hình Ảnh Docker Là Gì?

Hình ảnh Docker hoạt động như một mẫu để tạo container. Bằng cách sử dụng hình ảnh Docker dựa trên Ubuntu, bạn có thể nhanh chóng khởi chạy môi trường Ubuntu.

Tải Hình Ảnh Ubuntu Từ Docker Hub

Docker Hub cung cấp nhiều hình ảnh Docker chính thức. Để tải hình ảnh Ubuntu, chạy:

docker pull ubuntu

Khởi Động Và Dừng Container

Sử dụng hình ảnh Ubuntu đã tải để khởi động một container:

docker run -it ubuntu bash

This opens a shell inside the Ubuntu container, allowing you to operate within it.

Danh sách các Container

Display running containers:

docker ps

Display all containers, including stopped ones:

docker ps -a

Dừng và Xóa Container

Stop a running container:

docker stop [container ID or name]

Remove an unnecessary container:

docker rm [container ID or name]

Quản lý Ảnh Docker

List downloaded Docker images:

docker images

Remove an image:

docker rmi [image ID]

4. Tạo Ảnh Tùy Chỉnh với Dockerfile

Dockerfile là gì?

Dockerfile là một tệp cấu hình dùng để xây dựng các ảnh Docker. Dựa trên các lệnh được viết trong Dockerfile, bạn có thể tạo ra các ảnh Docker tùy chỉnh. Điều này cho phép bạn thống nhất môi trường phát triển hoặc tạo các ảnh bao gồm các gói cần thiết.

Cú pháp cơ bản của Dockerfile

Một Dockerfile thường bao gồm các lệnh sau:

CommandDescription
FROMSpecifies the base image
RUNExecutes commands to build the image
COPYCopies files into the container
WORKDIRSets the working directory
CMDDefault command executed when the container starts
ENTRYPOINTDefines the entry point of the container

Tạo một Ảnh Dựa trên Ubuntu Tùy chỉnh

Thực hiện các bước dưới đây để tạo một ảnh Docker dựa trên Ubuntu tùy chỉnh.

1. Tạo Thư mục Làm việc

Đầu tiên, tạo một thư mục dự án mới và chuyển vào thư mục đó.

mkdir my-ubuntu-image
cd my-ubuntu-image

2. Tạo Dockerfile

Tạo một Dockerfile trong thư mục và viết nội dung sau:

# Base Ubuntu official image
FROM ubuntu:latest

# Maintainer information (optional)
LABEL maintainer="your-email@example.com"

# Update package list and install basic tools
RUN apt update && apt install -y curl vim git

# Set working directory
WORKDIR /workspace

# Default command when the container starts
CMD ["bash"]

3. Xây dựng Ảnh Docker

Xây dựng một ảnh tùy chỉnh từ Dockerfile của bạn:

docker build -t my-ubuntu-image .

Tùy chọn -t gán tên cho ảnh.

4. Xác minh Ảnh

Kiểm tra ảnh mới vừa xây dựng của bạn:

docker images

5. Chạy một Container

Khởi chạy một container từ ảnh tùy chỉnh:

docker run -it my-ubuntu-image

Ảnh này bao gồm các công cụ như curlvim.

5. Thiết lập môi trường Nhật Bản trong các Container Ubuntu

Ảnh Ubuntu mặc định sử dụng môi trường tiếng Anh. Để sử dụng tiếng Nhật, cần cấu hình bổ sung.

Cài đặt Locale Nhật Bản

Để bật hiển thị và nhập tiếng Nhật trong một container Ubuntu, cài đặt locale Nhật Bản.

1. Cài đặt các gói cần thiết

apt update
apt install -y language-pack-ja locales

2. Cấu hình Locale

Tạo và áp dụng locale:

locale-gen ja_JP.UTF-8
update-locale LANG=ja_JP.UTF-8

3. Áp dụng các cài đặt

export LANG=ja_JP.UTF-8

Cài đặt nhập tiếng Nhật

Để nhập ký tự tiếng Nhật trong terminal, cài đặt ibus-mozc:

apt install -y ibus-mozc

Nếu sử dụng các ứng dụng GUI, thêm các biến môi trường sau:

export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus

Sử dụng các ứng dụng GUI

Để chạy các ứng dụng GUI bên trong container Docker, sử dụng X server trên máy chủ.

Chạy container với X11 được bật:

docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix my-ubuntu-image

6. Tối ưu và Giảm kích thước Ảnh Docker

Các ảnh Docker có thể được tối ưu để cải thiện tốc độ khởi động container và giảm dung lượng lưu trữ. Dưới đây là một số kỹ thuật để tạo ảnh nhẹ.

Cách tạo ảnh nhẹ dựa trên Ubuntu

Ảnh mặc định ubuntu:latest có kích thước tương đối lớn. Sử dụng một tùy chọn nhẹ hơn như ubuntu:minimal giúp giảm kích thước container.

FROM ubuntu:minimal

Một tùy chọn khác là sử dụng Alpine Linux, vốn nhỏ hơn đáng kể so với Ubuntu.

FROM alpine:latest
RUN apk add --no-cache bash curl

Sử dụng Alpine có thể giảm kích thước ảnh hàng trăm megabyte.

Giảm kích thước ảnh bằng cách xóa các tệp không cần thiết

Bạn có thể giảm kích thước ảnh bằng cách xóa các tệp cache không cần thiết được tạo bởi apt-get.

RUN apt update && apt install -y curl vim \
    && apt clean \
    && rm -rf /var/lib/apt/lists/*

Cụ thể, lệnh rm -rf /var/lib/apt/lists/* sẽ xóa các danh sách gói và dữ liệu không dùng.

Sử dụng Xây dựng Đa Giai đoạn

Xây dựng đa giai đoạn cho phép bạn chỉ sử dụng các công cụ trong quá trình xây dựng mà vẫn giữ cho ảnh cuối cùng nhẹ.

FROM ubuntu as builder
RUN apt update && apt install -y gcc

FROM ubuntu:minimal
COPY --from=builder /usr/bin/gcc /usr/bin/gcc

Bằng cách này, bạn tránh việc bao gồm các công cụ phát triển trong ảnh cuối cùng, dẫn đến kích thước rất nhỏ hơn.

7. Ví dụ Thực tế: Phát triển Ứng dụng trong Các Container Ubuntu

Phần này giới thiệu cách thiết lập môi trường phát triển bên trong các container Ubuntu.

Thiết lập Môi trường Phát triển Python

Tạo Dockerfile sau để thiết lập môi trường phát triển Python trong một container Ubuntu:

FROM ubuntu:latest
RUN apt update && apt install -y python3 python3-pip
CMD ["python3"]

Xây dựng ảnh và chạy container:

docker build -t python-dev .
docker run -it python-dev

Môi trường này cho phép bạn sử dụng lệnh python3 để phát triển và kiểm thử script.

Thiết lập Môi trường Phát triển Node.js

Để thiết lập môi trường phát triển Node.js, sử dụng Dockerfile sau:

FROM ubuntu:latest
RUN apt update && apt install -y nodejs npm
CMD ["node"]

Xây dựng và chạy container:

docker build -t node-dev .
docker run -it node-dev

Môi trường này cho phép thực thi JavaScript và phát triển ứng dụng bằng lệnh node.

8. Câu hỏi Thường gặp & Khắc phục sự cố

Việc sử dụng Docker có thể gây ra nhiều vấn đề. Dưới đây là các câu hỏi thường gặp và giải pháp điển hình.

Sự khác biệt giữa Docker và Máy ảo

  • Docker : Chia sẻ kernel của hệ điều hành máy chủ, khiến nó nhẹ và khởi động container nhanh.
  • Máy ảo (VMs) : Mỗi máy ảo có hệ điều hành riêng, dẫn đến việc tiêu thụ tài nguyên cao hơn và khởi động chậm hơn.

Docker xuất sắc trong việc tối ưu tài nguyên và phù hợp với môi trường phát triển và triển khai tự động.

Giữ dữ liệu trong các Container Ubuntu

Để giữ dữ liệu ngay cả khi container dừng, sử dụng volume mounts:

docker run -v my_data:/data ubuntu

Ngay cả khi container bị xóa, dữ liệu lưu trong volume my_data vẫn có thể được sử dụng lại.

Các lỗi thường gặp và giải pháp

1. Lỗi permission denied

Nếu bạn thấy lỗi permission denied khi cố gắng chạy Docker, người dùng của bạn có thể chưa thuộc nhóm docker.

Thêm người dùng vào nhóm Docker:

sudo usermod -aG docker $USER

Đăng xuất và đăng nhập lại để áp dụng thay đổi.

2. Lỗi image not found

Nếu một ảnh đã bị xóa khỏi Docker Hub, hãy chỉ định thẻ mới hơn khi kéo:

docker pull ubuntu:22.04

Chỉ định phiên bản rõ ràng đảm bảo rằng ảnh đúng được lấy về.