Các lệnh show trên Docker, Cách sử dụng, quản lý Docker
Các lệnh show trên Docker, Cách sử dụng, quản lý Docker
A./ Lệnh show hệ thống
1./ View các lệnh mà docker chạy với các subcommand
docker
2./ View thông tin chi tiết hệ thống mà bạn cài docker lên
docker info
B./ Lệnh show Images
images hiểu đơn giản là tất cả những gì tạo nên 1 container ban đầu.
1./ Kiểm tra download images từ Docker Hub
docker run hello-world
Kết quả
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:f9dfddf63636d84ef479d645ab5885156ae030f611a56f3a7ac7f2fdd86d7e4e
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
2./ Kiểm tra có images nào sử dụng os ubuntu
docker search ubuntu
3./ Thực hiện download images Ubuntu về máy tính local
docker pull ubuntu
Kết quả
Using default tag: latest
latest: Pulling from library/ubuntu
5bed26d33875: Pull complete
f11b29a9c730: Pull complete
930bda195c84: Pull complete
78bf9a5ad49e: Pull complete
Digest: sha256:bec5a2727be7fff3d308193cfde3491f8fba1a2ba392b7546b43a051853a341d
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
4./ Kiểm tra các image đã được download về
docker images
Kết quả:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 4e5021d210f6 2 weeks ago 64.2MB
hello-world latest fce289e99eb9 15 months ago 1.84kB
5./ Stop 1 container
có thể sử dụng Container ID hoặc Container Name
docker stop heuristic_cray
heuristic_cray
6./ Start 1 Container
Có thể sử dụng Container ID hoặc Container Name
docker start heuristic_cray
heuristic_cray
7./ Xoá 1 Container
docker rm heuristic_cray
heuristic_cray
8./ Xóa Container đang chạy
docker image rm -f 75835a67d134 2a4cca5ac898
-f nghĩa là force
9./ Đổi tên của Docker container
# https://www.tecmint.com/name-docker-containers/
docker rename amazing_wing fixloinhanh
docker start fixloinhanh
docker ps
C./ Chạy 1 Docker Container
1./ Khởi chạy 1 Docker không đặt tên.
docker run -it ubuntu
Kết quả:
root@7833914afd5a:/#
Như vậy tạo ra 1 Docker với ID: 7833914afd5a
Bạn có thể test gõ vài câu lệnh trên Docker
root@7833914afd5a:/# apt-get update
2./ Để thoát container, lệnh này sẽ stop luôn container
exit
Thoát Container mà giữ Container vẫn running thì gõ Ctrl+PQ
3./ Để truy cập lại Docker đang running
docker attach 7833914afd5a
4./ Để kiểm tra Container ID, Container status, Container đã tạo từ bao giờ, container chạy ứng với Images nào
docker ps
Kết quả
5./ View Container tạo gần đây nhất
docker ps -l
6./ Tạo 1 Image từ Container trên local
Việc là này sẽ giúp bạn lưu trữ được 1 bản container mẫu để có thể tái sử dụng về sau. Ví dụ bạn đã build nodejs lên Container rồi, bạn tạo Image từ Container đó và sau đó chỉ việc sử dụng Container đó, nodejs đã được cài sẵn.
Lệnh mẫu
docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name
option -m như là mô tả giúp bạn nhận ra sự khác biệt của image đó.
option -a là người tạo ra image
repository/new_image_name là repository bạn tạo trên Docker Hub
Thông tin container_id được lấy ở:
root@srv037:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7531a809fbf8 repository/nodejs-id "/bin/bash" 6 minutes ago Up 6 minutes ecstatic_mirzakhani
9432bbbf96c8 repository/nodejs-id "/bin/bash" 10 minutes ago Up 4 minutes great_williams
1c19dcf15e95 4e5021d210f6 "/bin/bash" 18 hours ago Up 18 hours fixloinhanh
docker commit -m "nodejs-docker02" -a "Author:fixloinhanh" 9432bbbf96c8 repository/nodejs-02
sha256:b72bd93cf0e4f1817c9d3592c8d6e23db21d855739fe5895d95a0865a154cd9
Kiểm tra lại bản Image MẪU
root@srv037:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
repository/nodejs-02 latest b72bd93cf0e4 2 minutes ago 153MB
repository/nodejs-id latest 3473bfbd907f 18 hours ago 64.2MB
ubuntu latest 4e5021d210f6 2 weeks ago 64.2MB
hello-world latest fce289e99eb9 15 months ago 1.84kB
Như vậy bạn đã có 1 Docker Images Mẫu. Để khởi chạy Docker mẫu như sau:
docker run -it repository/nodejs-02
docker start 9432bbbf96c8
9432bbbf96c8
Như vậy đã tạo được xong Docker images mới repository/nodejs-02
7./ Xóa 1 Docker Images
Trước tiên phải xóa hết container đang sử dụng Images của Docker Images đó. Kể cả container đang stop
docker image rm 75835a67d134 2a4cca5ac898
Tìm container đang sử dụng chung 1 Images
docker ps -a | grep repository/nodejs-02
8./ Tạo 1 container với name và hostname chỉ định
docker run -it --name os-centos -h centos8 centos:centos8.1.1911
Kiểm tra sẽ thấy container đang chạy
D./ Sử dụng Docker exec
1./ Câu lệnh Docker exec
docker exec docker-id command
ví dụ
docker exec fixloinhanh ls
bin
boot
dev
etc
home
.
.
.
2./ Docker exec bash
Sử dục Docker exec bash tương đương việc attach vào container
Lệnh mẫu
docker exec -it <container> /bin/bash
Lệnh chạy
docker exec -it fixloinhanh bash
Khi ở trong bash, bạn gõ exit thì container vẫn chạy chứ không tắt như khi bạn attach vào container
3./ Docker exec với nhiều câu lệnh
Lệnh mẫu
docker exec <container> bash -c "command1 ; command2 ; command3"
Lệnh chạy
docker exec fixloinhanh bash -c "ls; pwd; "
E./ Save và Load Docker Images thành 1 file nén
1./ Save Docker images
Lệnh mẫu:
docker save --output name.tar images
Lệnh chạy
root@srv037:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
repository/nodejs-02 latest b72bd93cf0e4 3 days ago 153MB
vidocq/nodejs-02 latest b72bd93cf0e4 3 days ago 153MB
repository/nodejs-id latest 3473bfbd907f 3 days ago 64.2MB
ubuntu latest 4e5021d210f6 3 weeks ago 64.2MB
centos centos8.1.1911 470671670cac 2 months ago 237MB
docker save --output nodejs.tar b72bd93cf0e4
2./ Load Docker images
Từ file Docker Images đã save có thể copy ra các Docker khác, sau đó để tái sử dụng cần Load Docker Images
Lệnh mẫu
docker load -i name.tar
Lệnh chạy
docker load -i nodejs.tar
Loaded image ID: sha256:b72bd93cf0e4f1817c9d3592c8d6e23db21d855739fe5895d95a0865a154cd90
Như vậy sẽ sinh ra 1 Docker image mới có ID nhưng chưa có Repository và chưa có tag
Tiến hành đặt tên và gắn tag cho new image
docker tag b72bd93cf0e4 nodejs-new:version2
F./ Chia sẻ dữ liệu trong Docker, tạo và quản lý ổ đĩa Docker Volume
1./ Chia sẻ dữ liệu trong Docker
ở trên máy chủ cài Docker mình tạo ra 1 folder data trong đó tạo 1 file share.txt ghi nội dung tuỳ ý bên trong.
File share.txt này sẽ là file chia sẻ giữa máy chủ cài Docker và các Container
Mình tạo mới 1 container để chia sẻ file
Như vậy mình đã tạo được 1 container root@nodejs
Lệnh mẫu:
sudo docker run -it -v /home/ubuntu/Sharing dockeruser/imageID:version
237MB
Lệnh chạy:
Kiểm tra trước images
root@srv037:/opt/data# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nodejs-new version2 b72bd93cf0e4 3 days ago 153MB
repository/nodejs-id latest 3473bfbd907f 4 days ago 64.2MB
ubuntu latest 4e5021d210f6 3 weeks ago 64.2MB
centos centos8.1.1911 470671670cac 2 months ago 237MB
tạo container và share
root@srv037:/opt/data# docker run -it -v /opt/data:/home/data b72bd93cf0e4
root@d5cac42ca618:/#
Như vậy đã tạo xong 1 docker ID d5cac42ca618
Kiểm tra file share.txt
Bạn có thể tạo file hoặc thư mục bên trong container sẽ được ánh xạ ngược lại qua host chạy docker.
2./ chia sẻ dữ liệu giữa các container với nhau:
Cách 1: Tạo mới 1 container và phân vùng share trùng với máy host trùng với phân vùng share với container đã tạo trước đó
Bạn tạo thêm 1 container mới và share folder trùng với /opt/data trên host.
docker run -it --name host02 -h host02 -v /opt/data:/home/data b72bd93cf0e4
Trên host02 tạo 1 file
Trên host01 sẽ thấy
Cách 2: sử dụng volume share
Lệnh mẫu:
docker run -it --name host03 -h host03 --volumes-from container-id image-id
Lệnh chạy
docker run -it --name host03 -h host03 --volumes-from d5cac42ca618 ubuntu:latest
Kết quả:
3./ Tạo và quản lý ổ đĩa trên Docker
lệnh list ổ đĩa đang tồn tại trên máy host cài Docker
docker volume ls
Tạo 1 ổ đĩa mới
docker volume create Name-Disk
ví dụ:
docker volume create disk01
Kiểm tra thông tin ổ đĩa vừa tạo
docker volume inspect Name-Disk
ví dụ:
docker volume inspect disk01
Xoá ổ đĩa
docker volume rm Name-Disk
ví dụ
docker volume rm disk01
4./ Quản lý ổ đĩa trên Docker, container sử dụng ổ Đĩa
Trường hợp 1: Tạo 1 container và mount ổ đĩa mới vào
docker run -it --name host01 -h host01 --mount source=disk02,target=/home/disk02 ubuntu:latest
khi ghi dữ liệu từ container vào ổ đĩa việc xoá container không làm mất dữ liệu của ổ đĩa.
ví dụ xoá container host01 sau đó tạo 1 container02 và mount ổ đía disk02:
Trường hợp 2: Tạo 1 container và mount ổ đĩa mà ổ đĩa đó là 1 folder trên máy host cài Docker
docker volume create --opt device=/opt/data/ --opt type=none --opt o=bind disk03
Kiểm tra thông tin disk03
docker volume inspect disk03
Mount ổ đĩa disk03 vào 1 container mới
docker run -it -v DiskName:PathContainer ImageID
docker run -it --name host03 -h host03 -v disk03:/home/disk03 ubuntu:latest
Kiểm tra
5./ Copy dữ liệu từ máy cài Docker container sang một Container đang chạy
docker cp /opt/data/share.txt 89470c825021:/home/
với 89470c825021 là ID của container hoặc có thể lấy name của container
G./ Tải về và sử dụng image busybox
Download image busybox về để sử dụng. busybox là 1 phiên bản siêu nhẹ của chuẩn Unix.
Tạo 1 container test chỉ sử dụng 1 lần sau khi thoát container sẽ tự xóa thêm tham số --rm
docker run -it --rm busybox
Kiểm tra các lệnh mà busybox hỗ trợ
Như vậy có tới 399 lệnh mà busybox có thể hỗ trợ
H./ Tạo và quản lý network trong Docker
1./ Kiểm tra quản lý network trong Docker
Kiểm tra network docker
docker network list
Mạng bridge giúp container kết nối ra ngoài internet, kết nối giữa các container và container tới host cài docker
Kiểm tra chi tiết network nào đó
docker network inspect NetworkID
docker network inspect
Kết quả
[
{
"Name": "bridge",
"Id": "7278f48fdb98bab6e22c7e84f13eb52b3a327749065d8cbaf75023328fa98a84",
"Created": "2020-04-09T15:16:02.716010005+07:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
Khi tạo 1 container mới "Containers": {}, sẽ thay đổi
ví dụ:
docker run -it --name busybox01 -h busybox01 busybox
sau khi tạo xong kiểm tra inspect network bridge sẽ thấy
hoặc inspect trực tiếp container vừa tạo
docker inspect busybox01
Khi tạo tiếp 1 container nữa busybox02 thì 2 container này có thể giao tiếp với nhau thông qua network bridge
docker run -it --name busybox02 -h busybox02 busybox
từ host cài docker
từ container busybox02
Thử bật httpd trên container busybox01
/ # cd /var/www/
/var/www # httpd
/var/www # vi index.html
/var/www # cat index.html
hello!
chuyển sang container busybox02
wget -O - 172.17.0.2
2./ ánh xạ, Nat port từ container sang máy host cài docker
tạo mới 1 container
docker run -it --name busybox03 -h busybox03 -p 8888:80 busybox
-p để ánh xạ
port 888 ở trên máy host cài docker
port 80 ở trên container busybox03
kiểm tra trên máy host
Tiếp theo bật httpd trên container busybox03
kiểm tra trên máy host cài docker sẽ thấy port 8888 đã open
3./ Tạo, xóa network mới trên Docker
docker network create --driver bridge internet
docker network create --driver bridge internet02
4./ Tạo container mới kết nối vào network internet mới vừa tạo
docker run -it --name busybox04 -h busybox04 --network internet busybox
trên máy host kiểm tra
docker network inspect internet
5./ Tạo 1 container mới kết nối vào network internet mới tạo và ánh xạ port 8668 trên host cài docker
docker run -it --name busybox05 -h busybox05 --network internet -p 8668:80 busybox
Tương tự có thể enable httpd trên container busybox05
các container thuộc network internet có thể thông với nhau và thông với host cài docker nhưng không thông sang các network bridge
6./ cài đặt container có nhiều card network
docker network connect bridge busybox05
trên container busybox05
Như vậy container busybox có cả 2 network bridge và internet
Chúc các bạn thành công
Tham khảo:
XuanThuLab: https://www.youtube.com/channel/UC_JI84U1f2EKIG6HQK35H5Q