Công nghệ thông tin

Hướng dẫn sử dụng Docker chi tiết. Cách cài đặt lên macOS, Windows 10, Ubuntu

Lương Đàm 07/04/2025 10:10

Khám phá cách cài đặt và sử dụng Docker chi tiết trên macOS, Windows 10 và Ubuntu, giúp bạn làm chủ môi trường phát triển ảo hóa.

How to Deploy a Container with Docker Compose
Mục lục

Docker là gì?

Docker là một dự án mã nguồn mở giúp cung cấp cách để building, deploying và running ứng dụng dễ dàng hơn bằng cách sử dụng các container (trên nền tảng ảo hóa). Ban đầu Docker viết bằng Python, nhưng hiện tại đã chuyển sang Golang.

Định nghĩa Docker là gì

Docker cung cấp một cách tiện lợi để xây dựng, chia sẻ và triển khai ứng dụng trên nhiều môi trường khác nhau, từ máy cục bộ đến các môi trường điều tiết sản xuất. Docker còn giúp giảm thiểu sự phức tạp trong quá trình triển khai ứng dụng, tối ưu hóa tài nguyên và tăng tính di động của ứng dụng.

Một số khái niệm quan trọng về Docker

Một số khái niệm quan trọng liên quan đến Docker bao gồm hình ảnh (images), container, Dockerfile và Docker Hub. Hình ảnh là một môi trường chạy được đóng gói cùng với ứng dụng và các phụ thuộc. Container là một thực thể chạy dựa trên hình ảnh. Dockerfile là một tập tin cấu hình sử dụng để tạo hình ảnh Docker. Docker Hub là một kho lưu trữ trực tuyến cho việc chia sẻ và quản lý các hình ảnh Docker.

What is a Container? | Docker

Container trong Docker là gì?

Trong Docker, container là một đơn vị cô lập chứa đựng ứng dụng và môi trường chạy của nó. Containers cung cấp một cách đóng gói ứng dụng và tất cả các phụ thuộc của nó vào một đơn vị tiêu chuẩn hóa, giúp đảm bảo rằng ứng dụng có thể chạy một cách nhất quán trên mọi môi trường.

Docker cho phép các lập trình viên đóng gói các ứng dụng cần thiết vào trong container, như thư viện, gói dưới dạng package. Nhờ vào container, ứng dụng sẽ chạy trên mọi máy Linux bất kể mọi tùy chỉnh và cài đặt khác với máy dùng để viết code.

Docker khá giống với Virtual Machine, nhưng Docker phát triển mạnh mẽ và phổ biến nhanh chóng hơn.

Ưu điểm của Docker so với Virtual Machine

Dễ sử dụng: Docker rất dễ sử dụng có các developer, Admin System,… vì nó tận dụng container để build và kiểm tra nhanh chóng. Và nó có thể đóng gói các ứng dụng trên laptop của họ và chạy trên public cloud, private cloud,…

Tốc độ: Nói về tốc độ thì docker container rất nhẹ và nhanh và bạn có thể khởi tạo và chạy docker container chỉ trong vài giây.

Môi trường chạy: Bạn có thể tận dụng và chia nhỏ các container riêng lẻ. Ví dụ bạn có thể chạy Database trên một container và Redis cache chạy trên một container khác trong khi ứng dụng Node.js lại có thể chạy trên một container khác nữa. Khi sử dụng Docker bạn rất dễ để liên kết các container với nhau để tạo thành một ứng dụng. Từ đó, làm cho nó dễ dang scale và update các thành phần độc lập với nhau.

Thời điểm hiện tại thì thế giới bắt đầu sử dụng thêm một công cụ quản lý container hiện đại khác là Kubernetes.

Docker: Accelerated Container Application Development

Lịch sử phát triển Docker

Docker được tạo ra từ ông Solomon Hykes khi còn đang làm việc trong một dự án nội bộ của dotCloud ở Pháp. Đến đầu năm 2013, Docker được phát hành dạng mã nguồn mở và sau đó đến năm 2015, Docker trở thành top 20 dự án có số sao đánh giá cao nhất trên GitHub với hơn 6,800 fork và 11,00 lập trình viên.

