Giới thiệu
Image là thành phần quan trọng của Docker. Các lệnh trong Docker Engine được thực hiện thông qua CLI, nó như là 1 API tương tác các câu lệnh nhập của chúng ta từ bàn phím.
Làm việc với Image chúng ta có các lệnh thao tác như: xem, pull, push, save, load, delete. Bài viết này chúng ta sẽ thực hành qua các lệnh thao tác đó.
Yêu cầu
- Đã có kiến thức cơ bản về Linux
- Đã có kiến thức cơ bản về Git
- Terminal đến máy chủ Ubuntu sẵn sàng nhập lệnh
- Đã cài đặt Docker ở bài trước
Nội dung
1. Cấu trúc và quy ước
Cấu trúc của một Image:
Image name: tên củaimageImage tag:tagcủa mộtimageImage digest: chuỗi ký tự định danh cho mộtimage, giá trị này là duy nhất cho mộtimage
Image có thể viết ở các dạng sau:
Imagekhôngtagvàdigest:<image_name>, ví dụ:mysqlImagebao gồmtag:<image_name>:<image_tag>, ví dụ:mysql:5.7Imagebao gồmdigest:<image_name>@<image_digest>, ví dụ:mysql@sha256:aaa1374f1e6c24d73e9dfa8f2cdae81c8054e6d1d80c32da883a9050258b6e83
Chúng ta sẽ quy ước từ bài lab này tới các nội dung sau của khóa học, <image> được hiểu là một image, sẽ có 2 thành phần <image_name> và <image_tag / <image_digest> .
Câu lệnh sau đây sẽ đưa ra thông tin về cách sử dụng của lệnh docker image để tương tác và quản lý image:
docker image --help
1. Login docker hub
Đầu tiên, chúng ta sẽ vào https://hub.docker.com/ để tạo tài khoản.
Sau đó chúng ta truy cập tới máy chủ Ubuntu và nhập lệnh để đăng nhập:
docker login
2. Liệt kê danh sách image
Câu lệnh liệt kê các image có trên Docker Host:
docker image ls
Hoặc câu lệnh rút gọn:
docker images
3. Pull image
Cú pháp:
docker image pull <image>
Hoặc, cú pháp rút gọn:
docker pull <image>
Bạn sẽ tải về những image đầu tiền:
docker pull mysql:8.0
Lưu ý:
- Khi không chỉ định image_tag, image sẽ được
Dockermặc định gán chotag latestđể tìm kiếm và tải về. - Với
Docker, có thể bỏ qua phần chỉ địnhhostở phía trước củaimage. Nhưng nếu tải về từ cácDocker Registrykhác, bạn sẽ cần chỉ định rõ rànghostcủaregistryđó ở phía trước củaimage_name, hay nói cách khác,image_namebao gồm cả phầnhostcủaregistry.
Bạn hãy tìm kiếm các image liên quan tới các môi trường chạy ứng dụng và tải chúng về Docker Host, hãy thử cả trường hợp không chỉ định tag và chỉ định tag (tùy ý) cho image tải về, tối thiểu tải về 5 image:
- openjdk
- node
- python
4. Tag image
Tạo mới image_tag cho một image, đây là quá trình đặt tên mới(image_name, image_tag) cho một image, tuy nhiên image sẽ không thay đổi về digest string, bởi đây là giá trị cố định, giống như UserID của user trong Linux, mã căn cước của công dân Việt Nam.
# đầy đủ
docker image tag <image_name_src>:<image_tag_src> <image_name_dst>:<image_tag_dst>
# rút gọn:
docker tag <image_name_src>:<image_tag_src> <image_name_dst>:<image_tag_dst>
Ví dụ:
docker image tag mysql:8.0 my-mysql:v1
5. Push image
Cú pháp:
docker image push <image>
Cú pháp rút gọn:
docker push <image>
Hãy thử push image bất kỳ:
docker push mysql:5.7
docker push my-mysql:v1
NOTE:
Câu lệnh push này sẽ không được thực hiện thành công, vì bạn không có quyền cho những image và repository này. Bạn chỉ có quyền cho repository cá nhân của mình trên Docker Hub, bởi vậy chúng ta cần 1 bước trước khi thực hiện push image tới tài khoản cá nhân.
B1. Đánh tag cho image về repo cá nhân, ở đây image mới sẽ có dạng <username>/<image_name>:<image_tag>
docker tag mysql:5.7 <username>/my-mysql:v1
# ví dụ: $ docker tag mysql:5.7 orezfu/my-mysql:v1
B2. Push image lên Docker Hub như thông thường
docker push my-mysql:v1
6. Save image
Lưu trữ image về dạng filesystem
docker image save <image1> [<image2> ...] -o <file_name>
Ví dụ:
docker image save nginx:1.23.4 -o nginx.tar
docker image save mysql:5.7 -o database.tar
7. Load image
Đảo ngược của quá trình save image, tải file image vào Docker Host từ filesystem trên Linux
docker image load -i <file_name>
Ví dụ:
docker image load -i nginx.tar
docker image load -i database.tar
8. Delete image
Để xóa một image sẽ sử dụng câu lệnh sau:
docker image rm <image>
Hoặc, rút gọn câu lệnh:
docker rmi <image>
Ví dụ:
docker image rm nginx:1.23.4
docker rmi mysql:5.7
- Có một điểm cần lưu ý, nếu có nhiều image cùng trỏ tới cùng một image_digest, tức là image đó có nhiều tag, câu lệnh xóa image sẽ chỉ xóa tag - tức là xóa tên của image, tới khi xóa image với tag cuối cùng trỏ tới digest thì mới thực sự xóa image khỏi Docker Host. Ví dụ, có 2 image nginx:v1 và nginx:v1.2 được tag từ nginx:v1, 2 image này sẽ có cùng digest sha256:adfjiser..., khi bạn xóa image nginx:v1 , image thực sự vẫn tồn tại trên Docker Host, tuy nhiên bạn chỉ thấy còn tồn tại nginx:v1.2 , tới khi bạn xóa nginx:v1.2 thì image sẽ thực sự bị xóa khỏi Docker Host.
Tác giả: Đỗ Thiên Giang
Chú ý: Tất cả các bài viết trên TEDU.COM.VN đều thuộc bản quyền TEDU, yêu cầu dẫn nguồn khi trích lại trên website khác.