Docker - Quick start

Learn Docker

1. Workflow với docker

Step 1: Pull image về máy với docker pull. Tương tự như file cài đặt.

Step 2: Khởi tạo và chạy một container với image được kéo về ở bước 1.

Step 3: Cài đặt tools trong container và làm các tác vụ cần thiết với container này. Có thể stop container, exit container …

Step 4: Commit để lưu thành 1 images mới chứa bộ tools đã được cài đặt cũng như tất cả dữ liệu khi thực hiện các tác vụ với docker commit. Images này có thể dùng ở các máy khác nhau với toàn bộ tools cũng như dữ liệu tại thời điểm thực hiện commit.

Một container có thể hiểu như là một phần mềm đã được cài đặt từ bộ cài image. Có một điều khác biệt căn bản ở so sánh trên là: một bộ cài chỉ cài được duy nhất 1 phần mềm trên 1 máy tính, nhưng với docker, một image có thể tạo được không giới hạn các container trên cùng một máy tính.

Một container luôn có hệ điều hành giống như một máy ảo, tuy nhiên nó có thể sử dụng được toàn bộ sức mạnh phần cứng của host, không phải phân chia core hay ram như một máy ảo.

2. Các trạng thái của một container

Trạng thái của một container có thể được quan sát với câu lệnh docker ps -a

    $docker ps -a

    CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS                    PORTS     NAMES
    71e7c47685f2   bi             "/bin/bash"   48 minutes ago   Up 48 minutes                       bo
    6a04fd311401   63878e911300   "/bin/bash"   4 hours ago      Up 4 hours                          kind_lamport
    4fc3ae93bff1   63878e911300   "/bin/bash"   4 hours ago      Exited (1) 4 hours ago              compassionate_aryabhata
    b58f67683814   centos         "-it"         3 months ago     Created                             centos

3. Docker commands

———–

a. $docker run

docker run tạo một container mới dựa trên image được cung cấp. Container mới này được định danh bởi container namecontainter id.

Example 1

docker run --name=bi -it ubuntu:20.04 /bin/bash

Giải nghĩa: docker run khởi chạy một container với các cờ sau

Khi ta chạy câu lệnh trên: Docker sẽ tạo một container mới có tên là bi từ image ubuntu:20.04 và cho phép bạn tương tác với terminal bên trong container’s bash shell

Example 2

docker run --name=bi -it --env="DISPLAY" --net="host" ubuntu:20.04 /bin/bash

Giải nghĩa: docker run khởi chạy một container với các cờ sau

Khi chạy câu lệnh trên: Docker sẽ tạo một container mới có tên là bi từ image ubuntu:20.04 và cho phép chạy GUI từ container, cũng như cho phép tương tác với bash shell bên trong container.

———–

b. $docker start

Docker start được sử dụng để khởi chạy một container đang trong trạng thái exited.

docker start <ten_container>

Có thể sử dụng container name hoặc container ID

CONTAINER ID   IMAGE          COMMAND       CREATED       STATUS                     PORTS     NAMES
71e7c47685f2   bi             "/bin/bash"   2 weeks ago   Exited (2) 4 seconds ago             bo
6a04fd311401   63878e911300   "/bin/bash"   2 weeks ago   Exited (129) 2 weeks ago             kind_lamport

Chạy container bo bằng cách:

$ docker start bo

———–

c. $docker attach

Sau khi khởi chạy một container, truy cập vào môi trường của container bằng câu lệnh sau:

docker attach <ten container>

Có thể sử dụng container name hoặc container ID

Truy cập môi trường container bo bằng cách:

$docker attach bo

———–

d. $docker ps

docker ps được sử dụng với các cờ khác nhau và có chức năng khác nhau như bảng mô tả sau đây

docker ps liệt kê active containers.

    $docker ps

    CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS          PORTS     NAMES
    71e7c47685f2   bi             "/bin/bash"   43 minutes ago   Up 43 minutes             bo
    6a04fd311401   63878e911300   "/bin/bash"   4 hours ago      Up 4 hours                kind_lamport

docker ps -a: Liệt kê tất cả các container đã tồn tại trên hệ thống và trạng thái của nó

    $docker ps -a

    CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS                    PORTS     NAMES
    71e7c47685f2   bi             "/bin/bash"   48 minutes ago   Up 48 minutes                       bo
    6a04fd311401   63878e911300   "/bin/bash"   4 hours ago      Up 4 hours                          kind_lamport
    4fc3ae93bff1   63878e911300   "/bin/bash"   4 hours ago      Exited (1) 4 hours ago              compassionate_aryabhata
    787633e9ba6b   b1aca4e283c3   "/bin/bash"   4 hours ago      Exited (1) 4 hours ago              friendly_lalande
    da5542d0afe9   b1aca4e283c3   "/bin/bash"   4 hours ago      Exited (0) 4 hours ago              stoic_sammet
    ddee01f20648   ubuntu:20.04   "/bin/bash"   4 hours ago      Exited (0) 4 hours ago              hopeful_galileo
    ffd04bafba30   ubuntu:20.04   "/bin/bash"   4 hours ago      Exited (1) 4 hours ago              sad_pike
    c9b722c07457   ubuntu:20.04   "/bin/bash"   4 hours ago      Exited (0) 4 hours ago              vigorous_swirles
    a7f42806d870   ubuntu         "/bin/bash"   5 hours ago      Exited (0) 5 hours ago              fervent_solomon
    a0c13546b00c   1c5c8d0b973a   "/bin/bash"   5 hours ago      Exited (0) 5 hours ago              blissful_easley
    191e06db8539   ubuntu:20.04   "/bin/bash"   5 hours ago      Exited (0) 5 hours ago              festive_shtern
    3212c599efc1   centos         "/bin/bash"   3 months ago     Exited (0) 3 months ago             catapult
    23716beeda73   centos         "/bin/bash"   3 months ago     Exited (0) 3 months ago             kind_hertz
    e8ddaa72a7ec   centos         "/bin/bash"   3 months ago     Exited (0) 3 months ago             centos7
    b58f67683814   centos         "-it"         3 months ago     Created                             centos
    78409755de36   feb5d9fea6a5   "/hello"      3 months ago     Exited (0) 3 months ago             boring_shaw
    c5e156ba746f   feb5d9fea6a5   "/hello"      3 months ago     Exited (0) 3 months ago             eloquent_merkle

docker ps -l: Liệt kê container chạy ở lần cuối cùng

    $docker ps -l

    CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
    71e7c47685f2   bi        "/bin/bash"   49 minutes ago   Up 49 minutes             bo

———–

e. $docker rm

Như đã thấy ở danh sách docker ps -a, có rất nhiều containers không được dùng mà vẫn tồn tại trên hệ thống. Ta có thể loại bỏ chúng bằng câu lệnh docker rm

docker rm eloquent_merkle

Tương đương với

docker rm c5e156ba746f

———–

f. $docker images

Liệt kê tất cả các images có trên hệ thống

$docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
bi           latest    9b486bf052eb   6 hours ago   1.14GB
ubuntu       latest    08d22c0ceb15   3 weeks ago   77.8MB
ubuntu       20.04     1c5c8d0b973a   3 weeks ago   72.8MB

———–

g. $docker rmi

Để gỡ docker images, trước tiên phải gỡ bỏ toàn bộ các container được tạo bởi image cần xóa bằng câu lệnh docker rm <container-name>. Sau đó, dùng câu lệnh docker rmi

docker rmi 08d22c0ceb15