Tại sao nên sử dụng Docker?

Việc setup và deploy application trên một hoặc nhiều máy chủ là một quá trình phức tạp và tốn nhiều công sức. Bao gồm việc cài đặt các công cụ và môi trường cần thiết cho ứng dụng, sau đó cố gắng đảm bảo ứng dụng chạy đúng cách trên từng máy chủ riêng biệt. Vấn đề khó khăn thêm nữa là sự không đồng nhất giữa các môi trường trên các máy chủ khác nhau. Để giải quyết những thách thức này, Docker ra đời như một giải pháp hiệu quả.

Lợi ích khi sử dụng Docker

Trái với máy ảo, Docker có khả năng start và stop container chỉ trong vài giây.

Bạn có thể triển khai container trên bất kỳ hệ thống nào mà bạn muốn.

Container có thể được xây dựng và xóa bỏ nhanh chóng hơn so với máy ảo.

Việc thiết lập môi trường làm việc dễ dàng hơn bao giờ hết. Chỉ cần cấu hình một lần và không cần phải cài đặt lại các phần mềm phụ thuộc. Nếu bạn chuyển sang một máy tính khác hoặc có người mới tham gia vào dự án, bạn chỉ cần chia sẻ cấu hình với họ.

Docker giữ cho không gian làm việc của bạn sạch sẽ hơn bằng cách ngăn chặn tác động đến các phần khác khi bạn loại bỏ môi trường.

Cách thức hoạt động của Docker

Về cách thức hoạt động của docker thì nó hoạt động bằng cách cung cấp phương thức tiêu chuẩn để chạy mã. Như cách máy ảo – ảo hóa (loại bỏ nhu cầu quản lý trực tiếp) phần cứng của máy chủ, các container sẽ ảo hóa hệ điều hành của máy chủ. Docker được cài đặt trên từng máy chủ và cung cấp các lệnh cơ bản để bạn có thể build, khởi tạo và dừng container.

Còn để hiểu về cơ chế hoạt động của Docker khá là phức tạp. Ở đây sẽ tóm gọn lại về hoạt động của Docker thông qua một Docker engine và kết hợp với 2 yếu tố sau:

1 server và 1 client.

Giao tiếp giữa server và client thông qua REST API.

Nếu bạn đang sử dụng hệ điều hành Windows/Mac cũ, bạn có thể tận dụng Docker toolbox, vì cho phép bạn điều kiển docker engine với Docker Compose và Kitematic.

Top 50 Docker Tools – Inedo Blog

Các công cụ, thuật ngữ cơ bản về Docker

Một số công cụ và thuật ngữ công nghệ bạn sẽ gặp phải khi sử dụng Docker bao gồm:

DockerFile: Mọi container Docker bắt đầu bằng một file văn bản đơn giản chứa hướng dẫn về cách tạo image container Docker. DockerFile tự động hóa tiến trình tạo image Docker. Về cơ bản, đây là danh sách các lệnh mà Docker Engine sẽ chạy để tập hợp image.

Docker container: Là các phiên bản live, running instance của Docker image. Ta thấy Docker image là file chỉ đọc còn container là phiên bản live, executable và người dùng có thể tương tác với chúng. Cùng với đó, quản trị viên có thể điều chỉnh cài đặt và các quy định của họ.

Docker Hub: Là kho lưu trữ công khai Docker image. Nó tự gọi mình là “thư viện và cộng đồng lớn nhất thế giới về image container”.

Docker Client: Đây là thành phần mà bạn có thể tương tác với Docker thông qua command line. Docker client sẽ gửi lệnh tới Docker Daemon thông qua REST API như đã đề cập ở trên.

Docker Engine: Đây là thành phần chính của Docker như một công cụ để đóng gói ứng dụng.

