Giới thiệu cơ bản về Docker và cài đặt trên CentOS 7

Docker là gì?

Docker là một nền tảng mã nguồn mở cho việc đóng gói, triển khai và chạy ứng dụng dưới dạng container. Nó cho phép nhà phát triển đóng gói ứng dụng cùng các phụ thuộc vào một hình ảnh di động, sau đó triển khai trên bất kỳ hệ điều hành Linux hoặc Windows nào mà không cần thay đổi môi trường.

Các thành phần chính trong Docker

  • Docker Client: Công cụ giao tiếp với Docker daemon.
  • Docker Daemon: Dịch vụ chạy ở nền để quản lý container, image, network và volume.
  • Image: Bản sao tĩnh của một môi trường ứng dụng, có thể tạo nhiều container từ một image.
  • Container: Một instance đang chạy của một image, có lớp đọc/ghi riêng biệt.
  • Registry: Nơi lưu trữ và chia sẻ image, ví dụ như Docker Hub.

Hiểu về Image và Container

Một image là tập hợp các lớp tệp tin theo cấu trúc phân tầng, chứa toàn bộ môi trường cần thiết để chạy ứng dụng. Mỗi container được tạo từ image bằng cách thêm một lớp đọc/ghi phía trên. Khi chỉnh sửa file trong container, hệ thống sẽ sao chép file đó sang lớp mới chứ không thay đổi image gốc. Do đó, khi xóa container, mọi thay đổi đều mất đi – đây là tính năng bảo vệ nguyên trạng image.

Nếu muốn lưu lại thay đổi, dùng lệnh docker commit để tạo ra một image mới từ container đã chỉnh sửa.

Tại sao nên dùng Docker?

  • Tối ưu hóa quy trình phát triển: Đóng gói ứng dụng nhanh chóng, giảm thời gian triển khai từ vài ngày xuống vài giây.
  • Đơn giản hóa triển khai đa môi trường: Tất cả phụ thuộc được bao gồm trong image, giúp dễ dàng chạy web, database, message queue...
  • Tiết kiệm chi phí: Tận dụng hiệu quả tài nguyên máy chủ, phù hợp với mô hình cloud.
  • Dễ dàng di chuyển giữa các hệ thống: Môi trường hoạt động giống nhau dù trên vật lý, VM hay cloud.

Cài đặt Docker trên CentOS 7

  1. Cập nhật hệ thống:
    yum update -y
  2. Cài đặt các công cụ hỗ trợ:
    yum install -y yum-utils device-mapper-persistent-data lvm2
  3. Thêm kho Docker từ Aliyun:
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  4. Cài Docker CE (Community Edition):
    yum install docker-ce -y
  5. Kiểm tra phiên bản sẵn có:
    yum list docker-ce --showduplicates
  6. Kiểm tra cài đặt thành công:
    docker -v

Cấu hình mirror (tăng tốc tải image)

Chỉnh sửa file cấu hình tại /etc/docker/daemon.json:

cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://dockerhub.azk8s.cn",
    "https://mirror.ccs.tencentyun.com",
    "https://registry.cn-hangzhou.aliyuncs.com"
  ]
}
EOF

Sau đó khởi động lại dịch vụ:

systemctl daemon-reload
systemctl restart docker

Một số lệnh cơ bản liên quan đến image

  • docker images: Xem danh sách image hiện có.
  • docker search ubuntu: Tìm kiếm image trên Docker Hub.
  • docker pull ubuntu:20.04: Tải image ubuntu phiên bản 20.04.
  • docker rmi <image-id>: Xóa image.
  • docker system df: Kiểm tra dung lượng sử dụng bởi image, container, volume.
  • docker tag ubuntu:20.04 my-ubuntu:v1: Đặt nhãn mới cho image.
  • docker inspect <image-id>: Xem chi tiết thông tin image.
  • docker image prune -a: Dọn dẹp image không sử dụng.

Không nên dùng tag latest trong môi trường sản xuất vì nó luôn cập nhật theo phiên bản mới nhất, gây thiếu ổn định.

Lệnh quản lý container

  • docker ps: Xem container đang chạy.
  • docker ps -a: Xem tất cả container (đang chạy và dừng).
  • docker ps -l: Xem container cuối cùng từng chạy.
  • docker logs <container-id>: Xem log đầu ra của container.
  • docker pause <name>: Tạm ngừng container.
  • docker unpause <name>: Khôi phục container.

Tạo container từ image

Sử dụng lệnh docker run với các tùy chọn:

  • -i: Giữ stdin mở.
  • -t: Cấp phát terminal ảo.
  • --name: Đặt tên container.
  • -d: Chạy container ở chế độ nền (detached).
  • -v: Ánh xạ thư mục từ host vào container.
  • -p: Ánh xạ port từ host sang container.

Ví dụ:

docker run -it --name=myapp ubuntu:20.04

Hoặc chạy nền:

docker run -di --name=app ubuntu:20.04

Sao chép file giữa host và container

docker cp file.txt <container-id>:/path/
docker cp <container-id>:/path/file.txt .

Xem sự thay đổi trong container

docker diff <container-id>

Xem thông tin ánh xạ port

docker port <container-name>

Ánh xạ thư mục (Volume Mounting)

Liên kết thư mục host với container để đồng bộ dữ liệu:

docker run -di -v /data/app:/app --name=webapp ubuntu:20.04

Xuất và nhập container

  • docker export -o app.tar <container-id>: Xuất container thành file tar.
  • docker import app.tar myapp:v1: Nhập file tar thành image.

Kết nối mạng giữa các container

Sử dụng mạng tự định nghĩa để truy cập container qua tên thay vì IP động:

docker network create mynet
docker run --network=mynet --name=web app
docker run --network=mynet --name=db app

Tạo image mới từ container đã chỉnh sửa

docker commit -m "Add config files" -a "dev@example.com" <container-id> my-new-image:v1

Cài đặt Docker trên Red Hat

  1. Cập nhật hệ thống:
    yum update -y
  2. Thêm kho Docker:
    yum install -y yum-utils
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  3. Cài Docker:
    yum install docker-ce -y
  4. Bắt đầu dịch vụ:
    systemctl start docker

Tạo registry riêng (private registry)

Khởi tạo registry cục bộ:

docker pull registry
docker run --name registry -p 5000:5000 -v /data/registry:/var/lib/registry -d registry:latest

Khi push image, nếu gặp lỗi HTTPS, cần cấu hình insecure registry:

cat > /etc/docker/daemon.json <<EOF
{
  "insecure-registries": ["172.28.199.112:5000"]
}
EOF

Triển khai ứng dụng phổ biến

MySQL

Phiên bản ổn định với volume gắn kết:

docker run --name mysql \
--restart=always \
-p 3306:3306 \
-v /mysql/data:/var/lib/mysql \
-v /mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=redhat \
-d mysql:5.7

NGINX

Mount cấu hình từ host:

docker pull nginx
docker run -id --name=nginx -p 80:80 -v /data/nginx/conf:/etc/nginx nginx:latest

Tomcat

Phải tạo file HTML trong thư mục webapps/ROOT:

docker exec -it tomcat /bin/bash
cd webapps/ROOT
echo "Hello Docker!" > index.html

Redis

mkdir -p /myredis/conf
touch /myredis/conf/redis.conf

docker run -p 6379:6379 --name redis \
-v /myredis/data:/data \
-v /myredis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

# Kết nối Redis
docker exec -it redis redis-cli

Tài liệu chính thức

Xem thêm tại: https://docs.docker.com

Thẻ: docker CentOS container Image registry

Đăng vào ngày 26 tháng 9 lúc 07:28