Viblo Code
+3

Docker cho người mới bắt đầu (cài đặt)

Chào các bạn như vậy là trong bài trước mình đã giới thiệu về công nghệ ảo hóa containerlization với công cụ Docker trên hệ điều hành Ubuntu, trong bài viết này mình sẽ đi chi tiết về cách cài đặt và xem cách hoạt động của docker ra sao nhé.

Cài đặt Docker

Docker có thể cài đặt trên các hệ điều hành như Linux, Windows, Mac. Do Docker cần truy cập vào phần kernel nên cài trên Linux thì không có vấn đề gì do linux là open source, còn đối với Windows và Mac, phần kernel của hệ điều hành này có những thứ private nên ta cần cài 1 máy ảo Linux trên máy thật và Docker hoạt động dựa trên máy ảo Linux đó.

Hiện tại Docker có 2 phiên bản, CE( dành cho nhà phát triển, nhóm nhỏ) và EE (dành cho doanh nghiệp). Dưới đây mình sẽ giới thiệu cài đặt đối với bản CE trên Ubuntu thông qua repository như sau:

Bước 1: Update các package và cài các package cần thiết

sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common

Bước 2: Thêm Docker’s official GPG key:

curl -fsSL --insecure https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sau đó xác thực lại key bằng lệnh

sudo apt-key fingerprint 0EBFCD88

kết quả như này là xác thực xong

Bước 3: Thêm Docker Repository

sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

Đợi 1 lát để cài đặt hoàn tất, sau đó tiến hành cài Docker

sudo apt-get update
sudo apt-get install docker-ce

Xác nhận kết quả cài đặt thành công bằng việc run image hello-world

sudo docker run hello-world

Và đây là kết quả nếu thành thành công

Cấu trúc và cách hoạt động của Docker

Docker sử dụng kiến trúc client-server. Docker client sẽ bắt liên lạc với các Docker daemon, các Docker daemon sẽ thực hiện các tác vụ build, run và distribuing các Docker container. Cả Docker client và Docker daemon có thể chạy trên cùng 1 máy vật lí, Docker client sẽ điều khiển các docker daemon thông qua socker hoặc RESTful API.

Docker Daemon

Docker daemon chạy trên các máy host. Người dùng sẽ không tương tác trực tiếp với các daemon, mà thông qua Docker Client.

Docker Client

Là giao diện người dùng của Docker, nó cung cấp cho người dùng giao diện dòng lệnh và thực hiện phản hồi với các Docker daemon.

Docker images

Nếu bạn đã hiểu mối quan hệ giữa Class và Instance trong lập trình hướng đối tượng thì Docker images và Docker container cũng giống như vậy. Docker images là nền tảng của container, nó giống như bộ khuôn đúc ra container, nó sẽ tạo ra container khi thực hiện câu lệnh chạy image và mỗi container sẽ là 1 instance của image đó. Docker images gồm các files và settings được lưu và tái sử dụng trong các container, thường bao gồm hệ điều hành (Windows, CentOS, Ubuntu, …) và các môi trường lập trình được cài sẵn (httpd, mysqld, nginx, python, git, …). Image là một template chỉ cho phép đọc, nó chỉ được chứa trong docker, ngoài việc tự tạo image dưới local, chúng ta cũng hoàn toàn có thể lưu trữ, download và sử dụng image của người khác trên Docker hub.

Docker Container

Giống như 1 directory, một Docker container chứa mọi thứ chúng ta cần để chạy một app. Mỗi container được tạo từ Docker image. Tốc độ khởi chạy container nhanh hơn tốc độ khởi chạy máy ảo rất nhiều ( trung bình tạo ra một container với hệ điều hành riêng biệt là 2 giây thay vì với 10 phút cho một máy ảo như công nghệ ảo hoá truyền thống ). Docker container có thể có các trạng thái run, started, stopped, moved và deleted.

Docker engine

