+632

Docker: Chưa biết gì đến biết dùng (Phần 1- Lịch sử)

1. Vì sao nên sử dụng

  • Vào một đêm đẹp trời trăng thanh gió mát,

    Bạn được phân bổ vào dự án mới, và tất nhiên là hào khí ngút trời, thế như chẻ tre.

  • Hứng khởi vào đọc README.md một hồi, thấy dự án này sao mà cài cắm nhiều thứ thế.

    Nào là Node js, Redis, Mysql, Elasticsearch, ... mỗi thứ lại kèm theo yêu cầu version cụ thể.

    Lẩm bẩm một hồi, giờ search google, cài cắm một tá thứ này thì hết bao lâu ta ?

Sếp ơi, em cần 1 buổi sáng để setup ạ 💪

  • Cài chưa xong đã thấy rối tùm lum, cái nọ xung đột cái kia chẳng hạn, lại còn ảnh hưởng tới những chương trình cũ đã cài đặt trong máy nữa chứ, thôi cài lại luôn cả hệ điều hành cho máy.

Sếp ơi, em cần thêm 1 buổi nữa để setup ạ 🫠🫠🫠

  • Thôi xong, mất thời gian, mệt mỏi với những thao tác phụ mà chưa tập trung được vào việc chính, hic.

  • Đó chính là lúc bạn nên nghĩ tới Docker, mọi thứ sẽ đơn giản hơn nhiều.

Chỉ vài dòng lệnh thôi, cạch cạch cạch, bạn sẽ có thể nhanh chóng tạo được môi trường ảo hóa chứa đầy đủ những cài đặt cần thiết để dự án hoạt động.

  • Một ví dụ đơn giản vậy thôi nhưng không dừng lại ở đó, công dụng của Docker còn khá nhiều, chúng ta cùng tìm hiểu dần nhé !

2. Quá trình hình thành

Trước hết, cùng đọc lịch sử một chút đã:

2.1 Containerlization là gì ?

  1. Ngày lâu lâu rồi, mô hình thường được sử dụng là:

    • Máy chủ vật lý (physical server).
    • Hệ điều hành (operating system, viết tắt là OS).
    • Dự án / phần mềm / ứng dụng (application).

    • Vấn đề gặp phải ở đây là lãng phí tài nguyên:
      • Một máy chủ chỉ cài được một OS.
      • Cho dù có ổ cứng khủng, ram khủng thì cũng không tận dụng hết lợi thế.
  2. Sau đó ra đời công nghệ ảo hóa virtualization.

    • Có thể bạn đã nghe tới cái tên Virtualbox hay VMware rồi đúng không, đó đó chính nó đó.

    • Với công nghệ này, trên một máy chủ vật lý mình có thể cài đặt được nhiều OS, tận dụng tài nguyên đã tốt hơn.

    • Ví dụ:

      • Bạn đang cài đặt Ubuntu để lập trình, sau đó cài VirtualBox để có thể:
        • Cài thêm Windows - thi thoảng nhớ mùi còn vào làm trận game.
        • Cài thêm CenOS - thử trải nghiệm nhánh RedHat của họ nhà Linux xem sao do Ubuntu thuộc nhánh Debian.
        • Đó, vầy là trên một máy tính, bạn đã cài nhiều hệ điều hành để phục vụ cho những mục đích khác nhau.
    • Nhưng lại nảy sinh vấn đề tiếp:

      • Về tài nguyên:

        • Khi bạn bật máy ảo trên VitualBox, bạn cần cấu hình để cung cấp cố định ngay từ đầu tài nguyên từ máy thật cho máy ảo.
        • Bật máy ảo lên rồi để đó không làm gì thì máy thật cũng không thể tái sử dụng tài nguyên đã cho đi.
        • Ví dụ: Khi tạo một máy ảo ram 2GB trên máy thật ram 6GB, lúc này máy thật sẽ chỉ còn tối đa 6 - 2 = 4 GB ram, kể cả khi máy ảo không dùng hết 2GB ram được cấp, đó là một sự lãng phí.
      • Về thời gian: Việc khởi động, tắt máy ảo khá lâu, có thể lên tới hàng phút.

  3. Ở bước tiến hóa tiếp theo, người ta sinh ra công nghệ containerlization:

    • Với công nghệ này, trên một máy chủ vật lý, ta sẽ cài đặt được nhiều máy ảo (giống với công nghệ ảo hóa virtualization)

    • Nhưng tốt hơn ở chỗ là các máy con này (Guess OS) đều dùng chung kernel của máy mẹ (Host OS) và chia sẻ với nhau tài nguyên máy mẹ.

    • Có thể bạn đã biết thì kernel là phần lõi của một hệ điều hành, chịu trách nhiệm quản lý tài nguyên hệ thống như bộ nhớ, CPU, RAM và các thiết bị ngoại vi. Nó hoạt động như một cầu nối giữa phần cứng và phần mềm, điều phối giao tiếp giữa chương trình ứng dụng và phần cứng của máy tính.

      image.png

    • Có thể hiểu nôm na là khi nào cần tài nguyên thì lấy, lấy dùng xong trả lại, rồi khi nào cần thì lại lấy, như vậy việc tận dụng tài nguyên đã tối ưu hơn.

    • Điểm nổi bật nhất của containerlization là nó sử dụng container engine để tạo ra các container, và một kĩ sư của Google đã phát biểu rằng:

    • Một công ty hàng đầu về công nghệ đã áp dụng nó, chứng tỏ lợi ích, độ tin cậy của công nghệ này rồi ! Chúng ta cùng áp dụng nó nhé.

