Thực hành dockerfile

Dockerfile giúp bạn rất nhiều trong quá trình làm việc với docker. Dockerfile có cấu trúc thành các phần rõ ràng.

Dưới đây là một kiến trúc các thành phần cơ bản trong một dockerfile:

  • Đầu tiên cần chỉ định image gốc được sử dụng trong quá trình tạo image mới bằng dockerfile
FROM ubuntu:14.04
  • Bổ sung thông tin về người tạo ra dockerfile này
MAINTAINER tannt
  • Chạy các lệnh sẽ cài đặt bổ sung gói cho image, giả sử tôi muốn tạo image apache.
RUN apt-get update -y && apt-get install apache2 && apt-get clean && rm -rf /var/lib/apt/lists/*
  • Chỉ định một số cấu hình biến môi trường để apache chạy trong container:
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_SERVERADMIN admin@localhost
ENV APACHE_SERVERNAME localhost
ENV APACHE_SERVERALIAS docker.localhost
ENV APACHE_DOCUMENTROOT /var/www
  • Cung cấp cổng mà dịch vụ apache trong container kết nối ra ngoài:
EXPOSE 80
  • Lệnh mà ứng dụng trong container được tạo ra sẽ thực thi:
CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

Bây giờ ta sẽ tổng hợp các thành phần rời rạc ở trên thành một tập tin hoàn chỉnh và tạo image:

  • Tạo một script tên dockerfile.sh có nội dung dưới:
#!/bin/bash
mkdir -p apache && cd apache

cat << EOF > dockerfile
FROM ubuntu:14.04

MAINTAINER tannt

RUN apt-get update && apt-get install -y apache2 && apt-get clean && rm -rf /var/lib/apt/lists/*

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_SERVERADMIN admin@localhost
ENV APACHE_SERVERNAME localhost
ENV APACHE_SERVERALIAS docker.localhost
ENV APACHE_DOCUMENTROOT /var/www

EXPOSE 80

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
EOF

docker build -t apache_test .
  • Trên host, thực hiện lệnh sau để tạo ra một image tên là apache_test
bash dockerfile.sh

Kiểm tra image có tên apache_test vừa tạo

docker images

Tạo container từ image mới tạo bởi dockerfile

docker run -it apache_test /bin/bash