Cách Cài đặt và Sử dụng Docker trên Ubuntu 16.04

3 năm trước

 

Giới Thiệu 

Docker là một ứng dụng đơn giản và dễ dàng để chạy các quy trình ứng dụng trong một container, giống như các máy ảo, chỉ di động hơn, thân thiện với tài nguyên hơn và phụ thuộc nhiều hơn vào hệ điều hành máy chủ. 

Có hai phương pháp để cài đặt Docker trên Ubuntu 16.04. Một phương pháp liên quan đến việc cài đặt nó trên một cài đặt hiện có của hệ điều hành. Phương pháp khác liên quan đến việc quay tròn một máy chủ với một công cụ gọi là Docker Machine tự động cài đặt Docker trên nó.

Trong hướng dẫn này, bạn sẽ tìm hiểu cách cài đặt và sử dụng nó trên bản cài đặt hiện có của Ubuntu 16.04.

 

Yêu Cầu 

Để làm theo hướng dẫn này , bạn cần :

Chú ý: Docker yêu cầu một phiên bản 64-bit  Ubuntu cũng như là một phiên bản kernel ngang bằng hoặc lớn hơn 3.10. Theo mặc định máy chủ  64-bit Ubuntu 16.04 đáp ứng các yêu cầu đó.Tất cả các lệnh trong hướng dẫn này sẽ được chạy như một non-root user. Nếu truy cập root là cần thiết cho lệnh, nó sẽ được bắt đầu bởi sudo. Hướng dẫn cài đặt ban đầu cho Ubuntu 16.04 giải thích cách thêm người dùng và cấp quyền truy cập sudo cho họ.

 

Bước 1 — Cài đặt Docker

Gói cài đặt Docker có sẵn trong kho lưu trữ chính thức của Ubuntu 16.04 có thể không phải là phiên bản mới nhất. Để có được phiên bản mới nhất và tốt nhất, hãy cài đặt Docker từ kho lưu trữ Docker chính thức. Phần này cho bạn thấy làm thế nào để làm điều đó.

Đầu tiên, thêm khóa GPG cho kho lưu trữ Docker chính thức vào hệ thống:

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

Thêm kho lưu trữ Docker vào các nguồn APT:

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

Tiếp theo, cập nhật cơ sở dữ liệu gói với các gói Docker từ repo mới được bổ sung:

sudo apt-get update

Hãy chắc chắn rằng bạn sắp cài đặt từ Docker repo thay vì repo Ubuntu 16.04 mặc định:

apt-cache policy docker-ce

Bạn sẽ thấy output tương tự như sau:

Output of apt-cache policy docker-ce
docker-ce:
Installed: (none)
Candidate: 17.03.1~ce-0~ubuntu-xenial
Version table:
17.03.1~ce-0~ubuntu-xenial 500
500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
17.03.0~ce-0~ubuntu-xenial 500
500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages

Lưu ý rằng docker-ce chưa được cài đặt, nhưng ứng cử viên để cài đặt là từ kho lưu trữ Docker cho Ubuntu 16.04. Số phiên bản docker-ce có thể khác nhau.

Cuối cùng, cài đặt Docker:

sudo apt-get install -y docker-ce

Docker bây giờ sẽ được cài đặt, daemon bắt đầu, và quá trình được kích hoạt để bắt đầu khởi động. Kiểm tra xem nó có đang chạy không:

sudo systemctl status docker

Output nên tương tự như sau, cho thấy dịch vụ đang hoạt động và đang chạy:

output
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago
Docs: https://docs.docker.com
Main PID: 749 (docker)
 

Cài đặt Docker giờ đây không chỉ cung cấp cho bạn dịch vụ Docker (daemon) mà còn cả tiện ích dòng lệnh docker, hoặc trình khách Docker. Chúng ta sẽ tìm hiểu cách sử dụng lệnh docker sau trong hướng dẫn này.

 

Bước 2 - Thực hiện lệnh Docker Không có Sudo (Tùy chọn)

Theo mặc định, việc chạy lệnh docker yêu cầu các đặc quyền root - nghĩa là bạn phải thêm tiền tố vào lệnh bằng sudo. Nó cũng có thể được điều hành bởi người dùng trong nhóm docker, được tạo tự động trong quá trình cài đặt Docker. Nếu bạn cố gắng chạy lệnh docker mà không cần tiền tố nó với sudo mà không có trong nhóm docker, bạn sẽ nhận được một kết quả như sau:

output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.
 

Nếu bạn muốn tránh gõ sudo bất cứ khi nào bạn chạy lệnh docker, hãy thêm tên người dùng của bạn vào nhóm docker:

sudo usermod -aG docker ${USER}