2.2 Container là gì ?

  • Container Engine là một công nghệ ảo hoá cho phép bạn đóng gói một phần mềm cùng với tất cả phụ thuộc của nó (như thư viện, mã nguồn, cấu hình ...) vào trong một môi trường riêng biệt gọi là container.

  • Container sẽ chứa tất cả mọi thứ mà phần mềm đó cần để chạy, giữ cho cấu hình phần mềm luôn được nhất quán trên mọi môi trường, từ máy tính cá nhân cho đến máy chủ, VPS, Cloud ...

  • Hạn chế tình trạng các lập trình viên đang làm việc trong cùng một team và:

    • Hỏi: Sao máy anh chạy được mà máy chú thì không ?

    • Trả lời: Có thể do máy của em cài MySQL version x.x.x còn máy của a cài MySQL verion y.y.y

  • Hoặc: Ở local thì chạy mà trên production thì không <lộn cái bàn> 🫠

    image.png

  • Ngoài ra, các tiến trình (process) trong một container bị cô lập, tách biệt với các tiến trình của các container khác trong cùng hệ thống và cũng tách biệt luôn với môi trường Host OS bên ngoài.

  • Container sẽ không bị ảnh hưởng từ bên ngoài vào và cũng không gây ảnh hưởng ra ngoài. Chúng ta chỉ cấu hình để mở một số cổng giao tiếp nhất định giữa các container với nhau và container với Host OS.

    Ví dụ:

    • Cấu hình container mysql mở cổng 3456 và cho phép container java app kết nối tới để lấy dữ liệu trong database.
    • Cấu hình container nginx mở cổng 80 và cho phép Host OS gọi vào.

Ưu điểm:

  • Tiện lợi: Rất hữu dụng để xây dựng, chuyển giao và chạy các phần mềm, làm mọi thứ dễ dàngnhanh chóng hơn.
    • Ví dụ: bạn có một phần mềm code bằng java, bạn sẽ không cần cài đặt JDK vào máy thật để chạy phần mềm đó, hoặc node js thì cũng không cần cài npm
    • Mà chỉ cần dùng container đã được setting tương ứng cho phần mềm đó,
    • Tải nó về, bật nó lên, cho phần mềm chạy bên trong môi trường container đó, vậy là ok.
    • Khi không sài nữa thì tắt hoặc xóa bỏ container đó đi, không ảnh hưởng gì nhiều tới host OS của bạn.
  • Linh động: Triển khai ở bất kỳ nơi đâu do sự phụ thuộc của ứng dụng vào tầng OS cũng như cơ sở hạ tầng được loại bỏ.
  • Nhanh: Do chia sẻ host OS nên container có thể được tạo gần như một cách tức thì. Điều này khác với vagrant - tạo môi trường ảo ở level phần cứng nên khi khởi động mất nhiều thời gian hơn.
  • Nhẹ: Container cũng sử dụng chung các images nên cũng không tốn nhiều disks.
  • Đồng nhất: Khi nhiều người cùng phát triển trong một dự án sẽ không bị sự sai khác về mặt môi trường.
  • Đóng gói: Đóng gói tất cả cài đặt cần thiết của dự án, người mới tham gia vào dự án hoặc nhận bàn giao không cần thực hiện setup từng phần nhỏ, nhàm chán và mất thời gian.

