Cách cài đặt và sử dụng Docker trên Debian 10
Docker là một ứng dụng giúp đơn giản hóa quá trình quản lý các tiến trình ứng dụng trong vùng chứa . Vùng chứa cho phép bạn chạy các ứng dụng của bạn trong các quy trình cách ly tài nguyên. Chúng tương tự như máy ảo, nhưng các container 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 server .Để có giới thiệu chi tiết về các thành phần khác nhau của containers Docker, hãy xem Hệ sinh thái Docker: Giới thiệu về các thành phần chung .
Trong hướng dẫn này, bạn sẽ cài đặt và sử dụng Docker Community Edition (CE) trên Debian 10. Bạn sẽ tự cài đặt Docker, làm việc với các containers và hình ảnh cũng như đẩy hình ảnh vào Kho lưu trữ Docker.
Yêu cầu
Để làm theo hướng dẫn này, bạn cần những thứ sau:
- Một server Debian 10 được cài đặt theo hướng dẫn cài đặt server ban đầu Debian 10 , bao gồm user không phải root có quyền sudo và firewall .
- Một account trên Docker Hub nếu bạn muốn tạo hình ảnh của riêng mình và đẩy chúng vào Docker Hub, như trong Bước 7 và 8.
Bước 1 - Cài đặt Docker
Gói cài đặt Docker có sẵn trong repository lưu trữ Debian chính thức có thể không phải là version mới nhất. Để đảm bảo ta nhận được version mới nhất, ta sẽ cài đặt Docker từ repository Docker chính thức. Để làm điều đó, ta sẽ thêm một nguồn gói mới, thêm khóa GPG từ Docker đảm bảo download hợp lệ, sau đó cài đặt gói.
Trước tiên, hãy cập nhật danh sách gói hiện có của bạn:
- sudo apt update
Tiếp theo, cài đặt một vài gói yêu cầu cho phép apt
sử dụng các gói qua HTTPS:
- sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common
Sau đó, thêm khóa GPG cho repository Docker chính thức vào hệ thống của bạn:
- curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
Thêm repository Docker vào các nguồn APT:
- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
Tiếp theo, cập nhật database gói với các gói Docker từ repo mới được thêm vào:
- sudo apt update
Đảm bảo rằng bạn sắp cài đặt từ kho Docker thay vì kho Debian mặc định:
- apt-cache policy docker-ce
Bạn sẽ thấy kết quả như thế này, mặc dù số version cho Docker có thể khác:
ocker-ce: Installed: (none) Candidate: 5:18.09.7~3-0~debian-buster Version table: 5:18.09.7~3-0~debian-buster 500 500 https://download.docker.com/linux/debian buster/stable amd64 Packages
Lưu ý docker-ce
chưa được cài đặt, nhưng thành phần để cài đặt là từ repository Docker cho Debian 10 ( buster
).
Cuối cùng, cài đặt Docker:
- sudo apt install docker-ce
Docker hiện đã được cài đặt, service được chạy và quá trình được kích hoạt để bắt đầu khi server khởi động . Kiểm tra xem nó đang chạy:
- sudo systemctl status docker
Đầu ra sẽ tương tự như sau, cho thấy rằng dịch vụ đang đ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 Mon 2019-07-08 15:11:19 UTC; 58s ago Docs: https://docs.docker.com Main PID: 5709 (dockerd) Tasks: 8 Memory: 31.6M CGroup: /system.slice/docker.service └─5709 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Cài đặt Docker cung cấp cho bạn không chỉ dịch vụ Docker (daemon) mà còn cả tiện ích dòng lệnh docker
hoặc ứng dụng client Docker. Ta sẽ khám phá cách sử dụng lệnh docker
ở phần sau trong hướng dẫn này.
Bước 2 - Thực thi lệnh Docker mà không cần Sudo (Tùy chọn)
Theo mặc định, lệnh docker
chỉ có thể được chạy bởi user root hoặc bởi user trong group docker , lệnh này được tạo tự động trong quá trình cài đặt của Docker. Nếu bạn cố gắng chạy docker
lệnh mà không đặt trước từ đó sudo
hoặc không là ở group Docker, bạn sẽ nhận được một kết quả như thế này:
Outputdocker: 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 nhập sudo
khi nào bạn chạy lệnh docker
, hãy thêm tên user của bạn vào group docker
:
- sudo usermod -aG docker ${USER}
Để áp dụng tư cách thành viên group mới, hãy đăng xuất khỏi server và đăng nhập lại hoặc chạy lệnh sau :
- su - ${USER}
Bạn sẽ được yêu cầu nhập password của user để tiếp tục.
Xác nhận user của bạn hiện đã được thêm vào group docker bằng lệnh :
- id -nG
Outputsammy sudo docker
Nếu bạn cần thêm user vào group docker
mà bạn chưa đăng nhập, hãy khai báo tên user đó 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ả sử bạn đang chạy lệnh docker
với quyền là user trong group docker . Nếu bạn chọn không, vui lòng thêm các lệnh với sudo
.
Tiếp theo ta hãy khám phá lệnh docker
.
Bước 3 - Sử dụng lệnh Docker
Sử dụng docker
bao gồm việc chuyển cho nó một chuỗi các tùy chọn và lệnh theo sau là các đối số. Cú pháp có dạng sau:
- docker [option] [command] [arguments]
Để xem tất cả các lệnh con có sẵn, hãy nhập:
- docker
Kể từ Docker 18, danh sách đầy đủ các lệnh con có sẵn bao gồm:
Outputattach Attach local standard input, output, and error streams 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 to files or directories 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 Docker objects kill Kill one or more running containers 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 pause Pause all processes within one or more containers 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 one or more containers 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 (streamed to STDOUT by default) 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 one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes
Để xem các tùy chọn 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
Hãy cùng khám phá một số lệnh này. Ta sẽ bắt đầu bằng cách làm việc với hình ảnh.
Bước 4 - Làm việc với Docker Images
Docker container được xây dựng từ Docker image . Theo mặc định, Docker kéo những hình ảnh này từ Docker Hub , một nơi đă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ể lưu trữ Docker image 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 mà bạn cần sẽ có hình ảnh được lưu trữ ở đó.
Để kiểm tra xem bạn có thể truy cập và download hình ảnh từ Docker Hub hay không, hãy nhập:
- docker run hello-world
Kết quả kết quả sẽ cho biết Docker hoạt động chính xác:
OutputUnable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ...
Docker ban đầu không thể tìm thấy hình ảnh hello-world
local , vì vậy nó đã download hình ảnh từ Docker Hub, đây là repository mặc định . Sau khi hình ảnh được download , Docker đã tạo một containers từ hình ảnh và ứng dụng trong containers được thực thi, hiển thị thông báo.
Bạn có thể tìm kiếm hình ảnh có sẵn trên Docker Hub bằng cách sử dụng lệnh docker
với lệnh con 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 dữ liệu Docker Hub và trả về danh sách tất cả các hình ảnh có tên trùng với chuỗi tìm kiếm. Trong trường hợp này, kết quả sẽ tương tự như sau:
OutputNAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating sys… 9704 [OK] dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 319 [OK] rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 224 [OK] consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 183 [OK] ubuntu-upstart Upstart is an event-based replacement for th… 99 [OK] ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 97 [OK] neurodebian NeuroDebian provides neuroscience research s… 57 [OK] 1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 50 [OK] ubuntu ...
Trong cột CHÍNH THỨC , OK cho biết hình ảnh được xây dựng và hỗ trợ bởi tổ chức đứ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 bạn bằng cách sử dụng lệnh con pull
.
Thực thi lệnh sau để tải hình ảnh ubuntu
chính thức xuống máy tính của bạn:
- docker pull ubuntu
Bạn sẽ thấy kết quả sau:
OutputUsing default tag: latest latest: Pulling from library/ubuntu 5b7339215d1d: Pull complete 14ca88e9f672: Pull complete a31c3b1caad4: Pull complete b054a26005b7: Pull complete Digest: sha256:9b1702dcfe32c873a770a32cfd306dd7fc1c4fd134adfb783db68defc8894b3c Status: Downloaded newer image for ubuntu:latest
Sau khi một hình ảnh đã được download , bạn có thể chạy containers bằng cách sử dụng hình ảnh đã download với lệnh con run
. Như bạn đã thấy với ví dụ hello-world
, nếu một hình ảnh chưa được download khi docker
được thực thi với lệnh con run
, thì ứng dụng client Docker trước tiên sẽ download hình ảnh, sau đó chạy một containers bằng cách sử dụng nó.
Để xem các hình ảnh đã được download máy tính của bạn, hãy nhập:
- docker images
Đầu ra sẽ giống như sau:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 4c108a37151f 2 weeks ago 64.2MB hello-world latest fce289e99eb9 6 months ago 1.84kB
Như bạn sẽ thấy ở phần sau của hướng dẫn này, hình ảnh mà bạn sử dụng để chạy containers có thể được sửa đổi và sử dụng để tạo hình ảnh mới, sau đó có thể được tải lên (được đẩy là thuật ngữ kỹ thuật) lên Docker Hub hoặc các tổ chức đăng ký Docker khác.
Hãy xem cách chạy các containers chi tiết hơn.
Bước 5 - Chạy Docker Container
Vùng chứa hello-world
mà bạn đã chạy ở bước trước là một ví dụ về containers chạy và thoát sau khi gửi thông báo thử nghiệm. Các containers có thể hữu ích hơn thế nhiều và chúng có thể tương tác. Xét cho cùng, chúng tương tự như máy ảo, chỉ thân thiện hơn với tài nguyên.
Ví dụ, hãy chạy một containers bằng hình ảnh mới nhất của Ubuntu. Sự kết hợp của các lựa chọn -i và -t cho phép bạn truy cập shell tương tác vào containers :
- docker run -it ubuntu
Dấu nhắc lệnh của bạn sẽ thay đổi để cho biết là bạn hiện đang làm việc bên trong containers và sẽ có dạng sau:
Outputroot@d9b100f2f636:/#
Lưu ý id containers trong dấu nhắc lệnh. Trong ví dụ này, nó là d9b100f2f636
. Sau này, bạn cần ID containers đó để xác định containers khi bạn muốn xóa nó.
Đến đây bạn có thể chạy bất kỳ lệnh nào bên trong containers . Ví dụ: hãy cập nhật database gói bên trong containers . Bạn không cần đặt trước bất kỳ lệnh nào với sudo
, vì bạn đang hoạt động bên trong containers với quyền là user root :
- apt update
Sau đó cài đặt bất kỳ ứng dụng nào trong đó. Hãy cài đặt Node.js:
- apt install nodejs
Điều này sẽ cài đặt Node.js trong containers từ repository chính thức của Ubuntu. Khi quá trình cài đặt kết thúc, hãy xác minh Node.js đã được cài đặt:
- node -v
Bạn sẽ thấy số version được hiển thị trong terminal của bạn :
Outputv8.10.0
Mọi thay đổi bạn thực hiện bên trong containers chỉ áp dụng cho containers đó.
Để thoát khỏi containers , hãy nhập exit
tại dấu nhắc .
Tiếp theo hãy xem cách quản lý các containers trên hệ thống của ta .
Bước 6 - Quản lý containers Docker
Sau khi sử dụng Docker một thời gian, bạn sẽ có nhiều containers hoạt động (đang chạy) và không hoạt động trên máy tính của bạn . Để xem những cái đang hoạt động , hãy sử dụng:
- docker ps
Bạn sẽ thấy kết quả tương tự như sau:
OutputCONTAINER ID IMAGE COMMAND CREATED
Trong hướng dẫn này, bạn đã bắt đầu hai containers ; một từ hình ảnh hello-world
và một từ hình ảnh ubuntu
. Cả hai containers không còn chạy nữa, nhưng chúng vẫn tồn tại trên hệ thống.
Để xem tất cả các containers - đang hoạt động và không hoạt động, hãy chạy docker ps
bằng lựa chọn -a
:
- docker ps -a
Bạn sẽ thấy kết quả tương tự như sau:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d42d0bbfbd35 ubuntu "/bin/bash" About a minute ago Exited (0) 20 seconds ago friendly_volhard 0740844d024c hello-world "/hello" 3 minutes ago Exited (0) 3 minutes ago elegant_neumann
Để xem containers mới nhất bạn đã tạo, hãy chuyển nó qua lựa chọn -l
:
- docker ps -l
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- d42d0bbfbd35 ubuntu "/bin/bash" About a minute ago Exited (0) 34 seconds ago friendly_volhard
Để bắt đầu một containers đã dừng, hãy sử dụng docker start
, theo sau là ID containers hoặc tên của containers . Hãy bắt đầu containers dựa trên Ubuntu với ID là d9b100f2f636
:
- docker start d42d0bbfbd35
Vùng chứa sẽ bắt đầu và bạn có thể sử dụng docker ps
để xem trạng thái của nó:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d42d0bbfbd35 ubuntu "/bin/bash" About a minute ago Up 8 seconds friendly_volhard
Để dừng một containers đang chạy, hãy sử dụng docker stop
, theo sau là ID hoặc tên containers . Lần này, ta sẽ sử dụng tên mà Docker đã gán cho containers , đó là friendly_volhard
:
- docker stop friendly_volhard
Sau khi bạn quyết định không cần containers nữa, hãy xóa nó bằng lệnh docker rm
, sử dụng ID containers hoặc tên. Sử dụng lệnh docker ps -a
để tìm ID containers hoặc tên cho containers được liên kết với hình ảnh hello-world
và xóa nó.
- docker rm elegant_neumann
Bạn có thể bắt đầu một containers mới và đặt tên cho nó bằng cách sử dụng lựa chọn --name
. Bạn cũng có thể sử dụng lựa chọn --rm
để tạo một containers tự loại bỏ khi nó dừng lại. Xem lệnh docker run help
để biết thêm thông tin về các tùy chọn này và các tùy chọn khác.
Các containers có thể được chuyển thành hình ảnh mà bạn có thể sử dụng để xây dựng các containers mới. Hãy xem nó hoạt động như thế nào.
Bước 7 - Commit các thay đổi trong containers thành Docker image
Khi bạn khởi động Docker image , bạn có thể tạo, sửa đổi và xóa các file giống như bạn có thể làm với máy ảo. Những thay đổi bạn thực hiện sẽ chỉ áp dụng cho containers đó. Bạn có thể bắt đầu và dừng nó, nhưng một khi bạn xóa nó bằng lệnh docker rm
, các thay đổi sẽ bị mất.
Phần này hướng dẫn bạn cách lưu trạng thái của containers dưới dạng Docker image mới.
Sau khi cài đặt Node.js bên trong containers Ubuntu, bây giờ bạn có một containers đang chạy trên một hình ảnh, nhưng containers khác với hình ảnh bạn đã sử dụng để tạo nó. Nhưng bạn có thể cần sử dụng lại containers Node.js này làm cơ sở cho các hình ảnh mới sau này.
Sau đó, commit các thay đổi đối với version Docker image mới bằng lệnh sau.
- docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name
Lựa chọn -m dành cho thông báo commit giúp bạn và những 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à cái 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 repository trên Docker Hub, repository
thường là tên user Docker Hub của bạn.
Ví dụ: đối với sammy user , với ID containers là d9b100f2f636
, lệnh sẽ là:
- docker commit -m "added Node.js" -a "sammy" d42d0bbfbd35 sammy/ubuntu-nodejs
Khi bạn commit một hình ảnh, hình ảnh mới sẽ được lưu local trên máy tính của bạn. Phần sau của hướng dẫn này, bạn sẽ học cách đẩy hình ảnh vào register Docker như Docker Hub để những người khác có thể truy cập vào nó.
Liệt kê các Docker image sẽ hiển thị hình ảnh mới, cũng như hình ảnh cũ mà nó được kế thừa từ :
- docker images
Bạn sẽ thấy kết quả như thế này:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE sammy/ubuntu-nodejs latest d441c62350b4 10 seconds ago 152MB ubuntu latest 4c108a37151f 2 weeks ago 64.2MB hello-world latest fce289e99eb9 6 months ago 1.84kB
Trong ví dụ này, 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 về kích thước phản ánh những thay đổi đã được thực hiện. Và trong ví dụ này, thay đổi là NodeJS đã được cài đặt. Vì vậy, lần tới khi bạn cần chạy containers bằng Ubuntu với NodeJS được cài đặt sẵn, bạn chỉ có thể sử dụng hình ảnh mới.
Bạn cũng có thể tạo Hình ảnh từ Dockerfile
, cho phép bạn tự động cài đặt phần mềm trong một hình ảnh mới. Tuy nhiên, điều đó nằm ngoài phạm vi của hướng dẫn này.
Bây giờ hãy chia sẻ hình ảnh mới với những người khác để họ có thể tạo containers từ nó.
Bước 8 - Đẩy Docker image 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 vài người bạn được chọn của bạn, cả thế giới trên Docker Hub hoặc register Docker khác mà bạn có quyền truy cập. Để đẩy một hình ảnh lên Docker Hub hoặc tổ chức đăng ký Docker nào khác, bạn phải có account ở đó.
Phần này hướng dẫn bạn cách đẩy một Docker image vào Docker Hub. Để tìm hiểu cách tạo register Docker riêng của bạn, hãy xem Cách cài đặt register Docker riêng trên Ubuntu 14.04 .
Để đẩy hình ảnh của bạn, trước tiên hãy đăng nhập vào Docker Hub.
- docker login -u docker-registry-username
Bạn sẽ được yêu cầu xác thực bằng password Docker Hub của bạn . Nếu bạn chỉ định password chính xác, xác thực sẽ thành công.
Lưu ý: Nếu tên user đăng ký Docker của bạn khác với tên user local bạn đã sử dụng để tạo hình ảnh, bạn sẽ phải gắn thẻ hình ảnh của bạn bằng tên user đăng ký. Đối với ví dụ được đưa ra trong bước cuối cùng, bạn sẽ nhập:
- docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs
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
Để đẩy hình ảnh ubuntu-nodejs
vào repository sammy , lệnh sẽ là:
- docker push sammy/ubuntu-nodejs
Quá trình này có thể mất một chút thời gian để hoàn thành vì quá trình tải hình ảnh lên, nhưng khi hoàn tất, kết quả sẽ giống như sau:
OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Pushed 5f70bf18a086: Pushed a3b5c80a4eba: Pushed 7f18b442972b: Pushed 3ce512daaf78: Pushed 7aae4540b42d: Pushed ...
Sau khi đẩy hình ảnh vào register , hình ảnh đó sẽ được liệt kê trên trang tổng quan của account của bạn, giống như hiển thị trong hình ảnh bên dưới.
Nếu một việc push dẫn đến lỗi thuộc loại này, thì có thể bạn đã không đăng nhập:
OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Preparing 5f70bf18a086: Preparing a3b5c80a4eba: Preparing 7f18b442972b: Preparing 3ce512daaf78: Preparing 7aae4540b42d: Waiting unauthorized: authentication required
Đăng nhập bằng docker login
và lặp lại việc push . Sau đó, xác minh nó tồn tại trên trang repository Docker Hub của bạn.
Đến đây bạn có thể sử dụng docker pull sammy / ubuntu-nodejs
để kéo hình ảnh sang một máy mới và sử dụng nó để chạy một containers mới.
Kết luận
Trong hướng dẫn này, bạn đã cài đặt Docker, làm việc với hình ảnh và containers cũng như đẩy hình ảnh đã sửa đổi vào Docker Hub. Đến đây bạn đã biết những điều cơ bản, hãy khám phá các hướng dẫn Docker khác trong Cộng đồng DigitalOcean.
Các tin liên quan
Cách sử dụng server Docker từ xa để tăng tốc quy trình làm việc của bạn2019-06-25
Cách cài đặt WordPress với Docker Compose
2019-05-24
Cách di chuyển Docker compose workflow sang Kubernetes
2019-04-03
Cách tối ưu hóa image Docker cho sản xuất
2019-03-25
Giữ lại một ứng dụng Node.js để phát triển với Docker Compose
2019-03-05
Cách cài đặt và sử dụng Docker Compose trên CentOS 7
2019-01-23
Cách sử dụng Traefik làm reverse-proxy cho container Docker trên Debian 9
2019-01-08
Cách thiết lập registry Docker riêng trên Ubuntu 18.04
2019-01-07
Cách thiết lập triển khai nhiều node với Rancher 2.1, Kubernetes và Docker Machine trên Ubuntu 18.04
2019-01-03
Cách tạo ứng dụng Node.js với Docker
2018-11-29