Docker Daemon: Dùng để lắng nghe các request từ Docker Client để quản lý các đối tượng như container, image, network và volume thông qua REST API.

Docker Volumes: Là phần dữ liệu được tạo ra khi container được khởi tạo.

Docker Machine: Tạo ra các docker engine trên máy chủ.

Docker Compose: Chạy ứng dụng bằng cách định nghĩa cấu hình các Docker Container thông qua file cấu hình.


Quy trình thực thi một hệ thống sử dụng Docker

Thường, để triển khai hệ thống Docker, phải tuân theo ba bước cơ bản: Build, Push và Pull, Run.

Build: Bước đầu tiên, bạn cần tạo một dockerfile, trong dockerfile này chính là code của mình. Dockerfile này sẽ được build ở một máy tính có cài đặt Docker Engine. Khi build xong, thì chúng ta sẽ có container và trong container sẽ chứa ứng dụng kèm bộ thư viện.

Push: Bạn thực hiện push Container lên cloud và lưu lại sau khi có được container.

Pull & Run: Nếu máy tính khác của bạn muốn sử dụng container thì máy của bạn phải thực hiện pull container này về máy đó. Và máy đó phải cài đặt trước Docker Engine. Tiếp theo, bạn mới thực hiện Run Container này.

Khi nào thì nên sử dụng Docker?

Trong những trường hợp sau đây bạn có thể sử dụng Docker hiệu quả:

  • Triển khai kiến trúc Microservice.
  • Sản phẩm công ty cần một cách tiếp cận mới về xây dựng, đẩy lên server và thực thi ứng dụng một cách nhanh chóng.
  • Khi build ứng dụng cần scale một cách linh hoạt.
  • Config máy local và server trên cùng một môi trường nhanh chóng.
Thành thạo Docker - Kubernetes trong 8 giờ - 2024 | Udemy

Hướng dẫn cài đặt Docker

Cài Docker trên macOS

Tải bộ cài tại Docker Desktop for Mac, cài đặt đơn giản như các công cụ thông thường.

Cài Docker trên Windows 10

Tải bộ cài tại Docker Desktop for Windows, tiến hành cài đặt. Đối với Windows phải kích hoạt chế độ Hyper-V virtualization (Ở chế độ này bạn không dùng được VirtualBox nữa).

Nếu chưa kích hoạt Hyper-V thì kích hoạt theo hướng dẫn Enable Hyper-V:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All 

Kích hoạt thông qua thiết lập Windows:

  • Nhấn phải chuột vào biểu tượng cửa sổ, chọn Apps and Features.
  • Chọn Programs and Features.
  • Chọn Turn Windows Features on or off.
  • Đánh dấu vào Hyper-V.

Cài Docker trên Ubuntu

Chạy các lệnh để cài đặt:

sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" sudo apt update apt-cache policy docker-ce sudo apt install docker-ce sudo systemctl status docker 

Thêm user hiện tại vào group docker:

sudo usermod -aG docker $USER 

Logout và login lại để có hiệu lực.

Cài thêm docker-compose nếu cần:

sudo apt install docker-compose 

Cài thêm Docker Machine (nếu cần):

curl -L https://github.com/docker/machine/releases/download/v0.16.1/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && chmod +x /tmp/docker-machine && sudo cp /tmp/docker-machine /usr/local/bin/docker-machine 

Cài thêm VirtualBox (nếu Docker Machine yêu cầu):

sudo apt install virtualbox 

Cài Docker trên CentOS 7 / RHEL 7

sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce sudo usermod -aG docker $(whoami) sudo systemctl enable docker.service sudo systemctl start docker.service 

Cài thêm Docker Compose

sudo yum install epel-release sudo yum install -y python-pip sudo pip install docker-compose sudo yum upgrade python* docker-compose version 

Cài Docker trên CentOS 8 / RHEL 8

sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce # Nếu lỗi, chạy lệnh sau sudo dnf install --nobest docker-ce -y sudo usermod -aG docker $(whoami) sudo systemctl enable docker.service sudo systemctl start docker.service 