Nhược điểm:

Xét về tính an toàn:

  • Do dùng chung OS nên nếu có lỗ hổng nào đấy ở kernel của host OS thì nó sẽ ảnh hưởng tới toàn bộ container có trong host OS đấy.
  • Ngoài ra hãy thử tưởng tượng với host OS là Linux, nếu trong trường hợp ai đấy hoặc một ứng dụng nào đấy có trong container chiếm được quyền superuser, điều gì sẽ xảy ra? Về lý thuyết thì tầng OS sẽ bị crack và ảnh hưởng trực tiếp tới máy host bị hack cũng như các container khác trong máy đó (hacker sử dụng quyền chiếm được để lấy dữ liệu từ máy host cũng như từ các container khác trong cùng máy host bị hack chẳng hạn).
  • Bạn có thể đọc thêm về Docker Security

Sự khác nhau giữa container và VM (virtual machine - máy ảo):

  • VM là một hệ điều hành thực thụ, riêng biệt, chứa nhân hệ điều hành (kernel) và các phần mềm

    -> Tách biệt hoàn toàn, tiêu thụ nhiều tài nguyên và thời gian.

  • Container được chia sẻ kernel, nó chỉ như một process, một tiến trình chạy trên máy host os.

    -> Nhẹ hơn, nhanh hơn do không có hệ điều hành riêng, do đó linh hoạt hơn. Mức độ cô lập thấp hơn so với VM nhưng vẫn đủ tốt để cô lập môi trường ứng dụng.

2.3 Docker ra đời

  • Công nghệ ảo hóa (virtualization) thì ta có thể dùng công cụ Virtualbox hay VMware thế còn đối với containerlization thì dùng gì đây ? Google họ dùng gì ?

  • Oh, mình không biết được, mỗi một ông lớn có một cách để áp dụng công nghệ này và họ private source code của họ.

  • Gần đây, mà cũng lâu rồi 😙 Có một công ty tiến hành public source code của họ về công nghệ này, họ tung ra sản phẩm mang tên là Docker và nhận được nhiều sự chú ý.

  • Sau đó công ty cũng đổi tên thành Docker luôn, sologan hiện tại là Develop faster, Run anywhere. Cũng có thể xem đây là hai giá trị lớn nhất mà sản phẩm này mang tới cho cộng đồng, thật ngắn gọn.

    image.png

  • Công ty này cung cấp công cụ Docker free nhưng họ kiếm được rất nhiều tiền từ những dịch vụ khác đi kèm với nó.

    image.png

  • Hệ sinh thái nhà Docker cũng có nhiều cái hay ho.

    image.png

  • Với sự bùng nổ của việc sử dụng container cùng với những lợi ích lớn mà nó mang lại, gã khổng lồ phần mềm Microsoft không muốn bỏ qua cơ hội màu mỡ này với việc cho ra mắt tính năng mới có tên Windows Container.

    • Các bạn có thể tham khảo, áp dụng công cụ Windows Container của công ty Microsoft cho Windows tại đây.
    • Còn phạm vi bài viết này xin giới hạn lại áp dụng sản phẩm Docker của công ty Docker nhé các bạn !

Đó, dân ta phải biết sử Tây là thế đó, chứ cứ lao vào học Docker luôn rồi cũng chẳng biết nó sinh đẻ thế nào, từ đâu mà ra, có anh em họ hàng gì không ?