Để áp dụng tư cách thành viên nhóm mới, bạn có thể đăng xuất khỏi máy chủ và đăng nhập lại hoặc bạn có thể nhập như sau:

su - ${USER}

Bạn sẽ được nhắc nhập mật khẩu của người dùng để tiếp tục. Sau đó, bạn có thể xác nhận rằng người dùng của bạn hiện đã được thêm vào nhóm docker bằng cách gõ:

id -nG
outputsammy sudo docker
 
 

Nếu bạn cần thêm người dùng vào nhóm docker mà bạn chưa đăng nhập, hãy khai báo tên người dùng đó một cách rõ ràng bằng cách sử dụng:

sudo usermod -aG docker username

Phần còn lại của bài viết này giả định rằng bạn đang chạy lệnh docker như một người dùng trong nhóm người dùng docker. Nếu bạn chọn không, vui lòng thêm các lệnh bằng sudo.

 

Bước 3 — Sử dụng lệnh Docker 

Với Docker được cài đặt và làm việc, bây giờ là lúc để làm quen với tiện ích dòng lệnh. Sử dụng docker bao gồm việc truyền một chuỗi các tùy chọn và các lệnh theo sau bởi các đối số. Cú pháp có dạng này:

docker [option] [command] [arguments]

Để xem tất cả các lệnh phụ có sẵn, hãy nhập:

docker

Kể từ Docker 1.11.1, danh sách đầy đủ các lệnh phụ sẵn có bao gồm:

 output 
attach Attach to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on a container or image
kill Kill a running container
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
network Manage Docker networks
pause Pause all processes within a container
port List port mappings or a specific mapping for the CONTAINER
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart a container
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop a running container
tag Tag an image into a repository
top Display the running processes of a container
unpause Unpause all processes within a container
update Update configuration of one or more containers
version Show the Docker version information
volume Manage Docker volumes
wait Block until a container stops, then print its exit code
 

Để xem các bộ chuyển đổi có sẵn cho một lệnh cụ thể, hãy nhập:

docker docker-subcommand --help

Để xem thông tin toàn hệ thống về Docker, hãy sử dụng:

docker info
 

Bước 4 — Làm việc với Docker Images

Docker container được chạy từ Docker images. Theo mặc định, nó kéo những hình ảnh này từ Docker Hub, một cơ quan đăng ký Docker  được quản lý bởi Docker, công ty đằng sau dự án Docker. Bất kỳ ai cũng có thể xây dựng và lưu trữ hình ảnh Docker của họ trên Docker Hub, vì vậy hầu hết các ứng dụng và bản phân phối Linux bạn sẽ cần để chạy Docker container có hình ảnh được lưu trữ trên Docker Hub.

Để kiểm tra xem bạn có thể truy cập và tải xuống hình ảnh từ Docker Hub hay không, hãy nhập:

docker run hello-world

Đầu ra, bao gồm các thông tin sau,cho biết Docker hoạt động chính xác:

output
Hello from Docker.
This message shows that your installation appears to be working correctly.
...
 

Bạn có thể tìm kiếm các hình ảnh có sẵn trên Docker Hub bằng cách sử dụng lệnh docker với lệnh phụ  search. Ví dụ: để tìm kiếm hình ảnh Ubuntu, hãy nhập:

docker search ubuntu

Tập lệnh sẽ thu thập thông tin Docker Hub và trả về một danh sách tất cả các hình ảnh có tên khớp với chuỗi tìm kiếm. Trong trường hợp này, đầu ra sẽ tương tự như sau:

output
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating s... 3808 [OK] 
ubuntu-upstart Upstart is an event-based replacement for ... 61 [OK] 
torusware/speedus-ubuntu Always updated official Ubuntu docker imag... 25 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 24 [OK]
ubuntu-debootstrap debootstrap --variant=minbase --components... 23 [OK] 
nickistre/ubuntu-lamp LAMP server on Ubuntu 6 [OK]
nickistre/ubuntu-lamp-wordpress LAMP on Ubuntu with wp-cli installed 5 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images... 4 [OK]
nimmis/ubuntu This is a docker images different LTS vers... 4 [OK]
maxexcloo/ubuntu Docker base image built on Ubuntu with Sup... 2 [OK]
admiringworm/ubuntu Base ubuntu images based on the official u... 1 [OK]
...
 
 

Trong cột OFFICIAL ,  OK cho biết hình ảnh được xây dựng và hỗ trợ bởi công ty đằng sau dự án. Khi bạn đã xác định được hình ảnh mà bạn muốn sử dụng, bạn có thể tải nó xuống máy tính của mình bằng cách sử dụng tiểu lệnh  pull, như sau:

docker pull ubuntu
 

