Tác giả: Quân Phạm
H2 Tại sao chúng ta cần Docker?
Việc cài đặt và triển khai một ứng dụng trên một hoặc nhiều máy chủ thường rất phức tạp. Từ việc cài đặt công cụ và môi trường phù hợp cho ứng dụng đến việc đảm bảo sự đồng nhất giữa các môi trường trên các máy chủ khác nhau. Điều này đã thúc đẩy sự ra đời của Docker như một giải pháp cho vấn đề này.
H2 Docker là gì?
Docker là một nền tảng cho các nhà phát triển và quản trị hệ thống để triển khai và chạy ứng dụng với các container. Nó cho phép tạo môi trường độc lập và cô lập để triển khai và phát triển ứng dụng. Môi trường này được gọi là container. Khi cần triển khai ứng dụng trên bất kỳ máy chủ nào, bạn chỉ cần chạy container Docker và ứng dụng của bạn sẽ được khởi chạy ngay lập tức.
H2 Lợi ích của Docker
- Docker khởi động và dừng container chỉ trong vài giây, nhanh hơn so với các máy ảo truyền thống.
- 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à xoá nhanh hơn so với máy ảo.
- Thiết lập môi trường làm việc trở nên dễ dàng. Chỉ cần cấu hình một lần duy nhất và không bao giờ phải cài đặt lại các phụ thuộc. Nếu bạn thay đổi máy hoặc có người mới tham gia vào dự án, bạn chỉ cần chia sẻ cấu hình đó cho họ.
- Nó giữ cho không gian làm việc sạch sẽ hơn bằng cách loại bỏ ảnh hưởng đến các phần khác.
H2 Cài đặt
Link tải: tại đây
Chọn phiên bản phù hợp với hệ điều hành của bạn và làm theo hướng dẫn tương ứng. Đối với Linux, bạn cần tải và cài đặt theo hướng dẫn. Đối với Windows và MacOS, bạn chỉ cần tải và cài đặt như mọi ứng dụng khác.
Sau khi cài đặt xong, để kiểm tra xem bạn đã cài đặt thành công hay chưa, làm theo các bước sau:
- Mở command line:
$ docker version
$ docker info
$ docker run hello-world
H2 Một số khái niệm
- Docker Client: Đây là cách bạn tương tác với Docker thông qua các lệnh trong terminal. Docker Client sử dụng API để gửi lệnh tới Docker Daemon.
- Docker Daemon: Đây là máy chủ Docker chịu trách nhiệm xử lý các yêu cầu từ Docker API. Nó quản lý các image, container, network và volume.
- Docker Volumes: Đây là cách tốt nhất để lưu trữ dữ liệu liên tục cho việc sử dụng và tạo ứng dụng.
- Docker Registry: Đây là nơi lưu trữ các Docker Images. Bạn có thể sử dụng registry riêng của mình hoặc sử dụng registry của một nhà cung cấp như AWS, Google Cloud, Microsoft Azure.
- Docker Hub: Đây là Registry lớn nhất của Docker Images. Bạn có thể tìm thấy và lưu trữ các image của riêng bạn trên Docker Hub miễn phí.
- Docker Repository: Đây là tập hợp các Docker Images cùng tên nhưng khác tags. Ví dụ:
golang:1.11-alpine
. - Docker Networking: Cho phép kết nối các container với nhau trên cùng một máy chủ hoặc trên nhiều máy chủ.
- Docker Compose: Đây là công cụ giúp bạn chạy ứng dụng với nhiều Docker containers một cách dễ dàng hơn. Docker Compose cho phép bạn cấu hình các lệnh trong file docker-compose.yml để sử dụng lại.
- Docker Swarm: Được sử dụng để triển khai container.
- Docker Services: Là các containers trong môi trường sản xuất. Mỗi service chỉ chạy một image nhưng định nghĩa cách thức chạy image – bao gồm cổng sử dụng, số lượng bản sao container cần chạy để đảm bảo hiệu năng và sẵn sàng ngay lập tức.
H2 Dockerfile
-
Dockerfile là một file cấu hình cho Docker để xây dựng image. Nó sử dụng một image cơ bản để xây dựng layer image ban đầu. Một số image cơ bản là python, ubuntu và alpine. Sau đó, nếu có các layer bổ sung, chúng sẽ được xếp chồng lên layer cơ bản. Cuối cùng, một layer mỏng có thể được xếp chồng lên các layer khác phía trên.
-
Các cấu hình thường sử dụng trong Dockerfile:
-
FROM: Xác định image gốc, ví dụ: python, ubuntu, alpine…
-
LABEL: Cung cấp thông tin metadata cho image, ví dụ: thông tin người duy trì. Để xem các label của images, sử dụng lệnh docker inspect.
-
ENV: Thiết lập biến môi trường.
-
RUN: Thực hiện một lệnh khi xây dựng image. Thường được sử dụng để cài đặt các gói vào container.
-
COPY: Sao chép các file và thư mục vào container.
-
ADD: Sao chép các file và thư mục vào container.
-
CMD: Cung cấp một lệnh và các tham số để container thực thi. Các tham số có thể được ghi đè và chỉ có một lệnh CMD được sử dụng.
-
WORKDIR: Thiết lập thư mục làm việc cho các chỉ thị khác như RUN, CMD, ENTRYPOINT, COPY, ADD, …
-
ARG: Định nghĩa giá trị biến được sử dụng trong quá trình xây dựng image.
-
ENTRYPOINT: Xác định lệnh và các tham số để một container thực thi.
-
EXPOSE: Khai báo cổng lắng nghe của image.
-
VOLUME: Tạo một điểm gắn thư mục để truy cập và lưu trữ dữ liệu.
H2 Tạo Demo
Tạo file Dockerfile
FROM golang:1.11 AS builder
WORKDIR /go/src/docker-demo
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o docker-demo .
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /go/src/docker-demo .
CMD ["./docker-demo"]
Tạo file main.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Học Docker")
}
Tiến hành xây dựng file Dockerfile
$ docker build .
Chạy container
$ docker run 4cc010d9d657
Kết quả in ra dòng chữ “Học Docker” đã được cài đặt trong file main.go.
H2 Các lệnh cơ bản trong Docker
- Liệt kê image/container:
$ docker image/container ls
- Xóa image/container cụ thể:
$ docker image/container rm <tên image/container>
- Xóa tất cả các image hiện có:
$ docker image rm $(docker images -a -q)
- Liệt kê tất cả các container hiện có:
$ docker ps -a
- Dừng container cụ thể:
$ docker stop <tên container>
- Chạy container từ image và đặt tên container:
$ docker run --name <tên container> <tên image>
- Dừng tất cả các container:
$ docker stop $(docker ps -a -q)
- Xóa tất cả các container hiện có:
$ docker rm $(docker ps -a -q)
- Hiển thị log của container:
$ docker logs <tên container>
- Build image từ container:
$ docker build -t <tên container> .
- Tạo một container chạy ngầm:
$ docker run -d <tên image>
- Tải một image từ Docker Hub:
$ docker pull <tên image>
- Khởi chạy một container:
$ docker start <tên container>
Bài viết gốc được đăng tải tại Medium