3. Cài đặt ra sao ?

  • Docker hỗ trợ nhiều nền tảng hệ điều hành khác nhau bao gồm Linux, Windows và cả Mac.

    • Lưu ý là ban đầu nó được xây dựng trên nền tảng Linux. Vì Docker cần can thiệp vào phần lõi, phần nhân kernel của OS trong khi đó Linux là mã nguồn mở, gọi là cần gì có nấy.

    • Đến khi thấy Docker hay quá, bác Windows ngỏ lời, thế là công ty Docker và công ty Microsoft hợp tác với nhau nhưng nghe chừng chưa khả quan lắm bởi vì nhân Windows có nhưng thứ không public được (bản quyền mà, mình đoán thế 😅), Mac OS có lẽ cũng zị =))

    • Cho tới hiện tại khi cài Docker trên Windows hay Mac thì Docker sẽ cài một máy ảo Linux trên máy thật và Docker hoạt động dựa trên máy ảo Linux đó, còn tương lai về sau thì ai biết được.

    • Mà cũng do vậy, nên khi dùng Docker trên Mac hoặc Windows thì hiệu năng sẽ thấp hơn, không tận dụng được sức mạnh của toàn bộ host os.

    • Có lần mình hướng dẫn một bạn sinh viên mới tới công ty thực tập, setup dự án với Docker trên Linux thì chạy khá mượt. Thời gian sau khi bạn ấy bảo vệ luận án tốt nghiệp, thấy bảo là cần bắt buộc cài sang Windows để làm luận án và máy cũng bị lỗi gì đó không cài song song Windows với Ubuntu được. Thế là phải cài dự án với Docker trên Windows mà giật treo lag không làm được, build cái React rất lâu. Vốn dĩ cấu hình laptop của bạn ấy cũng không cao sẵn rồi.

3.1 Mac OS

  • Nếu bạn đang dùng Mac OS, thì bạn nên cài đặt Docker thông qua Docker Desktop, việc cài đặt cũng khá đơn giản.

    image.png

  • Docker Desktop là một ứng dụng có giao diện đồ hoạ (GUI), nó sẽ cài đặt kèm Docker Engine luôn nên không cần cài riêng Docker Engine nữa.

    Vào Settings của Docker Desktop bạn sẽ cấu hình được tài nguyên tối đa của máy ảo Linux mà chúng ta có nhắc tới ở trên.

    image.png

  • Để kiểm tra xem cài đặt thành công chưa thì bạn chạy câu lệnh

    docker run hello-world
    

    Nếu xuất hiện dòng chữ Hello from Docker! như hình bên dưới tức là đã cài đặt thành công.

    image.png

3.2 Windows

  • Thì cũng tương tự như MacOs bên trên, bạn nên cài Docker Desktop for Windows

    Khác một chút là nếu muốn cấu hình lượng tài nguyên (CPU, RAM, Disk, Swap) tối đa mà Docker được sử dụng thì phải thông qua wslconfig file

    image.png

  • Ở khu vực hiển thị dưới cùng bên trái của Docker Desktop, bạn sẽ nhìn thấy lượng RAM, CPU và DiskDocker đang sử dụng.

3.3 Linux

  • Nếu bạn đang cài đặt Docker cho các OS họ nhà Linux (Như Ubuntu, CentOS, Fedora, ...) thì bạn nên cài Docker Engine riêng trước.

    image.png

  • Ví dụ VPS đang dùng Ubuntu thì làm theo các bước như ở đây, cũng khá là đơn giản thôi.

    Set up Docker's apt repository.

    # Add Docker's official GPG key:
    sudo apt-get update
    sudo apt-get install ca-certificates curl
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    
    # Add the repository to Apt sources:
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
      $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update
    

    Install the Docker packages.

    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    

    Verify that the Docker Engine installation is successful by running the hello-worldimage.

    sudo docker run hello-world
    
  • Còn nếu bạn muốn cài Docker Desktop luôn giống Mac OS hoặc Windows, thì Docker họ cũng bẻ lái bạn sang cài Docker Engine trước

  • Manage Docker as a non-root user

    • Ở đây sẽ có một vấn đề là khi bạn gọi câu lệnh docker trên Terminal có thể xuất hiện lỗi:

      Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock ...
      
    • Thì Docker có chia sẻ về lỗi này tại Linux post-installation steps for Docker Engine

      The Docker daemon binds to a Unix socket, not a TCP port. By default it's the root user that owns the Unix socket, and other users can only access it using sudo. The Docker daemon always runs as the root user.
      
    • Cách xử lý thứ nhất là chạy câu lệnh với quyền sudo

      docker run hello-world            # Got permission denied while trying to connect to the Docker daemon socket at unix ...
      => sudo docker run hello-world    # Successfully !
      
    • Cách xử lý thứ hai là:

      If you don't want to preface the docker command with sudo, create a Unix group called docker and add users to it. When the Docker daemon starts, it creates a Unix socket accessible by members of the docker group. On some Linux distributions, the system automatically creates this group when installing Docker Engine using a package manager. In that case, there is no need for you to manually create the group.
      
      sudo usermod -aG docker $(whoami)               # Thêm user hiện tại vào group docker
      newgrp docker / reboot / logout and login back  # Chọn một trong ba cách: Chạy câu lệnh `newgrp docker` hoặc câu lệnh `reboot` hoặc logout ra rồi login lại để cập nhật sự thay đổi cho group.
      

