cuong@techmaster.vn
https://github.com/TechMaster/CoolAlpine
FROM baseimage:tag
Xây dựng container kế thừa từ Docker image khác
Ví dụ: alpine kế thừa từ scratch
FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/sh"]
Text
scratch : image rỗng , làm gốc cho tất cả image khác
rootfs.tar.xz là boot (trình khởi động) của Alpine Linux chứa các tập lệnh thiết yếu nhất
Để tạo ra rootfs.tar.xz cần phải chạy bash script.
https://github.com/gliderlabs/docker-alpine/blob/master/builder/scripts/mkimage-alpine.bash
Ví dụ từ GliderLabs. Bạn có thể điều chỉnh thay đổi tuỳ ý nhưng nên tạo ra rootfs.tar.xz tối giản, càng nhỏ, càng tốt
FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/sh"]
Alpine:latest Dockerfile
CMD ["/bin/sh"] chạy Almquist shell
khi docker run. Có thể thay thế bằng lệnh khác khi docker run hoặc tạo image kế thừa
CMD ["nginx", "-g", "daemon off;"]
Lệnh chạy nginx ở background trong image Nginx:alpine
LABEL maintainer="Trịnh Minh Cuong<cuong@techmaster.vn>"
MAINTAINER Trịnh Minh Cường <cuong@techmaster.vn>
Thông tin người bảo trì Dockerfile
hoặc
cách 2 đã cũ
FROM alpine:latest
COPY start.sh /
COPY start.fish /
FROM alpine:latest
COPY start.sh start.fish /
Copy gộp, chỉ tạo thêm 1 layer trong image
sẽ hiệu quả hơn !
Kém hiệu quả, khiến image bị phân mảnh
thành nhiều layer
ADD có thể tải file từ Internet
COPY thuần tuý copy file từ host vào image
FROM alpine:latest
ADD https://foo.com/setup.sh /
FROM alpine:latest
COPY https://foo.com/setup.sh /
Chạy !
Không chạy
FROM alpine:latest
ADD https://fishshell.com/files/2.7.0/fish-2.7.0.tar.gz /
RUN tar -xzvf /fish-2.7.0.tar.gz \
&& rm /fish-2.7.0.tar.gz \
&& rm -rf /fish-2.7.0
Tải file fish-2.7.0.tar.gz từ Internet bung nén, sau đó xoá
4 layers, 9.9 Mb
apk add --no-cache curl \
&& curl https://fishshell.com/files/2.7.0/fish-2.7.0.tar.gz \
| tar xz \
&& rm -rf /fish-2.7.0
FROM alpine:latest
RUN apk add --no-cache curl \
&& curl https://fishshell.com/files/2.7.0/fish-2.7.0.tar.gz \
| tar xz \
&& rm -rf /fish-2.7.0
3 layers, 5.48 Mb
Sử dụng duy nhất một lệnh run
FROM alpine:latest
ENTRYPOINT ["ls"]
docker run chỉ được phép bổ xung tham số cho lệnh ls
FROM alpine:latest
CMD ["ls"]
docker run có thể thay thế bằng lệnh mới hoàn toàn như top
ENTRYPOINT ["/usr/local/bin/caddy"]
CMD ["--conf", "/etc/Caddyfile"]
Luôn chạy /usr/local/bin/caddy, với mặc định là --conf /etc/Caddyfile
tuy nhiên khi docker run có thể thay đổi --conf /foo/Caddyfile
ENTRYPOINT ["/usr/local/bin/caddy"]
CMD ["--conf", "/etc/Caddyfile"]
ENTRYPOINT /usr/local/bin/caddy
CMD --conf, /etc/Caddyfile
Cách viết này tốt, giúp docker dễ parse
Cách viết này dễ khiến docker nhầm lẫn, parse lâu hơn