Cài đặt và sử dụng Docker

Như trong bài viết trước tôi có giới thiệu qua về Docker. Nếu bạn chưa biết khái niệm về Docker thì hãy đọc qua bài viết đó trước. Trong phần này chúng ta sẽ cùng tìm hiểu về cách cài đặt và sử dụng Docker thông qua ví dụ đơn giản.

Bạn có thể xem hướng dẫn chi tiết về cách cài đặt Docker tại đây.

Nếu bạn đang chạy Docker trên Linux, bạn cần chạy toàn bộ câu lệnh với quyền root hoặc thêm user của bạn vào docker group và đăng nhập lại

sudo usermod -aG docker $(whoami)`

Thuật ngữ

  • Container – Một instance đang chạy, đóng gói các phần mềm được yêu cầu. Container luôn được tạo từ một Image. Các Container có thể tìm thấy các Port và Volume để có thể tương tác với Container khác và / hoặc với thế giới bên ngoài. Container có thể dễ dàng bị tắt hoặc xoá đi và được tạo lại trong khoảng thời gian rất ngắn. Container không nắm giữ state.
  • Image – thành phần cơ bản cho tất cả Container. Khi bạn tạo một Image, tất cả các bước sẽ được cache lại và có thể được sử dụng lại. Tuỳ thuộc vào Image, nó có thể mất thời gian để build. Mặt khác, Container có thể được start từ Image ngay lập tức.
  • Port – Nguồn gốc của nó là một UDP/TCP port. Hiểu một cách đơn giản, chúng ta có thể hình dùng rằng Port được dùng để kết nối với bên ngoài (có thể truy cập từ hệ điều hành máy chủ) hoặc kết nối với các Container khác – ví dụ như là nó chỉ có thể được truy cập từ các Container khác và ẩn với bên ngoài.
  • Volume – Có thể hiểu nó như một thư mục được chia sẻ. Volume được thiết lập khi một Container được tạo. Volume được tạo để lưu trữ dữ liệu, độc lập với vòng đời của Container. Registry – Server mà lưu trữ các Image của Docker. Nó có thể được so sánh với Github – Bạn có thể lấy một Image từ Registry để triển khai dưới local hoặc đẩy một Image đã được build vào Registry
  • Docker Hub –  Registry với giao diện Web được cung cấp bởi Docker Inc. Nó chứa nhiều Docker Image với phần mềm khác nhau. Docker Hub là nguồn Docker Image chính thức được tạo bởi Team Docker hoặc hợp tác với các nhà sản xuất phần mềm chính thống. Những thông tin này luôn có sẵn với các user đăng nhập. Có cả 2 dạng account miễn phí và trả tiền. Bạn có thể có một private Image trên một account và không giới hạn public Image cho account miến phí. Ở đây cũng có một Docker Store – một dịch vụ rất giống với Docker Hub. Nó là một Markerplace với các rating, review…

Hello world

Nào hãy cùng chạy Container đầu tiên của bạn

docker run ubuntu /bin/echo 'Hello world'

Kết quả

Unable to find image 'ubuntu:latest' locally  
latest: Pulling from library/ubuntu  
6b98dfc16071: Pull complete  
4001a1209541: Pull complete  
6319fc68c576: Pull complete  
b24603670dc3: Pull complete  
97f170c87c6f: Pull complete  
Digest:sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d  
Status: Downloaded newer image for ubuntu:latest  
Hello world
  • docker run là câu lện để chạy một Container
  • ubuntu là Image mà bạn muốn chạy. Ví dụ Image hệ điều hành Ubuntu. Khi bạn chỉ định một Image, Docker đầu tiên sẽ tìm kiếm Image trên Host Docker của bạn, nếu Image không tồn tại ở local, thì Image sẽ được kéo về từ một public Image Registry – Docker Hub.
  • /bin/echo ‘Hello world’  là câu lệnh được chạy trong một Container mới. Container này đơn giản là in ra dòng chữ Hello world, và sau đấy dừng thực thi.

Nào hãy tạo một tương tác với shell bên trong một Docker Container:

docker run -i -t --rm ubuntu /bin/bash
  • -t gán một pseudo-tty hoặc terminal bên trong Container mới
  • -i cho phép bạn tạo một kết nối tương tác bằng cách lấy chuẩn đầu vào (STDIN) của Container.
  • –rm tự động xoá Container khi thoát tiến trình. Mặc định các Container sẽ không bị xoá. Container này sẽ tồn tại cho tới khi chúng ta giữ Session của Shell và chấm dứt khi chúng ta thoát khỏi Session (Giống như SSH session với Remote Server).

Nếu bạn muốn Container tiếp tục chạy sau khi kết thúc Session, bạn cần Daemon nó:

docker run --name daemon -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
  • –name daemon gán tên daemon vào một Container mới. Nếu bạn không chỉ rõ tên, Docker sẽ tạo ra và gán nó một cách tự động
  • -d chạy Container trong background

Nào hãy cùng xem chúng ta có những Container nào ở thời điểm này:

docker ps -a

Kết quả

CONTAINER ID  IMAGE   COMMAND                 CREATED             STATUS                         PORTS  NAMES  
1fc8cee64ec2  ubuntu  "/bin/sh -c 'while..."  32 seconds ago      Up 30 seconds                         daemon  
c006f1a02edf  ubuntu  "/bin/echo 'Hello ..."  About a minute ago  Exited (0) About a minute ago         gifted_nobel
  • docker ps là câu lệnh hiển thị danh sách các Container đang có
  • -a hiển thị tất cả các Container ( nếu không có -a thì nó sẽ chỉ hiển thị các Container đang chạy)

ps hiển thị cho chúng ta 2 Container:

gifted_nobel tên của Container được sinh ra tự động. Nó là Container đầu tiên chúng ta tạo ra và in ra dòng chữ Hello world. daemon là Container thứ 3 chúng ta tạo và được chạy như daemon.

Chú ý rằng không có Container thứ 2 ở đây bởi vì chúng ta thiết lập lựa chọn –rm. Như kết quả mong muốn, Container này sẽ được xoá tự động hoàn toàn sau khi thực thi xong.

Chúng ta hãy cùng kiểm tra log và xem daemon Container đang hoạt động ra sao:

docker logs -f daemon

Kết quả

...
hello world  
hello world  
hello world
  • Log Docker lấy về các log của Container
  • -f để theo dõi log đưa ra (hoạt động chắc chắn giống như tail -f)

Tiếp theo chúng ta sẽ stop daemon Container:

docker stop daemon

Để chắc chắn rằng Container đã được Stop chúng ta có thể kiểm tra:

docker ps -a

Kết quả

CONTAINER ID  IMAGE   COMMAND                 CREATED        STATUS                      PORTS  NAMES  
1fc8cee64ec2  ubuntu  "/bin/sh -c 'while..."  5 minutes ago  Exited (137) 5 seconds ago         daemon  
c006f1a02edf  ubuntu  "/bin/echo 'Hello ..."  6 minutes ago  Exited (0) 6 minutes ago           gifted_nobel

Container đã được Stop, nếu bạn muốn Start lại thì dùng câu lệnh như sau:

docker start daemon

Chúng ta cần đảm bảo nó đang chạy:

docker ps -a

Kết quả

CONTAINER ID  IMAGE   COMMAND                 CREATED        STATUS                    PORTS  NAMES  
1fc8cee64ec2  ubuntu  "/bin/sh -c 'while..."  5 minutes ago  Up 3 seconds                     daemon  
c006f1a02edf  ubuntu  "/bin/echo 'Hello ..."  6 minutes ago  Exited (0) 7 minutes ago         gifted_nobel

Nào giờ thì Stop và xoá tất cả các Container bằng cách thủ công

docker stop daemon  
docker rm tên_container_đầu_tiên  
docker rm daemon

Để xoá tất cả Container cùng một lúc chúng ta có thể sử dụng câu lệnh sau:

docker rm -f $(docker ps -aq)
  • docker rm là câu lệnh dùng để xoá Container
  • -f (cho rm) stop Container nếu nó đang chạy
  • -q (cho ps) là chỉ in ra các ID của Container

You May Also Like

About the Author: Nguyen Dinh Thuc

Leave a Reply

Your email address will not be published.