Loạt hội thảo trên web: Bắt đầu với Container
Bài viết này bổ sung chuỗi hội thảo trên web về triển khai và quản lý dung lượng công việc được chứa trong cloud . Loạt bài này bao gồm các yếu tố cơ bản của containers , bao gồm quản lý vòng đời của containers , triển khai ứng dụng đa containers , mở rộng dung lượng công việc và hiểu Kubernetes, cùng với nêu bật các phương pháp hay nhất để chạy các ứng dụng trạng thái.
Hướng dẫn này bao gồm các khái niệm và lệnh được đề cập trong phiên đầu tiên của loạt bài, Bắt đầu với Container.
Docker là một nền tảng để triển khai và quản lý các ứng dụng được container hóa. Vùng chứa phổ biến trong số các nhà phát triển, administrator và các kỹ sư phát triển do tính linh hoạt mà chúng cung cấp.
Docker có ba thành phần thiết yếu:
- Công cụ Docker
- Công cụ Docker
- Cơ quan đăng ký Docker
Docker Engine cung cấp các khả năng cốt lõi của việc quản lý containers . Nó giao tiếp với hệ điều hành Linux cơ bản để hiển thị các API đơn giản để đối phó với vòng đời của các container .
Docker Tools là một tập hợp các công cụ dòng lệnh nói chuyện với API do Docker Engine hiển thị. Chúng được sử dụng để chạy các containers , tạo hình ảnh mới, cấu hình lưu trữ và mạng cũng như thực hiện nhiều thao tác khác ảnh hưởng đến vòng đời của containers .
Docker Registry là nơi lưu trữ các containers images . Mỗi hình ảnh có thể có nhiều version được xác định thông qua các thẻ duy nhất. User kéo hình ảnh hiện có từ register và đẩy hình ảnh mới vào đó. Docker Hub là một nơi đăng ký được lưu trữ được quản lý bởi Docker, Inc. Cũng có thể chạy một register trong môi trường của bạn để giữ cho hình ảnh gần với công cụ hơn.
Đến cuối hướng dẫn này, bạn sẽ cài đặt Docker trên DigitalOcean Server, containers được quản lý, làm việc với hình ảnh, thêm tính bền bỉ và cài đặt register riêng.
Yêu cầu
Để làm theo hướng dẫn này, bạn cần :
Một Ubuntu 16.04 Server được cài đặt theo hướng dẫn cài đặt server ban đầu Ubuntu 16.04 này , bao gồm user không phải root có quyền sudo và firewall .
Một tài khoản Docker Hub . Tổng quan về Docker Hub này sẽ giúp bạn bắt đầu.
Theo mặc định, lệnh docker
yêu cầu quyền root. Tuy nhiên, bạn có thể thực thi lệnh mà không có tiền tố sudo
bằng cách chạy docker
với quyền user trong group docker .
Để cấu hình Server theo cách này, hãy chạy lệnh sudo usermod -aG docker ${USER}
. Thao tác này sẽ thêm user hiện tại vào group docker
. Sau đó, chạy lệnh su - ${USER}
để áp dụng tư cách thành viên group mới.
Hướng dẫn này hy vọng rằng server của bạn được cấu hình để chạy lệnh docker
mà không có tiền tố sudo
.
Bước 1 - Cài đặt Docker
Sau khi SSHing vào Server, hãy chạy các lệnh sau để xóa mọi gói liên quan đến docker hiện có có thể đã được cài đặt và sau đó cài đặt Docker từ repository chính thức:
- sudo apt-get remove docker docker-engine docker.io
- sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- sudo apt-key fingerprint 0EBFCD88
- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- sudo apt-get update
- sudo apt-get install -y docker-ce
Sau khi cài đặt Docker, hãy xác minh cài đặt bằng các lệnh sau:
- docker info
Lệnh trên hiển thị các chi tiết của Docker Engine được triển khai trong môi trường. Lệnh tiếp theo xác minh Công cụ Docker được cài đặt và cấu hình đúng cách. Nó sẽ in version của cả Docker Engine và Tools.
- docker version
Bước 2 - Chạy containers
Vùng chứa Docker được chạy từ các hình ảnh hiện có được lưu trữ trong register . Hình ảnh trong Docker có thể được lưu trữ trong repository riêng tư hoặc công khai. Kho riêng yêu cầu user xác thực trước khi kéo ảnh. Hình ảnh công khai có thể được truy cập bởi bất kỳ ai.
Để tìm kiếm một hình ảnh có tên hello-world
, hãy chạy lệnh:
- docker search hello-world
Có thể có nhiều hình ảnh phù hợp với tên hello-world
. Chọn hình ảnh có số sao tối đa, cho biết mức độ phổ biến của hình ảnh.
Kiểm tra các hình ảnh có sẵn trong môi trường local của bạn bằng lệnh sau:
- docker images
Vì ta chưa chạy bất kỳ containers nào nên sẽ không có bất kỳ hình ảnh nào. Bây giờ ta có thể download hình ảnh và chạy nó local :
- docker pull hello-world
- docker run hello-world
Nếu ta thực hiện lệnh docker run
mà không kéo hình ảnh, thì Docker Engine đầu tiên sẽ kéo hình ảnh và sau đó chạy nó. Chạy lệnh docker images
cho thấy rằng ta có sẵn image hello-world
local .
Hãy chạy một containers có ý nghĩa hơn: một web server Apache.
- docker run -p 80:80 --name web -d httpd
Bạn có thể nhận thấy các tùy chọn bổ sung được chuyển đến lệnh docker run
. Dưới đây là giải thích về các lựa chọn này:
-
-p
- Điều này cho Docker Engine để lộ cổng của container80
trên server lưu trữ cổng80
. Vì Apache lắng nghe trên cổng80
, ta cần hiển thị nó trên cổng server . -
--name
- Lựa chọn này chỉ định tên cho containers đang chạy của ta . Nếu ta bỏ qua điều này, Docker Engine sẽ chỉ định một tên ngẫu nhiên. -
-d
- Tùy chọn này hướng dẫn Docker Engine chạy containers ở chế độ tách rời. Nếu không có điều này, containers sẽ được chạy ở phía trước, chặn quyền truy cập vào shell . Bằng cách đẩy containers vào nền, ta có thể tiếp tục sử dụng shell trong khi containers vẫn đang chạy.
Để xác minh containers của ta thực sự đang chạy trong nền, hãy thử lệnh sau:
- docker ps
Kết quả cho thấy rằng containers có tên web
đang chạy với cổng 80
được ánh xạ tới cổng 80
của server .
Bây giờ hãy truy cập vào web server :
- curl localhost
Hãy dừng và xóa containers đang chạy bằng các lệnh sau:
- docker stop web
- docker rm web
Chạy docker ps
xác nhận containers đã kết thúc.
Bước 3 - Thêm bộ nhớ vào containers
Các container là phù du, nghĩa là bất kỳ thứ gì được lưu trữ trong một container sẽ bị mất khi thùng đó kết thúc. Để duy trì dữ liệu ngoài vòng đời của một containers , ta cần đính kèm một ổ đĩa vào containers . Dung lượng là các folder từ hệ thống file server .
Bắt đầu bằng cách tạo một folder mới trên server :
- mkdir htdocs
Bây giờ, hãy chạy containers với một lựa chọn mới để mount folder htdocs
, trỏ nó đến folder root của web server Apache:
- docker run -p 80:80 --name web -d -v $PWD/htdocs:/usr/local/apache2/htdocs httpd
Lựa chọn -v
trỏ folder htdocs
trong containers đến hệ thống file của server . Mọi thay đổi được thực hiện đối với folder này sẽ được hiển thị ở cả hai địa điểm.
Truy cập folder từ containers bằng cách chạy lệnh:
- docker exec -it web /bin/bash
Lệnh này gắn terminal của ta vào vỏ của các containers trong một chế độ tương tác. Bạn sẽ thấy rằng bây giờ bạn đã bị rơi bên trong hộp đựng.
Điều hướng đến folder htdocs
và tạo một file HTML đơn giản. Cuối cùng, thoát khỏi shell để quay lại server :
- cd /usr/local/apache2/htdocs
- echo '<h1>Hello World from Container</h1>' > index.html
- exit
Việc thực thi lại lệnh curl localhost
cho thấy rằng web server đang trả về trang mà ta đã tạo.
Ta không chỉ có thể truy cập file này từ server mà còn có thể sửa đổi nó:
- cd htdocs
- cat index.html
- echo '<h1>Hello World from Host</h1>' | sudo tee index.html >/dev/null
Chạy curl localhost
xác nhận web server đang cung cấp trang mới nhất được tạo từ server .
Kết thúc containers bằng lệnh sau. ( -f
buộc Docker chấm dứt mà không dừng trước.)
- docker rm -f web
Bước 4 - Xây dựng hình ảnh
Ngoài việc chạy các hình ảnh hiện có từ register , ta có thể tạo hình ảnh của riêng mình và lưu trữ chúng trong register .
Bạn có thể tạo hình ảnh mới từ các containers hiện có. Các thay đổi được thực hiện đối với containers được commit đầu tiên và sau đó các hình ảnh được gắn thẻ và đẩy vào register .
Hãy chạy lại containers httpd
và sửa đổi tài liệu mặc định:
- docker run -p 80:80 --name web -d httpd
- docker exec -it web /bin/bash
- cd htdocs
- echo '<h1>Welcome to my Web Application</h1>' > index.html
- exit
Vùng chứa hiện đang chạy với một index.html
tùy chỉnh. Bạn có thể xác minh nó với curl localhost
.
Trước khi ta commit containers đã thay đổi, bạn nên dừng nó lại. Sau khi nó dừng, ta sẽ chạy lệnh commit :
- docker stop web
- docker commit web doweb
Xác nhận việc tạo hình ảnh bằng lệnh docker images
. Nó hiển thị hình ảnh doweb
mà ta vừa tạo.
Để gắn thẻ và lưu trữ hình ảnh này trong Docker Hub, hãy chạy các lệnh sau để đẩy hình ảnh của bạn vào register công khai:
- docker login
- docker tag your_docker_hub_username/doweb
- docker push your_docker_hub_username/doweb
Bạn có thể xác minh hình ảnh mới bằng cách tìm kiếm trong Docker Hub từ trình duyệt hoặc dòng lệnh.
Bước 5 - Chạy Register Riêng tư
Có thể chạy register trong môi trường riêng tư để giữ cho hình ảnh an toàn hơn. Nó cũng làm giảm độ trễ giữa Docker Engine và repository hình ảnh.
Docker Registry có sẵn dưới dạng một containers có thể được chạy giống như bất kỳ containers nào khác. Vì register chứa nhiều hình ảnh, nên bạn nên đính kèm một dung lượng lưu trữ vào đó.
- docker run -d -p 5000:5000 --restart=always --name registry -v $PWD/registry:/var/lib/registry registry
Lưu ý containers được chạy trong nền với cổng 5000
hiển thị và folder registry
được ánh xạ tới hệ thống file server . Bạn có thể xác minh containers đang chạy bằng cách chạy lệnh docker ps
.
Bây giờ ta có thể gắn thẻ một hình ảnh local và đẩy nó vào register riêng. Trước tiên, hãy kéo containers busybox
từ Docker Hub và gắn thẻ nó.
- docker pull busybox
- docker tag busybox localhost:5000/busybox
- docker images
Lệnh trước xác nhận containers busybox
hiện đã được gắn thẻ localhost:5000
, vì vậy hãy đẩy hình ảnh vào register riêng tư.
- docker push localhost:5000/busybox
Với hình ảnh được đẩy vào register local , hãy thử xóa nó khỏi môi trường và kéo nó trở lại khỏi register .
- docker rmi -f localhost:5000/busybox
- docker images
- docker pull localhost:5000/busybox
- docker images
Ta đã trải qua toàn bộ vòng tròn kéo hình ảnh, gắn thẻ, đẩy nó vào register local , và cuối cùng, kéo nó trở lại.
Có thể có những trường hợp bạn muốn chạy register riêng trong một server chuyên dụng. Docker Engine chạy trong các máy khác nhau sẽ nói chuyện với register từ xa để kéo và đẩy hình ảnh.
Vì register không được bảo mật, ta cần sửa đổi cấu hình của Docker Engine để cho phép truy cập vào register không an toàn. Để làm điều này, chỉnh sửa daemon.json
file nằm ở /etc/docker/daemon.json
. Tạo file nếu nó không tồn tại.
Thêm mục nhập sau:
{ "insecure-registries" : ["REMOTE_REGISTRY_HOST:5000"] }
Thay thế REMOTE_REGISTRY_HOST
bằng tên server hoặc địa chỉ IP của register từ xa. Khởi động lại Docker Engine đảm bảo rằng các thay đổi cấu hình được áp dụng.
Kết luận
Hướng dẫn này đã giúp bạn bắt đầu với Docker. Nó bao gồm các khái niệm cơ bản bao gồm cài đặt, quản lý containers , quản lý hình ảnh, lưu trữ và đăng ký riêng. Các phiên và bài viết sắp tới trong loạt bài này sẽ giúp bạn vượt ra ngoài những điều cơ bản về Docker.
Các tin liên quan