Docker Engine cung cấp đầy đủ các function để cho người sử dụng có thể làm việc được với Docker image và Docker container. Để gọi đến các function này, người sử dụng có thể dùng gọi đến REST API của Docker, hoặc thực hiện thông qua giao diện conmand line (CLI – cấp cao hơn REST API). ví dụ: docker run image_name, etc ...

Docker Hub

Là nơi để đẩy các Docker Image lên (nếu bạn muốn sử dụng kiểu phân tán). Là chỗ để push image lên theo đúng quy trình mà người ta sử dụng Docker. Các bạn có thể xem qua qui trình dưới đây : Có 3 bước chính :

Build -> Push -> Pull,Run

Step 1: Build

Đầu tiên chúng ta sẽ tạo một dockerfile, trong dockerfile này chính là code của chúng ta.

Dockerfile này sẽ được Build tại một máy tính đã cài đặt Docker Engine.

Sau khi build ta sẽ thu được Container, trong Container này chứa bộ thư viện và ứng dụng của chúng ta.

Step 2: Push

Sau khi có được Container, chúng ta thực hiện push Container này lên đám mây và lưu trữ ở đó. Việc push này có thể thực hiện qua môi trường mạng Internet

Step 3: Pull, Run

Bây giờ một máy tính muốn sử dụng Container chúng ta đã push lên đám mây (máy đã cài Docker Engine) thì bắt buộc máy phải thực hiện việc Pull container này về máy. Sau đó thực hiện Run Container này.

Trên đây là những thành phần chính mà các bạn nên nắm được để có thể hiểu cơ bản, ngoài ra thì các bạn có thể tìm hiều về các khái niệm khác như Docker Toolbox, Docker Trusted Registry (DTR), Docker Machine, Docker Swarm, Docker Compose, Docker Registry, Docker Cloud để có thể nâng cao hơn kiến thức về docker.

Một số câu lệnh cơ bản

  • docker ps: Liệt kê các container đang chạy

    -a/-all: Liệt kê tất cả các container, kể cả đang chạy hay đã kể thúc.

    -q/-quiet: chỉ liệt kê ra id của các container.

  • docker pull

    sudo docker pull image_name

Hầu hết các image sẽ được tạo dựa trên các image cơ sở từ Docker Hub. Docker Hub chứa rất nhiều các image được dựng sẵn, mà ta có thể pull về và dùng mà không cần phải định nghĩa và cấu hình lại từ đầu. Để tải một image cụ thể hoặc một tập hợp image ta dùng docker pull.

  • docker run

    chạy một container dựa trên một image mà ta có sẵn. Ta có thể thêm vào sau lệnh này một vài câu lệnh khác như -it bash để chạy bash từ container này.

    docker run -it image_name /bin/bash

    Ví dụ :

sudo docker pull ubuntu:16.04

sudo docker run -it ubuntu:16.04 /bin/bash

=> như vậy là đã dựng xong 1 môi trường ubuntu ảo, nhanh và đơn giản hơn nhiều so với tự cài ubuntu

  • docker build

    build một image từ Dockerfile và context.

    docker build -t your_name_container

  • docker start

    khởi động một container

    docker start {new_container_name}

  • docker exec

    truy câp vào container đang chạy

    docker exec -it {container_name} /bin/bash

  • docker stop

    stop một hoặc nhiều container

    docker stop <list_container_name_or_id>

  • docker rm

    để xóa một hoặc nhiều container

    docker rm -f <list_container_name_or_id>

  • docker images

    liệt kê các images hiện có

  • docker rmi

    Xóa một image

    docker rmi <list_image_id>

Vậy là bài này mình đã giới thiệu cách cài đặt, một số thành phần quan trọng cũng như các câu lệnh cơ bản để làm việc với Docker. Trong phần tiếp theo mình sẽ đi chi tiết vào việc xây dựng một docker file. Hy vọng bài viết này giúp ích cho mn.

Nguồn tham khảo :


All Rights Reserved