Sau khi một hình ảnh đã được tải xuống, bạn có thể chạy một vùng chứa bằng cách sử dụng hình ảnh đã tải xuống với lệnh phụ  run. Nếu một hình ảnh chưa được tải xuống khi docker được thực hiện bằng lệnh phụ run, trình khách Docker trước tiên sẽ tải xuống hình ảnh, sau đó chạy một vùng chứa bằng cách sử dụng nó:

docker run ubuntu

Để xem hình ảnh đã được tải xuống máy tính của bạn, gõ:

docker images

Đầu ra sẽ trông giống như sau:

output
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest c5f1cf30c96b 7 days ago 120.8 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
 

Như bạn sẽ thấy sau trong hướng dẫn này, các hình ảnh mà bạn sử dụng để chạy các containers có thể được sửa đổi và sử dụng để tạo các hình ảnh mới, sau đó có thể tải lên (pushed là thuật ngữ kỹ thuật) vào Docker Hub hoặc các đăng ký Docker khác.

 

Bước 5 — Chạy một Docker Container

Container  hello-world  bạn đã chạy trước đó là ví dụ về container mà chạy và thoát, sau khi phát ra thông báo thử nghiệm. Tuy nhiên, các container có thể hữu ích hơn nhiều và có thể tương tác. Sau tất cả, chúng tương tự như máy ảo, chỉ có nhiều tài nguyên thân thiện.

Ví dụ, hãy chạy một container bằng cách sử dụng hình ảnh mới nhất của Ubuntu. Sự kết hợp giữa các  chuyển đổi -i và -t cho phép bạn truy cập shell tương tác vào trong container:  

docker run -it ubuntu

Dấu nhắc lệnh của bạn sẽ thay đổi để phản ánh thực tế rằng bạn hiện đang làm việc bên trong container và nên thực hiện biểu mẫu này:

output
root@d9b100f2f636:/#
 

Quan trọng: Lưu ý container id  trong dấu nhắc lệnh. Trong ví dụ trên, nó là d9b100f2f636.

Bây giờ bạn có thể chạy bất kỳ lệnh nào bên trong container. Ví dụ, hãy cập nhật cơ sở dữ liệu gói bên trong container. Không cần tiền tố bất kỳ lệnh nào với sudo, bởi vì bạn đang hoạt động bên trong container với các đặc quyền root:

apt-get update

Sau đó cài đặt bất kỳ ứng dụng nào trong đó. Hãy cài đặt NodeJS, ví dụ.

apt-get install -y nodejs

Bước 6 - Xác định thay đổi trong Container cho Docker image

Khi bạn khởi động một Docker image, bạn có thể tạo, sửa đổi và xóa các tập tin giống như bạn có thể làm với một máy ảo. Những thay đổi bạn thực hiện sẽ chỉ áp dụng cho container đó. Bạn có thể bắt đầu và dừng nó, nhưng một khi bạn phá hủy nó bằng lệnh docker rm, các thay đổi sẽ bị mất.

Phần này cho bạn thấy cách lưu trạng thái của container như một  Docker image mới.

Sau khi cài đặt các nút bên trong Ubuntu container, bây giờ bạn có một container đang chạy khỏi một hình ảnh, nhưng container khác với hình ảnh bạn từng tạo ra.

Để lưu trạng thái của container dưới dạng hình ảnh mới, trước tiên hãy thoát khỏi nó:

exit

Sau đó, xsc định các thay đổi đối với một phiên bản Docker image mới bằng cách sử dụng lệnh sau đây. Chuyển đổi -m cho thông báo xác nhận giúp bạn và người khác biết bạn đã thực hiện những thay đổi nào, trong khi -a được sử dụng để chỉ định tác giả. Container ID là thứ mà bạn đã lưu ý trước đó trong hướng dẫn khi bạn bắt đầu phiên docker tương tác. Trừ khi bạn tạo thêm kho lưu trữ trên Docker Hub, kho lưu trữ thường là tên người dùng Docker Hub của bạn:

docker commit -m "What did you do to the image" -a "Author Name" container-idrepository/new_image_name

Ví dụ:

docker commit -m "added node.js" -a "Sunday Ogwu-Chinuwa" d9b100f2f636 finid/ubuntu-nodejs

 

    Chú ý: Khi bạn xác nhận một hình ảnh , hình ảnh mới được lưu cục bộ , tức là trên máy tính của bạn . Trong phần sau của hướng dẫn này , bạn sẽ tìm hiểu cách đẩy một hình ảnh vào một đăng ký Docker như Docker Hub để nó có thể được bạn và những người khác đánh giá và sử dụng.

    Sau khi thao tác đó hoàn tất, việc liệt kê  Docker images ngay trên máy tính của bạn sẽ hiển thị hình ảnh mới, cũng như hình ảnh cũ mà nó được lấy từ:

    docker images

    Đầu ra sẽ trông như thế này:

    outputfinid/ubuntu-nodejs latest 62359544c9ba 50 seconds ago 206.6 MB
    ubuntu latest c5f1cf30c96b 7 days ago 120.8 MB
    hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
     

    Trong ví dụ trên, ubuntu-nodejs là hình ảnh mới, được lấy từ hình ảnh ubuntu hiện có từ Docker Hub. Sự khác biệt kích thước phản ánh những thay đổi đã được thực hiện. Và trong ví dụ này, sự thay đổi là NodeJS đã được cài đặt. Vì vậy, lần sau khi bạn cần chạy một container bằng cách sử dụng Ubuntu với NodeJS được cài đặt sẵn, hãy sử dụng hình ảnh mới. Hình ảnh cũng có thể được xây dựng từ những gì được gọi là một Dockerfile. Nhưng đó là một quá trình  liên quan nằm ngoài phạm vi của bài viết này.

     

    Bước 7 - Liệt kê Docker Containers

    Sau khi sử dụng Docker trong một thời gian, bạn sẽ có nhiều container hoạt động (đang chạy) và không hoạt động trên máy tính của mình. Để xem những active ones, hãy sử dụng:

    docker ps

    Bạn sẽ thấy đầu ra như thế này:

    output
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    f7c79cc556dd ubuntu "/bin/bash" 3 hours ago Up 3 hours silly_spence
     

    Để xem tất cả các containers — hoạt động và không hoạt động, chuyển qua chuyển đổi -a :

    docker ps -a

    Để xem container mới nhất mà bạn đã tạo, hãy chuyển nó thành chuyển đổi  -l :

    docker ps -l

    Ngừng một container đang chạy hoặc hoạt động đơn giản như gõ:

    docker stop container-id

     container-id có thể được tìm thấy trong output từ lệnh docker ps .

     

    Bước 8 — Đẩy hình ảnh Docker vào kho lưu trữ Docker

    Bước hợp lý tiếp theo sau khi tạo một hình ảnh mới từ một hình ảnh hiện có là chia sẻ nó với một số ít bạn bè của bạn, toàn thế giới trên Docker Hub hoặc đăng ký Docker khác mà bạn có quyền truy cập. Để đẩy một hình ảnh vào Docker Hub hoặc bất kỳ đăng ký Docker khác, bạn phải có một tài khoản ở đó.

    Phần này cho bạn thấy cách đẩy hình ảnh Docker vào Docker Hub. 

    Để tạo một tài khoản trên Docker Hub, hãy đăng ký tại Docker Hub. Sau đó, để đẩy hình ảnh của bạn, trước tiên hãy đăng nhập vào Docker Hub. Bạn sẽ được nhắc xác thực:

    docker login -u docker-registry-username

    Nếu bạn chỉ định mật khẩu chính xác, xác thực sẽ thành công. Sau đó, bạn có thể đẩy hình ảnh của riêng mình bằng cách sử dụng:

    docker push docker-registry-username/docker-image-name

    Nó sẽ mất khoảng thời gian để hoàn thành, và khi hoàn thành, đầu ra sẽ tương tự như sau:

    output
    The push refers to a repository [docker.io/finid/ubuntu-nodejs]
    e3fbbfb44187: Pushed
    5f70bf18a086: Pushed
    a3b5c80a4eba: Pushed
    7f18b442972b: Pushed
    3ce512daaf78: Pushed
    7aae4540b42d: Pushed
    ...
     

    Sau khi đẩy hình ảnh vào đăng ký, nó sẽ được liệt kê trên trang tổng quan của tài khoản của bạn, như hiển thị trong hình dưới đây.

    New Docker image listing on Docker Hub

    Nếu một nỗ lực đẩy dẫn đến lỗi của loại này, thì có thể bạn đã không đăng nhập:

    output
    The push refers to a repository [docker.io/finid/ubuntu-nodejs]
    e3fbbfb44187: Preparing
    5f70bf18a086: Preparing
    a3b5c80a4eba: Preparing
    7f18b442972b: Preparing
    3ce512daaf78: Preparing
    7aae4540b42d: Waiting
    unauthorized: authentication required
     

    Đăng nhập, sau đó lặp lại nỗ lực đẩy.

     

    Kết luận 

    Có rất nhiều thứ về Docker hơn là đã được đưa ra trong bài viết này, nhưng điều này là đủ để bạn bắt đầu làm việc với nó trên Ubuntu 16.04. Giống như hầu hết các dự án mã nguồn mở, Docker được xây dựng từ một codebase phát triển nhanh, vì vậy hãy tạo thói quen truy cập trang blog của dự án để biết thông tin mới nhất.