Cài thêm Docker Compose

sudo yum install epel-release sudo yum -y install python2-pip sudo pip2 install docker-compose sudo yum upgrade python* docker-compose version 

Khi đã có Docker trên máy, làm việc với Docker để quản lý các thành phần của nó … hầu hết làm việc qua giao diện dòng lệnh CLI của hệ thống: trên macOS/Linux mở terminal để gõ lệnh, trên Windows thì nên dùng PowerShell để chạy các lệnh Docker.


Những lệnh cơ bản trong Docker

# Liệt kê image/container: docker image/container ls # Xóa image/container: docker image/container rm  # Xóa toàn bộ image: docker image rm $(docker images –a –q) # Liệt kê toàn bộ container: docker ps –a # Dừng một container cụ thể: docker stop  # Chạy container từ image và đổi tên container: docker run –name   # Dừng toàn bộ container: docker stop $(docker ps –a –q) # Xóa toàn bộ container: docker rm $(docker ps –a –q) # Xem log container: docker logs  # Build image từ container: docker build -t  # Tạo container chạy ngầm: docker run -d  # Tải image từ Docker Hub: docker pull  # Khởi động container: docker start  

Docker Container

Docker container là một instance của image. Một container chỉ cần kết hợp với các thư viện và thiết lập cần thiết để làm cho ứng dụng hoạt động. Nó là một môi trường đóng gói gọn nhẹ và di động cho một ứng dụng.

Cách chạy một Docker container

Sử dụng lệnh docker run để khởi chạy Docker container trên hệ thống. Ví dụ:

docker run hello-world 

Tạo một instance chạy hệ điều hành CentOS:

docker run -it centos 

Liệt kê danh sách Docker container

docker ps 

Dùng tùy chọn -a để liệt kê tất cả container bao gồm cả container đã bị dừng:

docker ps -a 

Tìm kiếm thông tin chi tiết về container

docker inspect  

Ví dụ:

docker inspect cc5d74cf8250 

Xóa Docker container

docker stop cc5d74cf8250 docker rm cc5d74cf8250 

Docker Image

Image là tệp tin không thay đổi, giống như file ISO được sử dụng để cài hệ điều hành, về cơ bản nó là bản snapshot của container.

Liệt kê danh sách các image

docker images 

Tìm kiếm Docker image

docker search centos 

Download Docker image

docker pull centos 

Xóa Docker image

docker rmi centos 

Dockerfile

Dockerfile là một file được dùng để build một image bằng cách đọc các chỉ dẫn từ file đó. Tên file mặc định được dùng là Dockerfile. Bạn có thể tạo Dockerfile trong thư mục hiện tại với các chỉ dẫn cụ thể và build một image tùy chỉnh theo yêu cầu của bạn.

Cách build image với Dockerfile

docker build -t image_name . 

Sử dụng cờ -f nếu Dockerfile không nằm ở thư mục hiện tại:

docker build -t image_name -f /path/to/Dockerfile . 

Các chỉ thị trong Dockerfile

FROM

Thiết lập image cơ sở cho chỉ dẫn tiếp theo. Đây là chỉ thị bắt buộc và luôn đứng đầu.

FROM ubuntu FROM tecadmin/ubuntu-ssh:16.04 

LABEL

Dùng để tổ chức metadata cho image như tên tác giả, phiên bản, nhà cung cấp,…

LABEL maintainer="seovietnix@gmail.com" LABEL vendor="Example" LABEL com.example.version="1.1.1" 

Gộp nhiều LABEL:

LABEL maintainer="seovietnix@gmail.com" vendor="Example" \ com.example.version="1.1.1" 

RUN

Chạy lệnh trong quá trình build image.

RUN apt-get update RUN apt-get install -y apache2 automake build-essential curl 

Hoặc viết gộp:

RUN apt-get update && apt-get install -y \ automake \ build-essential \ curl 

COPY

Copy file từ máy host vào image.

