Cách cài đặt và sử dụng Docker trên CentOS 7

2 năm trước

Cách cài đặt và sử dụng Docker trên CentOS 7

 

Docker là một ứng dụng giúp việc chạy các tiến trình của ứng dụng trong một container trở nên đơn giản và dễ dàng hơn ( container gần giống với các máy ảo nhưng có thể được dịch chuyển, thân thiện với tài nguyên hiwn và phụ thuộc hơn vào hệ điều hành).

Có hai cách để cài đặt Docker trên CentOS 7. Một cách cần đến một số bản cài đặt của hệ điều hành. Cách còn lại là dùng một tool tên là Docker Machine để cài đặt tự động Docker trên server.

Bài viết này hướng dẫn bạn cách cài Docker dựa trên một bản cài đặt của CentOS 7.

 

Yêu cầu

Note: Docker yêu cầu bản 64 bit của CentOS 7 và phiên bản kernel từ 3.10 trở lên. Cloud Server CentOS 7 64 bit mặc định của ViCloud thỏa mãn những yêu cầu trên

Tất cả các lệnh dưới đây đều được chạy với quyền sudo.

 

Bước 1 — Cài Docker

 

Đầu tiên ta cần package database:

sudo yum check-update

Sau đó chạy lệnh này để thêm vào Docker repository, tải và cài đặt phiên bản mới nhất của nó.

curl -fsSL https://get.docker.com/ | sh

 

Khởi động Docker daemon:

sudo systemctl start docker

Kiểm tra lại với lệnh

sudo systemctl status docker

 

Nếu Docker đã được khởi động, output sẽ như sau:

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)
 

Cho phép Docker tựu khởi động khi server boot:

sudo systemctl enable docker

 

Quá trình trên không chỉ cài Docker service (daemon) mà còn cài cả cả tiện ích dòng lệnh docker , hay Docker client. Ta sẽ học cash sử dụng lệnh docker ở phần sau.

 

Bước 2 — Thực hiện lệnh Docker không cần quyền Sudo (tùy chọn)

 

Mặc định, lệnh docker yêu cầu quyền root — nghĩa là trước lệnh phải có từ khóa sudo. Nó cũng cso thể được chạy bởi một user trong docker group được tạo tự động khi cài Docker. Nếu chạy lệnh docker không với quyền sudo hay user trong docker group, bạn sẽ nhận được thông báo:

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

Nếu không muốn thêm sudo vào trước lệnh docker , thêm username của bạn vào docker group:

sudo usermod -aG docker $(whoami)

 

Log out sau đó log in lại server để áp dụng thay đổi.

Dùng lệnh sau để thêm một user đang không đăng nhập bất kì vào docker group

sudo usermod -aG docker username

 

Để cho đơn giản, các lệnh phía dưới được giả định rằng được thực hiện bởi một user trong docker group. Nếu đang dùng một user khác, bạn cần thêm sudo vào trước mỗi lệnh

 

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

 

Lệnh docker một chuỗi tùy chọn , lệnh con, cuối cùng là đối số. Cú pháp cụ thể như sau:

docker [option] [command] [arguments]

 

Để xem tất cả các lệnh con, gõ:

docker

 

Với Docker 1.11.1, danh sách các lệnh con sẽ như sau:

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 tùy chỉnh của một lệnh con:

docker docker-subcommand --help

 

Để xem cụ thể một lệnh con, gõ:

docker info

 

 

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

Docker container được chạy từ các Docker image. Mặc định, container lấy các image từ Docker Hub (là kho image của Docker). Bất cứ ai cũng có thể tạo và host các Docker image trên Docker Hub, nên hầu hết các phần mềm và bản phân phối Linux ban cần để chạy Docker container đã đưuọc xây dựng trên một image có sẵn trên Docker Hub.

Để kiểm tra xem bạn có thể truy cập và tải các image từ Docker Hub không, gõ:

docker run hello-world

 

Nếu ouput chứa đoạn sau thì Docker đang hoạt động bình thường.

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 image có sẵn trên Docker Hub với lệnh docker cùng lệnh con search. Ví dụ, nếu muốn tìm image của Centos, gõ lệnh:

docker search centos

 

Bạn sẽ thu được một danh sách các image như sau:

OutputNAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 2224 [OK] 
jdeathe/centos-ssh CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8... 22 [OK]
jdeathe/centos-ssh-apache-php CentOS-6 6.7 x86_64 / Apache / PHP / PHP M... 17 [OK]
million12/centos-supervisor Base CentOS-7 with supervisord launcher, h... 11 [OK]
nimmis/java-centos This is docker images of CentOS 7 with dif... 10 [OK]
torusware/speedus-centos Always updated official CentOS docker imag... 8 [OK]
nickistre/centos-lamp LAMP on centos setup 3 [OK]
...
 
 

Ở cột OFFICIAL , OK biều thị cho image được xây dựng và hỗ trợ bởi chính nhà phát triển của phần mềm đó. Dùng lệnh con pull để tải về một image, chẳng hạn:

docker pull centos

 

Sau khi tải về image, bạn có thể dùng lệnh con run để chạy nó.

docker run centos

 

Để xem danh sach các image đã được download về máy của bạn, dùng lệnh:

docker images

 

Output sẽ gần giống với:

[secondary_lable Output]
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 778a53015523 5 weeks ago 196.7 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B

 

 

Bước 5 — Chạy Docker Container

 

Container hello-world vừa được chạy ở bước trước là một ví dụ cho một container chạy xong đso thoát sau khi phát ra một thông điệp. Tuy nhiên container còn có thể là được rất nhiều điều hơn thế, vì nó gần tương tự với một máy ảo, chỉ khác biệt ở chỗ dùng ít tài nguyên hơn.

Thử chạy một container sử dụng image mới nhất của Centos. Các switch -i và -t cho phép kết nối SSH đến container:

docker run -it centos

 

Command promt của bạn sẽ thay đổi một chút:

Output[root@59839a1b7de2 /]#
 
 

Lưu ý quan trọng: Chú ý vào ID của container trong command prompt. Ở ví dụ trên nó là 59839a1b7de2.

Giờ hãy thừ chạy một số lệnh để cài thêm các phần mềm cho container, Giả sử nếu muốn cài MariaDB, ta dùng lệnh sau:

yum install mariadb-server

 

 

Bước 6 — Chuyển các thay đổi trong Container ra Docker Image

 

Khi khởi động Docker image, bạn có thể tạo mới, chỉnh sửa hoặc xóa các file như trên một máy ảo thông thường. Các thay đổi đó chỉ có hiệu lực với container đó. Khi xóa một container với lệnh docker rm , tất cả các thay đổi sẽ bị mất.

Bước này sẽ hướng dẫn bạn cách lưu trạng thái của container ra một Docker image.

Sau khi cài MariaDB server bên trong CentOS container, bạn đã có một container đang chạy ở một trạng thái khác với image ban đầu được nạp vào nó.

Để lưu trạng thái của container, đầu tiên hãy thoát khỏi nó.

exit 

 

Sau đó dùng lệnh sau để xác thực các thay đổi được lưu trên container sang Docker image. -m giúp bạn và những người khác biết được các thay đổi, còn -a được dùng để định danh tác giả của image. ID của container chính là dãy số được nhắc đến sau khi chạy container. Nếu không tạo thêm các repository khác trên Docker Hub, repository thường là username Docker Hub.

Cú pháp cụ thể như sau:

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

 

Ví dụ:

docker commit -m "added mariadb-server" -a "Sunday Ogwu-Chinuwa" 59839a1b7de2 finid/centos-mariadb

 

Note: Khi xác thực image, image mới được lưu trên máy tính của bạn. Ở phần sau của bài viết, bạn sẽ biết cách push image lên Docker Hub để mọi người có thể sử dụng.

Kiểm tra lại danh sách các image:

docker images

 

Bạn sẽ thấy một image mới:

OutputREPOSITORY TAG IMAGE ID CREATED SIZE
finid/centos-mariadb latest 23390430ec73 6 seconds ago 424.6 MB
centos latest 778a53015523 5 weeks ago 196.7 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
 

centos-mariadb là image mới được tạo ra dựa trên image của Centos trên Docker Hub. Chênh lệch dung lượng của chúng biểu thị cho thay đổi bạn đã tạo ra, ở đây là việc cài thêm MariaDB. Lần sau nếu muốn chạy container với Centos và MariaDB, hãy sử dụng image mới mà bạn vừa tạo.

Bước 7 — Hiển thị Danh sách Docker Container

Dùng lệnh:

docker ps

 

Bạn sẽ thấy danh sách các container đang chạy trên server:

OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7c79cc556dd centos "/bin/bash" 3 hours ago Up 3 hours
 

Thêm và tùy chọn -a để xem tất cả các container, kể các các container không được kích hoạt:

docker ps -a

 

Nếu dùng tùy chọn -l , bạn sẽ thấy container được sử dụng gần nhất:

docker ps -l

 

Để dừng một container đang chạy, dùng lệnh:

docker stop container-id

 

 container-id có thể tìm thấy trong output của lệnh docker ps

 

Bước 8 — Push Docker Image lên Docker Repository

 

 

Bước này sẽ hướng dẫn bạn cách đưa image của mình lên kho image của Docker để những người khác có thể tải về và sử dụng.

Đầu tiên hãy tạo một tài khoản Docker Hub. Sau đó login vào Docker Hub.

docker login -u docker-registry-username

 

Dùng lệnh sau để push image:

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

 

Sau một khoảng thời gian, output sẽ như sau:

OutputThe push refers to a repository [docker.io/finid/centos-mariadb]
670194edfaf5: Pushed 
5f70bf18a086: Mounted from library/centos 
6a6c96337be1: Mounted from library/centos
...

 

 

 

Bạn sẽ thấy image của mình được hiển thị trên danh sách các image của tài khoản:

Docker image listing on Docker Hub

Nếu lỗi xảy ra có dạng như sau, thì nghĩa là bạn chưa login thành công:

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

 

Tổng kết

Còn rất nhiều thứ về Docker mà bạn nên tìm hiểu, các kiến thức ở đây chỉ để bạn làm quen với việc sử dụng Docker trên CentOS 7. Hãy thường xuyên truy cập diễn đàn để nhận những bài viết mới nhất.