4. Nhược điểm của Docker

Cũng không nên thần thánh hoá cái gì đó quá =))

  • Đầu tiên là việc chưa tận dụng được hết tài nguyên khi dùng trên Mac OS hoặc Windows như đã tìm hiểu ở trên.

  • Tiếp theo là chỉ dựng lên được container Linux (Ubuntu, CentOS, ...)

    Với VMware hoặc VirtualBox thì khi cài đặt máy ảo, bạn có thể chọn file cài đặt để tạo ra máy ảo Windows hoặc Linux tuỳ ý đúng không.

    Nhưng với Docker thì ta chỉ có thể tạo ra container Linux.

    Do vậy, phần mềm của bạn sẽ chạy trong môi trường Linux.

    Và bạn cũng cần một số hiểu biết và kiến thức cơ bản về OS này, các câu lệnh như:

    ls -la: liệt kê danh sách file trong thư mục

    mkdir: tạo thư mục mới ...

    Linux bắt nguồn từ đâu ?

5. Hoạt động như thế nào ?

  • Chúng ta có hình ảnh sơ đồ như sau để mô tả luồng hoạt động cơ bản nhất của Docker.

image.png

  • Từ Dockerfilebuild lên Docker Image, rồi từ Docker Image run lên Docker Container.

  • Mục đích cuối của chúng ta đang là dựng được docker container lên để phần mềm chạy ở trong đó phải không ? Thì bước trước đó, cùng tìm hiểu docker image nhé.

  • Docker image là nền tảng của docker container, có thể hiểu nó như khung xương giúp định hình cho container, nó sẽ tạo ra container khi thực hiện câu lệnh chạy image đó.

    • Nếu nói với phong cách lập trình hướng đối tượng, Docker image là class, còn container là thực thể (instance, thể hiện) của class đó.
    • Nếu nói với phong cách cài win dạo, thì Docker image tương tự như file .gho để ghost Windows, bung file này ra là cài được Windows.
    • Hoặc văn vẻ hơn, docker image chưa dùng được như bê tông, cốt thép, bộ khung thô của ngôi nhà đã dựng xong nhưng chưa ở được, còn muốn lên docker container để dùng được thì giống như trát xi măng, vôi vữa rồi sơn lên và trang trí nội thất để ở được.
  • Docker image không phải là một file vật lý như file .png, .mp3 ... mà nó chỉ tồn tại trong Docker.

    • Nó bao gồm hệ điều hành (CentOS, Ubuntu, …) và các môi trường lập trình được cài sẵn (httpd, mysqld, nginx, python, git, …), đây chính là nền tảng cho container mà.
    • Là mẫu, template, là bất biến.
    • Được xây dựng từ các tầng (layers).
    • Tương tự như file ghost windows các bác hay upload lên Google Drive để chia sẻ thì docker image cũng được lưu trữ và chia sẻ thông qua Docker Hub.

    Bạn có thể tìm tải các image mọi người chia sẻ sẵn ở đây hoặc có thể tự tạo cho mình image như ý.

