Trong quá trình tìm hiểu docker thì có đọc qua nhiều bài viết và tài liệu từ trang chủ, mình nhận thấy có rất nhiều comand khác nhau mà khi dùng chưa quen thì khó có thể nhớ hết. Do vậy, Bài viết sau đây mình sẽ ghi chú lại các lệnh mình hay dùng và liệt kê theo thứ tự dễ nhớ. Lưu ý bài viết dưới đây là note chứ không phải là một bài hướng dẫn chi tiết. Nếu bạn thấy hữu ích thì vui lòng để lại cho mình 1 like nhé.
1. Nhắc lại một vài khái niệm
- Hiểu nôm na image là một class và container là một object
- volume là cách chia sẻ vùng nhớ giữ máy chủ (ở đây là máy tính của bạn) và container
2. Một số câu lệnh cơ bản
Đầu tiên bạn có thể tìm kiếm các images có sẵn tại hub.docker.com hoặc bằng câu lệnh:
docker search {image_name}
Các câu lệnh với images:
(Lưu ý image_name có thể thay thế bằng imageID)
- Kiểm tra có bao nhiêu images:
docker images
- Tải về một image:
docker pull {image_name}
- Liệt kê tất cả image:
docker image ls --all hoặc docker images -a
- Xoá một images:
docker rm {image_name}
- Đổi tên cho tag image
docker tag {image_name}:{têntag}
Các câu lệnh với container:
- Kiểm tra các container đang chạy:
docker ps
- Kiểm tra tất cả các container trong máy:
docker ps -a
- Liệt kê các containers đang có:
docker container ls --all hoặc docker container ls -a
- Khởi tạo một container từ image:
- -i có nghĩa duy trì mở stdin để nhập lệnh.
- -t nó có nghĩa là console, cho phép kết nối với terminal để tương tác
docker run -it {image_name}
- Khởi động / dừng một container đã có sẵn:
docker start/stop -i {container_name}
- Chạy một lệnh trên container đang chạy, ta dùng option exec để tham chiếu đến container đang chạy.
docker exec -it {container_id} {command}
docker exec -it {container_name} /bin/bash
hoặc docker exec -it {container_name} bash
EX: docker exec -it mysql_1 mysql -uroot -p
- Khởi chạy container một lần và xoá
docker run --it --rm {image_name}
- Chạy một lệch khi đang ở bên ngoài container:
docker exec {container_name} {câu lệnh} //ví dụ: docker exec myubuntu ls
- Thoát ra khỏi container:
Thoát và giữ container chạy: Ctrl P + Q
Thoát hoàn toàn gõ exit
- Vào lại container đang chạy sau khi thoát:
docker attach {container_id}
- Xoá container:
docker container rm -f {container_id}
- Kiểm tra thông tin container:
docker inspect {container_name}
- Dừng tất cả container trên hệ thống:
docker stop $(docker ps -aq)
- Xem thông tin container
docker inspect {container_id}
- Kiểm tra logs của container đang chạy
docker logs --tail 50 --follow --timestamps {container_name}
Các câu lệnh với volume
- Liệt kê các volume đang có:
docker volume ls
- Tạo ra một volume mới:
docker volume create {volume_name}
- Kiểm tra thông tin ổ đĩa
docker volume inspect {volume_name}
- Mount ổ đĩa:
docker run -it --mount source={disk_name},target={/home/disk} {ubuntu:lastest}
- Xoá ổ đĩa:
docker volume rm {volume_name}
Docker Network
- Kiểm tra danh sách mạng đang có
docker network ls
- Kiểm tra thông tin network
docker network inspect *tên network*
- Tạo mới một mạng
docker network create --driver bridge {network_name}
Docker Mysql
docker run --name=mysql1 -d mysql/mysql-server:tag
- Kiểm tra logs
docker logs mysql1
3. Câu lệnh kết hợp
- Export cổng trong container ra máy host
docker run --port {port_host}:{port_container} {image_name}
- Đổi tên của container khi được tạo ra từ image
docker run --name {container_name} {image_name}
- Mount folder trong container với máy host
docker run --volume {path_host}:{path_container} {image_name}
- Tạo và chạy container, sau khi chạy thì thi hành một lệnh
VD: docker run -it --rm debian ls -la
- Tạo và chạy lệnh ánh xạ máy host vào container
docker run -it --rm -v {path_host}:{path_container} debian
- Để tạo ra một container với vùng dữ liệu từ một container khác ta dùng:
docker run -it --name C2 --voulume-from C1 imagename
- Kết hợp các lệnh trên để chạy một container nhiều option:
docker run -v {forder_in_computer}:{forder_in_container} -p {port_in_computer}:{port_in_container} -it {image_name} /bin/bash
- Đối với loại ổ đĩa mount trực tiếp với host ta không dùng tham số mount và dùng -v:
docker run -it -v {disk_name}:{path_container} {image_name}
- Load một image được chia sẻ từ file
docker load -i {file_name}.tar
- Lưu container thành image mới (lưu ý phải dừng container)
docker commit {container_name} {new_name}:{new_tag}
- Lưu image ra file
docker save --ouput {file_name}.tar {image_name}
4. Tổng hợp các lệnh linux hay dùng kết hợp
- Để xem được version linux đang dùng
cat /etc/*release hoặc cat /etc/os-release hoặc gõ uname -a
- Cài đặt htop để xem các tiến trình đang chạy
apt install -y => apt install htop => gõ htop để xem tiến trình
- Cài đặt gói ping cho ubuntu
apt search iputils => apt install iputils-ping
5. Dockerfile
Một dockerfile của 1 image sẽ quy định images được khởi tạo từ đâu, bao gồm những gì bên trong và được cài đặt những gì…
Ví dụ:
FROM ubuntu:16.04
Nếu image này đã có trong máy thì docker sẽ dùng, nếu chưa sẽ pull từ hub.docker về máy và cài đặt.
- MAINTAINER LanhVo<[email protected]> : Dùng để ghi chú tác giả cho dockerfile
- RUN : Dùng thực thi một lệnh trong quá trình build image.
- CMD : Dùng thực thi một lệnh trong quá trình bật container, 1 Dockerfile chỉ duy nhất 1 lệnh CMD, nếu có nhiều lệnh thì lệnh cuối sẽ được thực thi. Nếu muốn thực thi nhiều câu lệnh sẽ dùng đến ENTRYPOINT.
- ENTRYPOINT: Để thực thi một số câu lệnh trong quá trình start container, những câu lệnh này sẽ được viết trong file .sh.
- XPOSE: Container sẽ lắng nghe trên các cổng mạng được chỉ định khi chạy
- ADD : Copy file, thư mục, remote file thêm chúng vào filesystem của image.
- COPY : Copy file, thư mục từ host machine vào image. Có thể sử dụng url cho tập tin cần copy.
- WORKDIR : Định nghĩa directory cho CMD
- VOLUME : Mount thư mục từ máy host vào container.
# Update ubuntu
RUN apt-get update
# Install nginx
RUN apt-get install -y nginx
# Install mysql server
RUN echo "mysql-server mysql-server/root_password password root" | debconf-set-selections \
&& echo "mysql-server mysql-server/root_password_again password root" | debconf-set-selections \
&& apt-get install -y mysql-server
Trong khi cài nginx, sẽ có câu hỏi xuất hiện và bạn cần trả lời yes/no, khi đó tùy chọn -y
trong RUN apt-get install -y nginx
sẽ thể hiện cho sự lựa chọn yes
của bạn.
Một ví dụ về Dockerfile hoàn chỉnh như sau:
FROM ubuntu:16.04
MAINTAINER LanhVo<[email protected]>
RUN DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get install -y nginx
RUN echo "mysql-server mysql-server/root_password password root" | debconf-set-selections \
&& echo "mysql-server mysql-server/root_password_again password root" | debconf-set-selections \
&& apt-get install -y mysql-server
WORKDIR /venv
COPY start.sh /venv
RUN chmod a+x /venv/*
ENTRYPOINT ["/venv/start.sh"]
EXPOSE 80
Trong đó file start.sh như sau:
#!/bin/bash
service nginx start
exec $@
Build image từ Dockerfile:
docker build -t <image_name> .
Lưu ý dấu . ở cuối nghĩa là bối cảnh của thư mục hiện hành.
Sau đó ta có thể build container từ images bên trên như các câu lệnh trước. Ví dụ như sau:
docker run -p 9000:80 -it ubuntu-nginx /bin/bash
Gõ localhost:9000 là có thể chạy nginx ^^
Link tham khảo để note: https://viblo.asia/p/docker-chua-biet-gi-den-biet-dung-phan-2-dockerfile-RQqKLzeOl7z
Ghi chú dành cho docker
Wow wow wow! Tuyệt vời.