Docker là gì?
Bài đăng này đã không được cập nhật trong 5 năm
Docker là một open platform cung cấp cho người sử dụng những công cụ và service để người sử dụng có thể đóng gói và chạy chương trình của mình trên các môi trường khác nhau một cách nhanh nhất.
Docker là gì và để làm gì?
Docker là một nền tảng để cung cấp cách để building, deploying và running ứng dụng một cách dễ dàng trên nền tảng ảo hóa. Có nhiều công nghệ Container khác như Solaris Zones, BSD jails, và LXC. Nhưng tại sao Docker lại phát triển, phổ biến nhanh chóng? Đây là những nguyên nhân: Ease of use, Speed, DockerHub, Modularity and Scalability.
Docker có nhiều lợi ích mà bạn nên sử dụng:
- Tốn ít dung lượng bộ nhớ, tài nguyên so với ảo hoá hệ điều hành
- Cài đặt dễ dàng, nhanh, chính xác so với cấu hình thủ công
- Chia sẻ được file cấu hình: Dockerfile, docker-compose.yml
Để cài đặt, bạn xem hướng dẫn tại đây: Install Docker và thực hiện một số lệnh như sau để kiểm tra xem đã có trên máy chưa:
Kiểm tra version của docker:
docker version
Thông tin về docker:
docker info
Tạo thử một container:
docker run hello-world
Các lệnh Linux đủ dùng cho Docker
Một số lệnh xem thông số hệ thống:
Lệnh | Ý nghĩa |
---|---|
uname |
Hiển thị thông tin hệ thống |
lshw |
Hiển thị thông tin phần cứng |
clear |
Clear màn hình terminal |
htop |
Thấy bộ nhớ sử dụng, bộ nhớ trống |
ip addr show |
Kiểm tra địa chỉ ip của container |
whoami |
Kiểm trang xem đang là đối tượng người dùng gì |
File/ Folder
Lệnh | Ý nghĩa |
---|---|
pwd |
Hiển thị thư mục hiện thời |
ls |
Hiển thị các thư mục và file có trong thư mục hiện tại |
cat |
Xem nội dung của file |
mkdir |
Tạo thư mục mới |
rm |
Remove |
touch |
Tạo file |
cp |
Copy |
tree |
Xem cấu trúc thư mục |
mv |
Move |
echo |
Ghi vào file |
locate |
Tìm file |
Thế nào là Docker image, Docker container.
Để dễ tưởng tượng, bạn hãy coi Image như là một class, chứa các phương thức và thuộc tính. Còn container như một object của class (instance).
Còn hiểu theo kiểu của Docker thì image là một package chứa tất tần tật những thứ cần thiết cho ứng dụng như thư viện, biến môi trường, mã nguồn, file cấu hình…Chỉ cần run
image một cái là sẽ build
ra container tương ứng phục vụ cho ứng dụng của bạn, mọi hoạt động trong container này sẽ không ảnh hưởng đến container khác, và sau khi sử dụng nếu không cần thiết có thể xóa bỏ. Những demo dưới đấy
Để pull một image từ registry:
docker pull alpine:latest
Tạo một container từ image
docker run -it -d --name demo-alpine --rm alpine:latest /bin/ash
Trong đó:
run
để tạo một container-it
để gõ lệnh vào trình terminal-d
báo rằng container này sẽ chạy ngầm--name demo-alpine
tên định danh của container--rm
container sẽ xoá khi kết thúcalpine
tên của imagelatest
tag của image/bin/ash
trình giống tương tự bash shell
Phân biệt giữa container và image
Container như một stack, ở dưới cùng của stack chính là lõi (kernel), là bên trên nó là các image layer và các image layer read-only, tức là bạn không thể xử lý, chỉnh sửa ở các image layer này. Khi bạn tạo ra một container nghĩa là bạn sẽ tạo ra một image layer ở trên cùng được gọi là writable, tức là bạn có thể thao tác trên lớp này. Và các lớp này sẽ references với nhau theo thứ tự từ trên xuống dưới.
Thông thường thì các container sẽ được chạy ngầm và nếu bạn muốn truy cập vào terminal của nó thì, hoặc logs ra quá trình chạy để xem lỗi.
docker run -d --name web -p 80:80 nginx:alpine
Trong đó:
-p 80:80
là gắn cổng 80 của container sang cổng 80 của local
Muốn vào terminal của container vừa tạo:
docker exec -it web /bin/ash
Muốn logs ra quá trình chạy:
docker logs web
docker logs --tail
Kiểm tra sự thay đổi từ khi tạo ra container:
docker diff web
Kiểm tra kích thước của file:
docker ps --format '{{Name}} {{Size}}'
Tìm kiếm image:
docker images | grep alpine
Kiểm tra lịch sử của image:
docker history image_id
Kiểm tra thuộc tính của image:
docker image inspect image_id
Copy một file từ local sang container và ngược lại:
docker cp index.html web:/usr/share/nginx/html/
Ánh xạ thư mục host và container
docker run -d --name web -p 80:80 -v ${pwd}:/user/share/nginx/html nginx:alpine
Đóng gói Docker image
Để đóng gói một container thành một image:
docker commit -a 'thaycacac' -m 'new image' al thaycacac/alpinenew:v1
Docker file
Tỷ dụ nếu bạn muốn dùng script để tạo ra một dockerfile, từ dockerfile này sẽ tạo ra một docker images. Dockerfile rất là nhỏ và nên biết bash script để chạy thử trước khi viết dockerfile. Ví dụ viết một dockerfile
FROM apline:latest
LABEL maintainer="Thaycacac<thaycacac@gmail.com>"
RUN apk update\
&& apk add vim htop...
ENTRYPOINT ["fish"] //fish sẽ khởi động ngay khi container được tạo
Một số lệnh trong dockerfile
FROM
xây dựng container kế thừa từ Docker image khác, ví dụ:FROM scratch // là một image rỗng ADD rootfs.tar.xz // thêm file rootfs.tar.xz CMD ["/bin/sh"] // chạy lệnh này
LABEL
,MAINTAINER
thông tin người bảo trì dockerfileCOPY
copy file từ host vào imageADD
tải file từ internet, ví dụ:FROM alpine:latest ADD https://fishshell.com/file/2.7.0/fish-2.7.0.tar.gz/ RUN tar -xzvf /fish-2.7.0.tar.gz && rm /fish-2.7.0.tar.gz
RUN
- Chỉ chạy khi docker build
- CÓ thể tạo ra read only layer trong image
- Dockerfile có thể chưa nhiều RUN
- Để tối ưu nên gộp lại thành một lệnh
CMD
- Chạy khi docker run
- Chỉ tác động đến writable layer của container
- Dockerfile chỉ có một lệnh CMD
- 1 CMD có thể gộp nhiều lệnh nhỏ
- CMD có thể bị thay thế (overwrite) khi chạy docker run
ENTRYPOINT
- Chạy khi docker run
- Không thể overwrite bằng lệnh mới, mà chỉ customize, thêm tham số
Docker compost
Là file .yml (thường là docker-compose.yml) chứa cấu hình của container, hiểu theo kiểu căn chung cư của mình thì nó như bản vẽ thiết kế , gồm chi tiết các vật dụng cần thiết, sơ đồ đường điện, nước. giúp cho căn nhà hoạt động đúng với chức năng và mong muốn của người dùng.
All rights reserved