12/08/2018, 17:05

Docker - những kiến thức cơ bản phần 2

Giới thiệu 1. Docker là gì? 2. Sự khác biệt giữa Docker và Hypervisors 3. Sự khác biệt giữa Docker Image và Docker Container 4. Làm thế nào để tạo ra một Docker Image bằng Dockerfile Phần trước: Cơ bản chúng ta đã hiểu về Docker cũng như các khái niệm khi sử dụng Docker, để tiếp tục ...

Giới thiệu

1. Docker là gì?

2. Sự khác biệt giữa Docker và Hypervisors

3. Sự khác biệt giữa Docker Image và Docker Container

4. Làm thế nào để tạo ra một Docker Image bằng Dockerfile

Phần trước: Cơ bản chúng ta đã hiểu về Docker cũng như các khái niệm khi sử dụng Docker, để tiếp tục series 2018 - Cùng nhau học Docker phần này sẽ là những kiến thức về Docker Hub và một số lệnh cũng như so sánh cần thiết trong Docker.

Mục Lục

  1. Docker Hub là gì? Làm thế nào để tạo một Docker Image trên Docker Hub?
  2. Các câu lệnh thường dùng để thao tác với docker image?
  3. Các câu lệnh thường dùng để thao tác với docker container?
  4. Sự khác biệt giữa câu lệnh docker exec và docker run?
  5. Sự khác biệt giữa câu lệnh docker run và docker start?

Nội Dung

5. Docker Hub là gì? Làm thế nào để tạo một Docker Image trên Docker Hub?

Docker Hub là gì?

Docker Hub là dịch vụ đăng ký dựa trên đám mây cho phép bạn liên kết đến các kho lưu trữ mã, tạo hình ảnh(images) và kiểm tra chúng, lưu trữ hình ảnh(images) và liên kết đến Docker Cloud để bạn có thể triển khai các hình ảnh(images) tới máy chủ của mình.

Làm thế nào để tạo một Docker Image trên Docker Hub?

  • Để sử dụng Docker Hub trước tiên cần phải đăng ký 1 tài khoản: https://hub.docker.com/
  • Sau đó tiến hành đăng nhập:

  • Sau khi đăng nhập và vào trang chủ https://hub.docker.com/ thành công. Click vào Create Repository để tạo mới một repository mới (tương tự như github, nếu chưa biết về github tham khảo tại đây: https://viblo.asia/p/mot-vai-cau-hoi-ve-git-GrLZDAgOlk0)

  • Điền các thông tin cần thiết cho repository của bạn:

  • Repository tạo xong sẽ được hiển thị như bên dưới:

  • Sau khi tạo xong một repository, click vào details của repository. Hãy chú ý mục Docker Pull Command , đó cũng là command để push, cũng như pull images cho repository này.

  • Pull repository của mình vừa tạo về, sử dụng lệnh:
$ docker pull vanquynguyen/docker-test

Using default tag: latest
latest: Pulling from vanquynguyen/docker-test
93d292426ea6: Pull complete 
Digest: sha256:8b0106fe7cc7b92ffd78bd61af913a99316f749091a155b72f7a4166da9ce0dc
Status: Downloaded newer image for vanquynguyen/docker-test:latest
  • Kiểm tra xem docker của bạn đã có images pull về từ docker hub chưa:
$ docker images

REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
vanquynguyen/docker-test          latest              827277d46f0a        23 hours ago        93.6MB
  • Tạo thử một Dockerfile và build 1 images (có thể tham khảo phần 1: https://viblo.asia/p/docker-nhung-kien-thuc-co-ban-phan-1-bJzKmM1kK9N)
$ docker ps -a

CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS                      PORTS               NAMES
2b04f88c9f46        73dfa9b63cd8                      "/script.sh"             2 minutes ago       Exited (0) 2 minutes ago                        vanquynguyen
f44562880276        4c26b3b58ce1                      "script.sh"              3 minutes ago       Created                                         vanquy

  • Commit lại container của image cần push lên
$ docker commit 2b04f88c9f46
  • Sau khi commit xong container, tiến hành push lại lên repository của mình.
$ docker push vanquynguyen/docker-test

Done!

6. Các câu lệnh thường dùng để thao tác với docker image?

Cú pháp:

$ docker images [OPTIONS] [REPOSITORY[:TAG]]

Options:

  • --all , -a: Hiển thị tất cả các images (mặc định ẩn các intermediate images)
  • --digests: Hiển thị các digests
  • --filter , -f: Lọc dựa trên các điều kiện được cung cấp (dangling=(true|false), (label=<key> or label=<key>=<value>), ( before=(<image-name>[:tag]|<image-id>|image@digest)), (since=(<image-name>[:tag]|<image-id>|image@digest)), (reference=(pattern of an image reference)))
  • --format:
  • --no-trunc:
  • --quiet , -q: Chỉ hiển thị số ID của các images

Ví dụ:

  • Hiển thị tất cả các images
$ docker images -a

REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
vanquynguyen/docker-test          latest              827277d46f0a        4 hours ago         93.6MB
dockercompose01_product-service   latest              de81bdc72e0f        30 hours ago        702MB
dockercompose02_web               latest              edcbeb18ae03        30 hours ago        93.2MB
python                            3.4-alpine          5c72717ec319        2 weeks ago         82.8MB
redis                             alpine              d3117424aaee        2 weeks ago         27.1MB
ubuntu                            latest              0458a4468cbc        3 weeks ago         112MB
alpine                            latest              3fd9065eaf02        6 weeks ago         4.15MB
  • Hiển thị tất cả các digests:
$ docker images --digests

REPOSITORY                        TAG                 DIGEST                                                                    IMAGE ID     CREATED             SIZE
vanquynguyen/docker-test          latest              sha256:8b0106fe7cc7b92ffd78bd61af913a99316f749091a155b72f7a4166da9ce0dc   827277d46f0a     4 hours ago         93.6MB
dockercompose01_product-service   latest              <none>                                                                    de81bdc72e0f     30 hours ago        702MB
dockercompose02_web               latest              <none>                                                                    edcbeb18ae03     30 hours ago        93.2MB
python                            3.4-alpine          sha256:fe436cb066394d81cf49448a04dec7c765082445a500bc44f1ae5e8a455793bd   5c72717ec319     2 weeks ago         82.8MB
redis                             alpine              sha256:95a7b91d1e96fa2e4579f439137e5642d3c58d5f8d063d6cea09426d56a22ec0   d3117424aaee     2 weeks ago         27.1MB
ubuntu                            latest              sha256:e27e9d7f7f28d67aa9e2d7540bdc2b33254b452ee8e60f388875e5b7d9b2b696   0458a4468cbc     3 weeks ago         112MB
alpine                            latest              sha256:7df6db5aa61ae9480f52f0b3a06a140ab98d427f86d8d5de0bedab9b8df6b1c0   3fd9065eaf02     6 weeks ago         4.15MB
  • Lọc dựa trên các điều kiện được cung cấp: ví dụ lọc các image đang được running
$ docker images --filter "dangling=false"

REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
dockercompose01_product-service   latest              a6d6dba4ebbc        6 minutes ago       702MB
vanquynguyen/docker-test          latest              827277d46f0a        24 hours ago        93.6MB
python                            3-onbuild           f17a8f3a7ef9        5 days ago          692MB
php                               apache              08685253e459        6 days ago          377MB
  • Chỉ hiển thị số ID của các images:
$ docker images -q

827277d46f0a
de81bdc72e0f
edcbeb18ae03
5c72717ec319
d3117424aaee
0458a4468cbc
3fd9065eaf02

7. Các câu lệnh thường dùng để thao tác với docker container?

Cú pháp:

$ docker container COMMAND

Command:

  • rename: Đổi tên một container
  • restart: Khởi động lại một hoặc nhiều containers
  • rm: Loại bỏ một hoặc nhiều containers
  • run: Chạy một lênh trong một container mới
  • start: Khởi động một hoặc nhiều containers đã bị dừng lại trước đó
  • stop: Dừng lại một hoặc nhiều container đang chạy
  • top: Display the running processes of a container
  • update: Update configuration of one or more containers
  • wait: Block until one or more containers stop, then print their exit codes

Tham khảo thêm tại đây: https://docs.docker.com/engine/reference/commandline/container

8. Sự khác biệt giữa câu lệnh docker exec và docker run?

  • docker exec: Vận hành container docker hiện có hay đã tồn tại
  • docker run: Thao tác đến các images đã tồn tại hoặc có thể truy xuất từ localhost, mỗi lần chạy command sẽ tạo ra một container mới tương ứng

Tóm lại:" nói một cách đơn giản, "docker run" có mục tiêu là các hình ảnh giáp của container và "docker exec" đang nhắm mục tiêu đến các container kết nối trước. Sử dụng các nguồn bên trong image hoặc container có ý nghĩa khác nhau. Khi sử dụng "docker run", một container tạm thời được tạo và dừng lại (không chấm dứt) sau khi lệnh đã kết thúc".

9. Sự khác biệt giữa câu lệnh docker run và docker start?

  • docker run: Thao tác đến các images đã tồn tại hoặc có thể truy xuất từ localhost, mỗi lần chạy command sẽ tạo ra một container mới tương ứng
  • docker start: Bắt đầu lại container và khởi động cho container chạy cho đến lần xử lý dừng tiếp theo

Lời Kết

Trong phần 2 này cơ bản chúng ta đã hiểu về docker hub (create, push, pull images) cũng như biết thêm các lệnh thường dùng để thao tác docker image, docker container, phân biệt được câu lệnh docker exec, docker run và docker start...Mong được sự góp ý từ mọi người, hãy quan tâm và theo dõi phần sau cũng như series 2018 - Cùng nhau học Docker nhé             </div>
            
            <div class=

0