COPY html/* /var/www/html/ COPY *.conf /etc/apache2/sites-available/ 

WORKDIR

Thiết lập thư mục làm việc cho các chỉ thị như RUN, CMD, ENTRYPOINT,…

WORKDIR /opt 

CMD

Thiết lập lệnh mặc định để chạy khi container khởi động.

CMD ["executable","param1","param2"] CMD ["apachectl", "-D", "FOREGROUND"] 

EXPOSE

Chỉ định cổng mà container sẽ lắng nghe kết nối.

EXPOSE 80 EXPOSE 443 

ENV

Thiết lập biến môi trường cho container.

ENV PATH=$PATH:/usr/local/pgsql/bin/ \ PG_MAJOR=9.6.0 

VOLUME

Tạo mount point để chứa dữ liệu volume chia sẻ giữa host và container.

VOLUME ["/data"] 

How Do the Docker Client and Docker Servers Work?

Docker – Quản lý Ports

Docker container chạy các dịch vụ bên trong nó trên các port cụ thể. Để truy cập vào dịch vụ trong container, cần liên kết port của container với port của Docker host.

Ví dụ 1:

Container Apache chạy trên port 80, liên kết với port 8080 của Docker host:

docker run -it -p 8080:80 apache_image 

Container MySQL chạy trên port 3306, liên kết với port 6603 của Docker host:

docker run -it -p 6603:3066 mysql_image 

Ví dụ 2:

Clone project có sẵn từ GitHub:

git clone https://github.com/tecrahul/dockerfile cd dockerfile 

Build image:

docker build -t apacheimage . 

Chạy container và liên kết port:

docker run -it -p 8080:80 apacheimage 

Truy cập trang web tại địa chỉ IP Docker host trên trình duyệt, ví dụ: http://192.168.1.237:8080

Liên kết nhiều port

docker run -it -p 8080:80,8081:443 image_name 

Liên kết port với địa chỉ IP cụ thể:

docker run -it -p 127.0.0.1:8080:80,127.0.0.1:8081:443 image_name docker run -it -p 192.168.1.111:8080:80,92.168.1.111:8081:443 image_name 

Networking trong Docker

Docker cho phép tạo và quản lý mạng riêng giữa các container.

Liệt kê các mạng:

docker network ls 

Tạo mạng:

docker network create -d bridge my-bridge-network 

Kết nối container với mạng:

docker network connect my-bridge-network centos 

Ngắt kết nối container khỏi mạng:

docker network disconnect my-bridge-network centos 

Kiểm tra chi tiết mạng:

docker network inspect my-bridge-network 

Xóa mạng Docker:

docker network rm my-bridge-network network2 network3 docker network prune 

Ví dụ Docker Network: Kết nối MySQL và phpMyAdmin

Bước 1: Tạo Docker Network

docker network create -d bridge my-bridge-network 

Bước 2: Chạy MySQL Container

docker run --name mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql/mysql-server 

Kết nối container vào network:

docker network connect my-bridge-network mysql 

Kiểm tra địa chỉ IP của container MySQL:

docker inspect mysql | grep "IPAddress" 

Bước 3: Chạy phpMyAdmin Container

Giả sử địa chỉ IP của MySQL container là 172.21.0.2:

docker run --name phpmyadmin -d -e PMA_HOST=172.21.0.2 -p 8080:80 phpmyadmin/phpmyadmin 

Thêm container vào cùng network:

docker network inspect my-bridge-network 

Bước 4: Kiểm tra lại network

Sau khi thêm cả hai container vào network, có thể kiểm tra lại cấu hình:

docker network inspect my-bridge-network 

Bước 5: Cho phép MySQL kết nối đến phpMyAdmin

Mặc định MySQL không cho phép host từ xa kết nối đến. Để bật quyền truy cập:

docker exec -it mysql bash 

Đăng nhập vào MySQL:

mysql -u root -p 

Tạo user kết nối:

GRANT ALL on *.* to 'dbuser'@'127.21.0.3' identified by 'secret'; flush privileges; exit 

Bước 6: Truy cập phpMyAdmin

Mở trình duyệt và truy cập:

http://localhost:8080/ 

Đăng nhập bằng tài khoản dbuser và mật khẩu secret đã tạo ở trên.


Docker Compose là gì?

Docker Compose là một công cụ giúp thiết lập môi trường multi-container. Thay vì chạy từng container riêng lẻ, bạn có thể định nghĩa toàn bộ dịch vụ trong một file docker-compose.yml và chỉ cần một lệnh để build và chạy tất cả container.

Quy trình làm việc với Docker Compose gồm 3 bước:

  1. Định nghĩa môi trường ứng dụng với Dockerfile cho từng dịch vụ.
  2. Tạo file docker-compose.yml để định nghĩa toàn bộ các container.
  3. Chạy lệnh docker-compose up để khởi chạy tất cả container.

Cài đặt Docker Compose

Cài đặt Docker Compose (ví dụ bản 1.16.1):

curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose 

Ví dụ file docker-compose.yml

version: '3' services: db: image: mysql container_name: mysql_db restart: always environment: - MYSQL_ROOT_PASSWORD="secret" web: image: apache build: . container_name: apache_web restart: always ports: - "8080:80" 

Các lệnh Docker Compose thường dùng

# Build image docker-compose build # Tất cả docker-compose build web # Dịch vụ cụ thể # Khởi động container docker-compose up -d # Tất cả docker-compose up -d web # Dịch vụ cụ thể # Dừng và xóa container, network, images docker-compose down # Liệt kê container đang chạy docker-compose ps # Thực thi lệnh trong container docker-compose exec web ls -l # Start container docker-compose start # Tất cả docker-compose start web # Dịch vụ cụ thể # Stop container docker-compose stop # Restart container docker-compose restart # Tạm dừng docker-compose pause # Tiếp tục sau khi pause docker-compose unpause # Xóa container bị dừng docker-compose rm 

Ví dụ về Docker Compose

Bước 1: Tạo cấu trúc thư mục

mkdir dockercompose && cd dockercompose mkdir webapp echo "

It Works

" > webapp/index.html

Bước 2: Tạo Dockerfile cho webapp

Tạo file webapp/Dockerfile với nội dung:

FROM tecadmin/ubuntu-ssh:16.04 RUN apt-get update \ && apt-get install -y apache2 COPY index.html /var/www/html/ WORKDIR /var/www/html CMD ["apachectl", "-D", "FOREGROUND"] EXPOSE 80 

Bước 3: Tạo file docker-compose.yml

Trong thư mục chính:

vim docker-compose.yml 

Thêm nội dung sau:

version: '3' services: db: image: mysql container_name: mysql_db restart: always environment: - MYSQL_ROOT_PASSWORD="secret" web: image: apache build: ./webapp depends_on: - db container_name: apache_web restart: always ports: - "8080:80" 

Bước 4: Build webapp image

docker-compose build 

Kết quả đầu ra cho thấy dịch vụ web được build từ webapp/Dockerfile. Dịch vụ db sử dụng image có sẵn nên không cần build.


Bước 5: Khởi động Docker Compose

docker-compose up -d 

Sau khi chạy, bạn có thể truy cập ứng dụng web qua địa chỉ:

http://localhost:8080/ 

Bước 6: Cập nhật nội dung ứng dụng web

Thêm nội dung mới vào index.html:

echo "Welcome to Docker Compose Tutorial" >> webapp/index.html 

Build lại image và khởi động lại container:

docker-compose build docker-compose up -d 

Kết quả sẽ phản ánh nội dung mới trong trình duyệt khi truy cập lại ứng dụng.


x

Nổi bật

    Mới nhất
    Hướng dẫn sử dụng Docker chi tiết. Cách cài đặt lên macOS, Windows 10, Ubuntu
    • Mặc định
    POWERED BY ONECMS - A PRODUCT OF NEKO