Bài viết được sự cho phép của tác giả Mai Đông Giang
Docker là gì?
Docker là một nền tảng cho các developers để develop, deploy và khởi chạy ứng dụng của mình với container. Nó cho phép tạo các môi trường độc lập và tách biệt để khởi chạy và phát triển với mỗi dịch vụ trên một hoặc nhiều container khác nhau. Khi cần deploy lên bất kỳ server nào chỉ cần run container của Docker thì ứng dụng của bạn sẽ được khởi chạy ngay lập tức.
Nhờ đó chúng ta sẽ tiết kiệm được rất nhiều thời gian cho việc cài đặt môi trường. Đồng thời, các developers làm việc với nhau sẽ sử dụng thống nhất một môi trường và các hình liên quan, giúp việc teamwork trở nên đồng nhất. Docker đa phần được cài đặt và chạy trên các container nên việc gỡ các gói cài đặt hay thay đổi version,… sẽ không ảnh hưởng gì đến máy tính của bạn cả. Máy tính của bạn sẽ trở nên sạch sẽ hơn.
Vậy nên, hiện nay nhiều công ty tuyển dụng cũng chú trọng đến skill Docker như là một kỹ năng cần có cho một vị trí developer.
Sau đây là các khái niệm chính về Docker mà mình tổng hợp được. Nó sẽ giúp bạn có những hiểu biết về Docker hơn, nhất là các bạn mới bắt đầu làm quen với công cụ này.
Image
Là tên gói cài đặt từ Docker Hub. Khởi chạy từ Dockerfile
Container
Một vùng chứa Image đã được cài đặt. Có thể tưởng tượng nó như là một máy tính nhỏ vậy, chứa những gì mà chúng ta muốn lưu tại đó.
Network
Tạo ra một đường kết nối giữa các Container với nhau. Nếu như không được khai báo kết nối đến Network thì Container sẽ không thể giao tiếp với các Container khác trong cùng một mạng được. Tương tự như một mạng LAN giữa các máy tính với nhau.
Volumes
Nơi chứa data, mã nguồn. Có thể sync với thư mục bất kỳ nào tại máy tính chủ của chúng ta đang sử dụng.
Docker compose
Một công cụ giúp chạy build nhiều container một lần, dễ dàng và thuận tiện cho việc quản lý các Container trong một dự án.
Tham khảo việc làm Docker hấp dẫn tại TopDev
Dockerfile
Chứa các lệnh để build một docker. Các lệnh thường dùng trong Dockerfile là:
- FROM — chỉ định image gốc: php, unbutu, alpine…
- LABEL — cung cấp metadata cho image. Có thể sử dụng để add thông tin maintainer. Để xem các label của images, dùng lệnh docker inspect.
- ENV — thiết lập một biến môi trường.
- RUN — Có thể tạo một lệnh khi build image. Được sử dụng để cài đặt các package vào container.
- COPY — Sao chép các file và thư mục vào container.
- ADD — Sao chép các file và thư mục vào container.
- CMD — Cung cấp một lệnh và đối số cho container thực thi. Các tham số có thể được ghi đè và chỉ có một CMD.
- WORKDIR — Thiết lập thư mục đang làm việc cho các chỉ thị khác như: RUN, CMD, ENTRYPOINT, COPY, ADD,…
- ARG — Định nghĩa giá trị biến được dùng trong lúc build image.
- ENTRYPOINT — cung cấp lệnh và đối số cho một container thực thi.
- EXPOSE — khai báo port lắng nghe của image.
- VOLUME — tạo một điểm gắn thư mục để truy cập và lưu trữ data.
Một số lệnh sử dụng với Docker bạn cần biết:
List image/container:
$ docker image/container ls
Delete image/container:
$ docker image/container rm <tên image/container >
Delete all image hiện có:
$ docker image rm $(docker images –a –q)
List all container hiện có:
$ docker ps –a
Stop a container cụ thể:
$ docker stop <tên container>
Run container từ image và thay đổi tên container:
$ docker run –name <tên container> <tên image>
Stop all container:
$ docker stop $(docker ps –a –q)
Delete all container hiện có:
$ docker rm $(docker ps –a –q)
Show log a container:
$ docker logs <tên container>
Build một image từ container:
$ docker build -t <tên container> .
Tạo một container chạy ngầm:
$ docker run -d <tên image>
$ docker pull <tên image>
Start một container:
$ docker start <tên container>
Trên đây là những tổng hợp của mình về những khái niệm cơ bản trong Docker và những lệnh cần thiết.
Hi vọng sẽ giúp bạn hiểu hơn về Docker, có thể áp dụng cho việc lập trình của mình.
Bài viết gốc được đăng tải tại giangmd.net
Có thể bạn quan tâm:
- Hướng dẫn xóa docker container (ví dụ docker rm)
- Đổi tên của một Container trong Docker
- Cài đặt Apache Kafka sử dụng Docker Compose
Xem thêm Việc làm Developer hấp dẫn trên TopDev