è¿æ¯ Dockerfile çå¿«éåèå¤å¿åãå å«ç¨æ·å¯ä»¥å¨å½ä»¤è¡ä¸è°ç¨ä»¥ç»è£ éåçææå½ä»¤ã
é»è®¤ Dockerfile ä½äºä¸ä¸æçæ ¹ç®å½ä¸ã
docker build -f /path/to/a/Dockerfile .
ä½¿ç¨ -f æåæä»¶ç³»ç»ä¸ä»»ä½ä½ç½®ç Dockerfileã
FROM [--platform=<platform>] <image> [AS <name>]
示ä¾
FROM ruby:3.3.0
FROM golang:1.20-alpine3.16 AS build-env
ENV <key>=<value> ...
ENV APP_HOME /myapp
RUN mkdir $APP_HOME
ENV MY_NAME="John Doe" MY_DOG=Rex\ The\ Dog \
MY_CAT=fluffy
RUN bundle install
WORKDIR æä»¤ä¸ºä»»ä½ RUNãCMDãENTRYPOINTãCOPY å ADD æä»¤è®¾ç½®å·¥ä½ç®å½ã
WORKDIR /myapp
VOLUME æä»¤å建ä¸ä¸ªå
·ææå®åç§°çæè½½ç¹ï¼å¹¶å°å
¶æ 记为ä¿åæ¥èªæ¬æºä¸»æºæå
¶ä»å®¹å¨çå¤é¨æè½½å·ã
VOLUME ["/data"]
# å®è£
ç¹è§è
ADD file.xyz /file.xyz
# å¤å¶
COPY host_file.xyz /path/container_file.xyz
ONBUILD RUN bundle install
# ä¸å¦ä¸ä¸ªæä»¶ä¸èµ·ä½¿ç¨æ¶
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
æä»¤å°è§¦åæä»¤æ·»å å°éåä¸ï¼ä»¥ä¾¿ç¨åæ§è¡ï¼æ¤æ¶éåç¨ä½å¦ä¸ä¸ªæå»ºçåºç¡ã
ENV my_var
SHELL ["/bin/bash", "-euo", "pipefail", "-c"]
# 使ç¨ä¸¥æ ¼æ¨¡å¼ï¼
RUN false # ails åä½¿ç¨ && 䏿 ·æå»º
RUN echo "$myvar" # ç±äºæ¼åéè¯¯ä¼æåºé误
RUN true | false # å°è±ç¦»ç®¡é
ä½¿ç¨ shell å°ä¸º shell å½ä»¤æå¼ä¸¥æ ¼æ¨¡å¼ã
| :- | - |
|---|---|
CMD ["executable","param1","param2"] | (exec å½¢å¼ï¼è¿æ¯é¦éå½¢å¼) |
CMD ["param1","param2"] | (ä½ä¸º ENTRYPOINT çé»è®¤åæ°) |
CMD command param1 param2 | (shellå½¢å¼) |
EXPOSE 5900
CMD ["bundle", "exec", "rails", "server"]
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
é ç½®å°ä½ä¸ºå¯æ§è¡æä»¶è¿è¡ç容å¨ã
ENTRYPOINT exec top -b
è¿å°ä½¿ç¨ shell å¤çæ¥æ¿æ¢ shell åéï¼å¹¶å°å¿½ç¥ä»»ä½ CMD æ docker run å½ä»¤è¡åæ°ã
LABEL version="1.0"
LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="æ¬æè¯´æ\
æ ç¾å¼å¯ä»¥è·¨è¶å¤è¡ã"
LABEL multi.label1="value1" \
multi.label2="value2" \
other="value3"
ARG <name>[=<default value>]
æä»¤å®ä¹äºä¸ä¸ªåéï¼å¨æå»ºæ¶éè¿ docker build å½ä»¤ä½¿ç¨ --build-arg <varname>=<value> æ å¿å°å
¶ä¼ éç»æå»ºå¨ã
FROM busybox
# user1 é»è®¤å¼ä¸º someuser
ARG user1=someuser
ARG buildno=1
# 注é说æ
*/temp*
*/*/temp*
temp?
| :- | - |
|---|---|
# comment | å¿½ç¥ |
*/temp* | 卿 ¹çä»»ä½ç´æ¥åç®å½ä¸ æé¤å称以 temp å¼å¤´çæä»¶åç®å½ |
*/*/temp* | 仿 ¹ä»¥ä¸ä¸¤çº§çä»»ä½åç®å½ä¸ æé¤ä»¥ temp å¼å¤´çæä»¶åç®å½ |
temp? | æé¤æ ¹ç®å½ä¸å称为temp çåå符æ©å±åçæä»¶åç®å½ |
å¦ææ¤æä»¶åå¨ï¼æé¤ä¸å
¶ä¸ç模å¼å¹é
çæä»¶åç®å½ï¼æå©äºé¿å
ADD æ COPY å°æææä»¶æ·»å å°éåä¸ãå¹é
æ¯ä½¿ç¨ Go ç filepath.Match è§å宿çã
| å½ä»¤ | 说æ |
|---|---|
FROM image | æå»ºçåºç¡éå |
MAINTAINER email | (å·²å¼ç¨)ç»´æ¤è çåå |
COPY [--chown=<user>:<group>] <src>... <dest> | å°ä¸ä¸æä¸çè·¯å¾å¤å¶å°ä½ç½® dest ç容å¨ä¸ |
ADD [--chown=<user>:<group>] <src>... <dest> | ä¸ COPY ç¸åï¼ä½è§£åç¼©åæ¡£å¹¶æ¥å http urlã |
RUN <command> | å¨å®¹å¨å è¿è¡ä»»æå½ä»¤ã |
USER <user>[:<group>] | 设置é»è®¤ç¨æ·åã |
WORKDIR /path/to/workdir | 设置é»è®¤å·¥ä½ç®å½ã |
CMD command param1 param2 | 设置é»è®¤å½ä»¤ |
ENV <key>=<value> ... | 设置ç¯å¢åé |
EXPOSE <port> [<port>/<protocol>...] | è¿è¡æ¶ä¾¦å¬æå®çç½ç»ç«¯å£ |
FROM wcjiang/docker-static-website:latest
# ä½¿ç¨ .dockerignore æä»¶æ¥æ§å¶éåä¸çå
容ï¼
# å¤å¶å½åç®å½å
容ï¼å°å®¹å¨ä¸
COPY ./ .
è¿ä¼äº§çä¸ä¸ª 154KB + çåå±éåã 妿æ¨éè¦ä»¥ä¸åçæ¹å¼é
ç½® httpdï¼æ¨å¯ä»¥è¦ç CMD è¡ï¼
FROM wcjiang/docker-static-website:latest
COPY . .
CMD ["/busybox","httpd","-f","-v","-p","3000","-c","httpd.conf"]
缩å°éåè¿ç¨æ¥çåæï¼éå Dockerfile æºç ã
FROM golang:alpine as builder
RUN apk --no-cache add git
WORKDIR /go/src/github.com/go/helloworld/
RUN go get -d -v github.com/go-sql-driver/mysql
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
FROM alpine:latest as prod
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY /go/src/github.com/go/helloworld/app .
CMD ["./app"]
使ç¨å¤é¶æ®µæå»ºè½å°æå»ºä¾èµçå¨ builder éåä¸ï¼åªå°ç¼è¯å®æåçäºè¿å¶æä»¶æ·è´å°è¿è¡ç¯å¢ä¸ï¼å¤§å¤§åå°éåä½ç§¯ã