6. Các câu lệnh trong Docker

  • Chúng ta cần nắm được các câu lệnh để:

    • Một là từ Dockerfile tạo Docker Image

    • Hai là từ Docker Image tạo tiếp Docker Container như thế nào

      đó là cơ bản nhất.

  • Các câu lệnh cho Docker Image

    • Pull image:

      docker pull <image_name>
      

      Ví dụ:

      docker pull ubuntu:22.04
      
      • ubuntu là tên của image, 22.04 là tag (version), nếu dùng docker pull ubuntu thì tag mặc định là latest

      • Khi thực hiện câu lệnh trên, docker sẽ kiểm tra xem image này đã tồn tại trong máy hay chưa, nếu chưa thì từng layer của image sẽ được tải về từ kho lưu trữ Docker Hub. image.png

      • Bạn chạy câu lệnh trên thêm một lần, sẽ thấy không cần tải lại image về nữa.

      image.png

    • Liệt kê danh sách image:

      docker images
      

      image.png

      • Pull thêm một image mới nữa

        docker pull mysql
        

        rồi kiểm tra lại danh sách

        docker images
        

      image.png

    • Xoá image:

      docker rmi <image_name>
      

      Ví dụ:

      docker rmi mysql
      

      image.png

      • Bạn có thể dùng Docker Desktop để kiểm tra dưới dạng GUI:

      image.png

    • Xoá tất cả images

      docker rmi -f $(docker images -aq)
      

      image.png

  • Các câu lệnh cho Docker Container

    • Bật docker contaner:

      docker run 
          -it           # Hẹn các bạn phần 2 sẽ tìm hiểu kỹ hơn nhé
          <image_name>  # Tên của image mà mình muốn dùng để bật container từ đó lên
          /bin/bash     # Tên của Linux shell mà bạn muốn sử dụng (sh, bash, szh ...)
      
      • Ví dụ 1:

        docker pull ubuntu
        docker run -it ubuntu /bin/bash
        

        image.png

        Bây giờ bạn đã dựng thành công một môi trường ubuntu ảo rồi đó:

        Bên trong container, bạn có thể thực hiện các câu lệnh với một Linux system như ls, mkdir ...

        image.png

        Ngoài ra, có một câu lệnh khá hay:

        uname -a
        

        ChatGPT xem câu lệnh này dùng để làm gì nhé !

        image.png

        uname -a ở bên trong container và sau đó ấn Ctrl + C để thoát ra ngoài máy host os và gõ uname -a tiếp.

        Nếu bạn dùng Linux thì sẽ thấy kết quả câu lệnh này ở bên trong container và ở ngoài host os giống nhau

        image.png

        Như trường hợp của mình:

        Container: Linux 8fd145beef6a 6.8.0-44-generic #44-Ubuntu SMP PREEMPT_DYNAMIC Tue Aug 13 13:35:26 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

        Host OS: Linux bamboo-Nitro-AN515-51 6.8.0-44-generic #44-Ubuntu SMP PREEMPT_DYNAMIC Tue Aug 13 13:35:26 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

        Do container được dùng chung kernel của host os luôn mà.

        Nếu bạn dùng Mac OS thì kết quả của câu lệnh trên ở bên trong container sẽ là của máy ảo Linux được tạo ra khi cài Docker Desktop mà chúng ta đã nhắc tới ở trên.

        image.png

        Do đó bạn sẽ thấy sự khác biệt giữa hai kết quả, uname -a ở bên ngoài máy host os sẽ trả về thông tin nhân kenel của máy Mac rồi.

        Đối với Windows thì không dùng uname -a được, có câu lệnh systeminfo bạn có thể thử.

      • Ví dụ 2:

        docker pull mysql
        docker run -it mysql /bin/bash
        

        image.png

        Gõ tiếp:

        mysql --verison  # Kiểm tra mysql version
        

        kết quả là

        mysql  Ver 9.0.1 for Linux on aarch64 (MySQL Community Server - GPL)
        

        Đó, không cần cài mysql vào host os và vẫn có mysql để dùng rồi.

    • Liệt kê container:

      docker ps                      # Danh sách containers đang chạy
      docker ps -a                   # Danh sách containers đang chạy và đã tắt
      docker start <container_name>:                    # Khởi động một container 
      docker exec -it <container_name> /bin/bash:       # Truy cập vào bên trong container đang chạy
      
    • Xoá container:

      docker rm -f {container_id/name}: Xóa một container
      

7. Updating ...

  • Phần 1 này chủ yếu giới thiệu về lý thuyết, để mình cùng nhau hiểu Docker là gì và bản chất của Docker đã.

  • Trong quá trình viết bài mình cần tìm hiểu thêm nhiều và cũng nhận ra nhiều điều mới. Nếu có ý kiến đóng góp gì, bạn vui lòng comment bên dưới nhé !

  • Trong phần 2 mình sẽ:

    • Giải thích chi tiết hơn các câu lệnh (-it nghĩa là gì, /bin/bash nghĩa là gì,..)
    • Cách tạo Dockerfile
    • Cách tạo Docker Compose, cấu hình,... Mời các bạn đón đọc.

Tài liệu tham khảo:

  1. https://viblo.asia/u/thangtd90

  2. https://docs.docker.com

  3. https://www.google.com.vn

  4. http://blog.appconus.com/2016/04/15/docker-cho-nguoi-moi-bat-dau-p1

                      😊 😊 😊 Thank for your attention 😊 😊 😊 
    

########################################################

Mình đã viết Docker: Chưa biết gì đến biết dùng (Phần 2), mời các bạn đọc tiếp.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí