Android

Cách xây dựng hình ảnh docker với dockerfile

Docker Tutorial for Beginners 6 - Fundamentals Of Dockerfile

Docker Tutorial for Beginners 6 - Fundamentals Of Dockerfile

Mục lục:

Anonim

Hình ảnh Docker là bản thiết kế của các container Docker chứa ứng dụng và mọi thứ bạn cần để chạy ứng dụng. Một container là một thể hiện thời gian chạy của một hình ảnh.

Trong hướng dẫn này, chúng tôi sẽ giải thích Dockerfile là gì, cách tạo và cách xây dựng hình ảnh Docker với Dockerfile.

Dockerfile là gì

Dockerfile là một tệp văn bản chứa tất cả các lệnh mà người dùng có thể chạy trên dòng lệnh để tạo một hình ảnh. Nó bao gồm tất cả các hướng dẫn cần thiết của Docker để xây dựng hình ảnh.

Hình ảnh Docker được tạo thành từ một loạt các lớp hệ thống tập tin biểu thị các hướng dẫn trong Dockerfile của hình ảnh tạo nên một ứng dụng phần mềm thực thi.

Tệp Docker có dạng sau:

# Comment INSTRUCTION arguments

INSTRUCTION không phân biệt chữ hoa chữ thường, nhưng quy ước là sử dụng UPPERCASE cho tên của nó.

Dưới đây là danh sách với một mô tả ngắn về một số hướng dẫn Dockerfile được sử dụng nhiều nhất:

  • ARG - Hướng dẫn này cho phép bạn xác định các biến có thể được thông qua tại thời điểm xây dựng. Bạn cũng có thể đặt một giá trị mặc định. TỪ - Hình ảnh cơ sở để xây dựng một hình ảnh mới. Hướng dẫn này phải là hướng dẫn không bình luận đầu tiên trong Dockerfile. Ngoại lệ duy nhất từ ​​quy tắc này là khi bạn muốn sử dụng một biến trong đối số FROM . Trong trường hợp này, FROM có thể được đi trước bởi một hoặc nhiều hướng dẫn ARG . LABEL - Được sử dụng để thêm siêu dữ liệu vào hình ảnh, chẳng hạn như mô tả, phiên bản, tác giả..v.v. Bạn có thể chỉ định nhiều LABEL và mỗi lệnh LABEL là một cặp khóa-giá trị. CHẠY - Các lệnh được chỉ định trong hướng dẫn này sẽ được thực thi trong quá trình xây dựng. Mỗi lệnh RUN tạo một lớp mới trên đầu của hình ảnh hiện tại. THÊM - Được sử dụng để sao chép các tệp và thư mục từ nguồn được chỉ định đến đích đã chỉ định trên hình ảnh docker. Nguồn có thể là các tệp hoặc thư mục cục bộ hoặc một URL. Nếu nguồn là một kho lưu trữ tar cục bộ, thì nó sẽ tự động được giải nén vào hình ảnh Docker. SAO CHÉP - Tương tự như ADD nhưng nguồn chỉ có thể là tệp hoặc thư mục cục bộ. ENV - Hướng dẫn này cho phép bạn xác định một biến môi trường. CMD - Được sử dụng để chỉ định một lệnh sẽ được thực thi khi bạn chạy một container. Bạn chỉ có thể sử dụng một lệnh CMD trong Dockerfile của mình. ENTRYPOINT - Tương tự như CMD , hướng dẫn này xác định lệnh nào sẽ được thực thi khi chạy container. WORKDIR - Lệnh này đặt thư mục làm việc hiện tại cho các lệnh RUN , CMD , ENTRYPOINT , COPY ADD . NGƯỜI DÙNG - Đặt tên người dùng hoặc UID để sử dụng khi chạy bất kỳ hướng dẫn RUN , CMD , ENTRYPOINT , COPY ADD . TÍNH NĂNG - Cho phép bạn gắn một thư mục máy chủ vào thùng chứa. EXPOSE - Được sử dụng để chỉ định cổng mà container lắng nghe khi chạy.

Để, loại trừ các tệp và thư mục khỏi được thêm vào hình ảnh, hãy tạo tệp .dockerignore trong thư mục ngữ cảnh. Cú pháp của .dockerignore tương tự như một trong các tệp .gitignore của Git.

Để tham khảo đầy đủ và giải thích chi tiết về các hướng dẫn Dockerfile, xem trang tham khảo Dockerfile chính thức.

Tạo một Dockerfile

Kịch bản phổ biến nhất khi tạo hình ảnh Docker là kéo hình ảnh hiện có từ sổ đăng ký (thường là từ Docker Hub) và chỉ định những thay đổi bạn muốn thực hiện trên hình ảnh cơ sở. Hình ảnh cơ sở được sử dụng phổ biến nhất khi tạo hình ảnh Docker là Alpine vì nó nhỏ và được tối ưu hóa để chạy trong RAM.

Docker Hub là dịch vụ đăng ký dựa trên đám mây, trong số các chức năng khác được sử dụng để lưu giữ hình ảnh Docker trong kho lưu trữ công cộng hoặc riêng tư.

Trong ví dụ này, chúng tôi sẽ tạo một hình ảnh Docker cho máy chủ Redis. Chúng tôi sẽ sử dụng Ubuntu 18.04 mới nhất làm hình ảnh cơ bản.

Đầu tiên, tạo một thư mục sẽ chứa Dockerfile và tất cả các tệp cần thiết:

mkdir ~/redis_docker

Điều hướng đến thư mục và tạo Dockerfile sau:

cd ~/redis_docker nano Dockerfile Dockerfile

FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean EXPOSE 6379 CMD

Hãy giải thích ý nghĩa của từng dòng trong Dockerfile:

  • Trong dòng 1 chúng tôi đang xác định hình ảnh cơ sở. Lệnh RUN bắt đầu trong dòng 3 sẽ cập nhật chỉ mục apt, cài đặt gói của Red red-máy chủ và làm sạch bộ đệm apt. Các lệnh được sử dụng trong hướng dẫn giống như các lệnh bạn sẽ sử dụng để cài đặt redis trên máy chủ Ubuntu. Lệnh EXPOSE xác định cổng mà máy chủ redis lắng nghe. Trong dòng cuối cùng, chúng tôi đang sử dụng lệnh CMD để đặt lệnh mặc định Điều đó sẽ được thực thi khi container chạy.

Lưu tệp và đóng trình chỉnh sửa.

Xây dựng hình ảnh

Bước tiếp theo là xây dựng hình ảnh. Để làm như vậy, hãy chạy lệnh sau từ thư mục chứa Dockerfile:

docker build -t linuxize/redis.

Tùy chọn -t chỉ định tên hình ảnh và tùy chọn tên người dùng và thẻ theo định dạng 'tên người dùng / hình ảnh: thẻ'.

Đầu ra của quá trình xây dựng sẽ trông giống như thế này:

Sending build context to Docker daemon 3.584kB Step 1/4: FROM ubuntu:18.04 ---> 7698f282e524 Step 2/4: RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean ---> Running in e80d4dd69263… Removing intermediate container e80d4dd69263 ---> e19fb7653fca Step 3/4: EXPOSE 6379 ---> Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc ---> 13b92565c201 Step 4/4: CMD ---> Running in a67ec50c7048 Removing intermediate container a67ec50c7048 ---> d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest

Khi quá trình xây dựng được hoàn thành, hình ảnh mới sẽ được liệt kê trong danh sách hình ảnh:

docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MB

Chạy một container

Bây giờ hình ảnh được tạo, bạn chạy một container từ nó bằng cách chạy:

docker run -d -p 6379:6379 --name redis linuxize/redis

Các tùy chọn -d báo cho Docker chạy container ở chế độ tách rời, tùy chọn -p 6379:6379 sẽ xuất bản cổng 6379 cho máy chủ và tùy chọn --name redis chỉ định tên container. Đối số cuối cùng linuxize/redis là tên của hình ảnh, được sử dụng để chạy container.

Khi container bắt đầu, sử dụng lệnh sau để liệt kê tất cả các container đang chạy:

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago Up 5 minutes 0.0.0.0:6379->6379/tcp redis

Để xác minh rằng mọi thứ hoạt động như bình thường, nên sử dụng redis-cli để kết nối với bộ chứa redis-cli :

redis-cli ping

Máy chủ redis sẽ phản hồi với PONG .

Phần kết luận

Hướng dẫn này chỉ đề cập đến những điều cơ bản của việc sử dụng Dockerfiles để xây dựng hình ảnh. Để tìm hiểu thêm về cách viết Dockerfiles và các thực tiễn tốt nhất được đề xuất, hãy xem Thực tiễn tốt nhất để viết Dockerfiles.

bến tàu