기사 디렉토리
1. 일반적으로 사용되는 명령:
Dockerfile은 명령을 하나씩 담고 있는 텍스트 파일로, 지정된 이미지를 기반으로 하나의 명령이 레이어를 빌드하고 최종적으로 새로운 이미지를 빌드합니다.
키워드 | 효과 | 주목 | 체재 |
---|---|---|---|
에서 | 기본 이미지 지정 | 빌드를 시작할 미러 지정 | FROM <image>:<tag> |
정비사 | 작가 정보 | 이 dockerfile을 작성한 사람을 나타냅니다(더 이상 사용되지 않음). | MAINTAINER xxx xxx |
상표 | 상표 | 유사한 댓글을 이해할 수 있는 키-값 쌍의 형태로 이미지에 메타데이터를 추가합니다. | LABEL <key>=<value> <key>=<value> <key>=<value> |
달리다 | 이미지를 만들 때 실행되는 명령 | 이미지를 빌드할 때 실행할 명령, 기본값은 /bin/sh입니다. | RUN <命令行命令>或RUN["可执行文件", "参数1", "参数2"...,"参数n"](相当于:RUN 可执行文件 参数1 参数2 … 参数n) |
CMD | 컨테이너가 시작될 때 실행할 명령 | 컨테이너를 실행할 때 실행할 셸 환경입니다. 각 Dockerfile은 하나의 CMD 명령만 가질 수 있습니다. 여러 명령이 지정된 경우 마지막 명령만 실행됩니다. | 3가지 형식이 있습니다.【1】exec执行:CMD ["executable","param1","param2"];【2】/bin/sh中执行:CMD command param1 param2;【3】提供给 ENTRYPOINT 的默认参数:CMD ["param1","param2"] |
진입 지점 | 입구 | 일반적으로 실행 및 폐쇄되는 일부 컨테이너 생산에 사용됩니다. | ENTRYPOINT ["executable", "param1", "param2"] |
복사 | 미러에 파일 복사 | 빌드 시 미러에 파일 복사 | COPY 源路径 目标路径 (소스 경로는 호스트 시스템의 경로이고 대상 경로는 컨테이너의 경로입니다.) |
추가하다 | 파일 추가 | 빌드할 때 이미지에 파일을 추가합니다. COPY와 다른 점은 ADD가 자동으로 압축을 푼다는 것입니다. | ADD 源路径 目标路径 (소스 경로는 호스트 시스템의 경로이고 대상 경로는 컨테이너의 경로입니다.) |
ENV | 환경 변수 | 이미지를 빌드할 때 컨테이너 시작 시 -e로 덮어쓸 수 있는 환경 변수를 설정합니다(즉, 컨테이너에서도 사용할 수 있음). | ENV <key> <value> |
아르그 | 빌드 매개변수 | 빌드 런타임에 전달되는 변수를 지정하는 데 사용됩니다(dockerfile에 매개변수 전달). 이는 미러 이미지를 빌드할 때 매개변수를 외부에서 내부로 전달하는 것과 동일합니다. | ARG <name>[=<default value>] |
용량 | 외부에 마운트할 수 있는 익명 데이터 볼륨 정의 | 컨테이너를 시작할 때 데이터 볼륨을 마운트하는 것을 잊은 경우 익명 볼륨에 자동으로 마운트됩니다. | VOLUME ["/xxx/xx/xxxx", "xxx", ..., "xxx"] |
폭로하다 | 컨테이너의 서비스 포트 선언 | 컨테이너의 서비스 포트(및 서비스를 제공하는 포트)만 선언합니다. | EXPOSE 端口号 |
WORKDIR | 작업 목록 | 컨테이너의 시작 작업 디렉터리를 지정합니다(존재하지 않는 경우 자동으로 생성됨). 설정 후 Dockerfile의 RUN, CMD, ENTRYPOINT, ADD 및 COPY와 같은 후속 명령은 이 디렉터리에서 WORKDIR을 실행합니다. | 最好是绝对路径 |
사용자 | 컨테이너 실행 사용자를 지정합니다. | 컨테이너 실행 시 사용자 이름 또는 ID 실행 사용자 지정 | USER user |
2. 주의가 필요한 사항:
- Dockerfile은 기본적으로 지침을 통해 이미지를 빌드하는 프로세스를 설명하는 파일입니다.
- Dockerfile的注释符号是#。
- Dockerfile的第一行必须是FROM,从一个基础镜像来构建。
- 通过Dockerfile构建镜像命令格式为:docker build -f Dockerfile文件路径 -t 镜像名称:版本 .
- 默认一般把文件命名为Dockerfile,然后构建命令直接用
docker build -t 要保存的镜像名称:版本 .
- 最后的
.
的含义是将当前目录告诉docker引擎,然后当执行docker build
命令后,本机将当前目录下的所有文件发送给docker引擎,最后由docker引擎完成镜像的构建
三、add和copy的区别:
Dockerfile 中的 ADD 与 COPY 指令都可以用于将本地文件或目录复制到 Docker 镜像中,但它们之间有一些区别。
【1】ADD 指令支持自动解压缩功能
当使用 ADD 指令将本地文件复制到 Docker 镜像中时,如果该文件是压缩包格式,Docker 会自动解压缩该文件。例如:
ADD nginx-1.21.0.tar.gz /usr/local/
上述例子中在将本地的 nginx-1.21.0.tar.gz 文件复制到 Docker 镜像的 /usr/local/ 目录下时,Docker 会将该文件解压缩。
而 COPY 指令并不支持自动解压缩功能,需要手动解压缩后再复制进镜像。
【2】ADD 指令可以从 URL 复制内容
ADD 指令除了能够复制本地文件和目录外,还可以复制远程文件(例如从 URL 下载)到 Docker 镜像中。例如:
ADD https://example.com/nginx-1.21.0.tar.gz /usr/local/
上述例子中会从远程 URL https://example.com/nginx-1.21.0.tar.gz 下载文件,并将其复制到 Docker 镜像的 /usr/local/ 目录下。
而 COPY 指令只能复制本地文件和目录。
【3】 ADD 指令具有隐式的文件拷贝功能
ADD 指令除了能够复制本地文件和目录外,还具有一个隐式的文件拷贝功能:当复制一个压缩包文件到容器中时,Docker 会自动解压,并且可以直接从 URL 下载文件并解压缩。例如:
ADD package.tar.gz /app/
上述例子中,如果 package.tar.gz 是一个压缩包文件,则 Docker 会自动解压缩该文件,并将其复制到 /app/ 目录下。而 COPY 指令无法实现这一功能。