목차
DockerFile 명령에 대한 자세한 설명
운영 및 유지보수 Docker DockerFile 명령을 심층적으로 이해하도록 안내합니다.

DockerFile 명령을 심층적으로 이해하도록 안내합니다.

Feb 22, 2022 pm 05:40 PM
docker

이 문서는 dockerFile 명령에 대한 관련 지식을 제공합니다. 이 명령에는 지침이 포함되어 있습니다. 각 지침은 모든 사람에게 도움이 되기를 바랍니다.

DockerFile 명령을 심층적으로 이해하도록 안내합니다.

추천 학습: "docker video tutorial"

DockerFile 명령에 대한 자세한 설명

Dockerfile은 각각 레이어를 구성하는 지침이 포함된 이미지 제작 파일입니다.

이미지 빌드

docker build [选项] <上下文路径/URL/->

docker build -t nginx:v3 .           # . 表示Dockerfile在当前目录
로그인 후 복사

FROM은 기본 이미지를 지정합니다

FROM을 통해 기본 이미지를 지정합니다. 따라서 FROM은 Dockerfile에서 필수 명령어이며 첫 번째 명령어여야 합니다.

처음부터 이 이미지는 가상의 개념이며 실제로 존재하지 않습니다. 다음 지침은 이미지의 첫 번째 레이어로 존재하기 시작합니다.

RUN 실행 명령

RUN은 명령줄 명령을 실행하는 데 사용됩니다. 두 가지 형식이 있습니다.

쉘 형식:

RUN <命令>

RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
로그인 후 복사

exec 형식:

RUN ["可执行文件", "参数1", "参数2"]
로그인 후 복사

Union FS에는 AUFS와 같은 최대 레이어 수가 있습니다. 이전에는 최대 레이어 수는 42개였지만 현재는 127개입니다. 동일한 기능의 경우 &&를 사용하여 필요한 명령을 연결하여 미러 레이어 수를 단순화해야 합니다.

COPY 파일 복사

COPY [--chown=<user>:<group>] <宿主机源路径> <镜像内的目标路径>
COPY [--chown=<user>:<group>] ["<宿主机源路径1>",... "<镜像内的目标路径>"]
로그인 후 복사
# 把当前目录的a.txt文件复制到镜像的根目录
COPY a.txt /a.txt
로그인 후 복사

ADD 복사 파일(파일 다운로드 또는 파일 압축 풀기)

ADD [--chown=<user>:<group>] http://xxx <目标路径>       # 下载文件到镜像的目标路径
ADD [--chown=<user>:<group>] ./a.tar.gz <目标路径>       # 复制压缩包,并自动解压到目标路径
로그인 후 복사

CMD는 컨테이너 메인 프로세스의 기본 시작 명령을 지정합니다

CMD ["可执行文件", "参数1", "参数2"...]
로그인 후 복사
# 指定进入容器马上指定 cat /a.txt

CMD ["sh","-c", "cat /a.txt"]
로그인 후 복사

docker run -it 이미지 실행 시 /bin/bash와 같은 명령을 지정하지 않으면 , sh -c cat /a .txt가 자동으로 실행됩니다. 그렇지 않으면 컨테이너의 기본 프로세스의 시작 명령이 사용자가 지정한 CMD

ENTRYPOINT에 따라 지정됩니다. CMD

형식은 일관됩니다. CMD의 차이점

1. ENTRYPOINT를 사용하여 매개변수 전달

명령줄이 docker를 전달할 때 Dockerfile [ "curl", "-s", "http://myip.ipip.net" ]에 ENTRYPOINT를 지정하세요. myip -i를 실행하면 -i 매개변수가 ENTRYPOINT 명령에 전달되고, 마지막으로
컨테이너에 들어가면 컨테이너가 컬 -s http://myip.ipip.net -i

2를 실행합니다. CMD와 관련이 없는 일부 초기화 작업. 컨테이너의 CMD가 무엇이든 상관없이 사전 처리 작업이 필요합니다.

ENTRYPOINT ["docker-entrypoint.sh"]와 유사 이 스크립트는 사용자의 신원이 합법적인지 등을 확인합니다.

ENV는 환경 변수를 설정합니다.

ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
로그인 후 복사

ARG 빌드 매개변수

ARG <参数名>[=<默认值>]
로그인 후 복사

ARG 명령에는 유효한 범위, FROM 명령어 앞에 지정된 경우 FROM 명령어에서만 사용할 수 있습니다.

ARG DOCKER_USERNAME=library

FROM ${DOCKER_USERNAME}/alpine
로그인 후 복사

FROM 이후에 지정하는 경우 각 단계에서 사용되는 변수는 각 단계에서 별도로 지정해야 합니다

FROM ${DOCKER_USERNAME}/alpine

# 在FROM 之后使用变量,必须在每个阶段分别指定
ARG DOCKER_USERNAME=library

RUN set -x ; echo ${DOCKER_USERNAME}
로그인 후 복사

VOLUME 익명 볼륨

VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>
로그인 후 복사

사용자가 런타임 중에 동적 파일이 저장되는 디렉터리를 마운트하는 것을 잊어버리지 않도록 볼륨으로서 Dockerfile에서 특정 디렉토리를 익명 볼륨으로 마운트하도록 미리 지정할 수 있으므로, 사용자가 런타임 시 마운트를 지정하지 않으면 컨테이너 스토리지에 많은 양의 데이터를 쓰지 않고도 애플리케이션이 정상적으로 실행될 수 있습니다. layer

여기서 /data 디렉토리는 컨테이너가 실행 중일 때 자동으로 익명 볼륨으로 마운트됩니다. /data에 기록된 모든 정보는 컨테이너 스토리지 계층에 기록되지 않으므로 컨테이너 스토리지 계층의 상태 비저장이 보장됩니다.

EXPOSE 노출된 포트

EXPOSE <端口1> [<端口2>...]
로그인 후 복사

EXPOSE 명령은 컨테이너가 실행될 때 서비스를 제공하는 포트를 선언합니다. EXPOSE는 컨테이너가 사용할 포트만 선언하고 호스트에서 포트 매핑을 자동으로 수행하지 않습니다.

Dockerfile에 이러한 문을 작성하면 두 가지 이점이 있습니다. 하나는 이미지 사용자가 이미지 서비스의 보호 포트를 이해하여 구성 매핑을 용이하게 하는 것입니다.

다른 하나는 런타임에 임의 포트 매핑을 사용할 때입니다. , docker가 -P를 실행하면 EXPOSE 포트가 자동으로 무작위로 매핑됩니다.

EXPOSE와 런타임 시 -p : 사용을 구별하세요.

-p는 호스트 포트와 컨테이너 포트를 매핑합니다. 즉, 컨테이너의 해당 포트 서비스를 외부 세계에 노출합니다.

WORKDIR은 작업 디렉터리를 지정합니다. 디렉터리가 없으면 WORKDIR은 디렉터리를 생성합니다

WORKDIR <工作目录路径>
로그인 후 복사

예 1:

WORKDIR /app

RUN echo "hello" > world.txt
로그인 후 복사

예 2:

WORKDIR /a
WORKDIR b
WORKDIR c

RUN pwd

## RUN pwd 的工作目录为 /a/b/c
로그인 후 복사

USER 현재 사용자를 지정합니다

USER <用户名>[:<用户组>]
로그인 후 복사

실행 중에 ID를 변경하려는 경우, 예를 들어 이미 설정된 사용자로 서비스 프로세스를 실행하려는 경우 su 또는 sudo를 사용하지 마십시오. 이러한 구성은 더 번거롭고 오류가 자주 발생합니다. TTY가 누락된 환경. 고수를 사용하는 것이 좋습니다.

# 建立 redis 用户,并使用 gosu 换另一个用户执行命令
RUN groupadd -r redis && useradd -r -g redis redis

# 下载 gosu
RUN wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.12/gosu-amd64" \
    && chmod +x /usr/local/bin/gosu \
    && gosu nobody true
    
# 设置 CMD,并切换到redis用户执行
CMD [ "exec", "gosu", "redis", "redis-server" ]
로그인 후 복사

HEALTHCHECK는 Docker에게 컨테이너 상태가 정상인지 확인하는 방법을 알려줍니다.

HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
로그인 후 복사

옵션:

--interval=<间隔>:两次健康检查的间隔,默认为 30 秒;
--timeout=<时长>:健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,默认 30 秒;
--retries=<次数>:当连续失败指定次数后,则将容器状态视为 unhealthy,默认 3 次
로그인 후 복사

HEALTHCHECK 명령이 이미지에 지정되면 이를 사용하여 컨테이너를 시작합니다. 시작하고 HEALTHCHECK 명령 확인이 성공하면 건강 상태가 됩니다. 연속으로 특정 횟수만큼 실패하면 비정상 상태가 됩니다.

HEALTHCHECK는 한 번만 나타날 수 있습니다. 여러 개를 쓰면 마지막 항목만 적용됩니다

CMD 命令的返回值决定了该次健康检查的成功与否:0:成功;1:失败

ONBUILD 指定某些命令只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行

ONBUILD <其它指令>
로그인 후 복사
# 举例如下Dockerfile,初次构建为镜像my-node时,ONBUILD的三行命令不会执行

FROM node:slim
RUN mkdir /app
WORKDIR /app
ONBUILD COPY ./package.json /app
ONBUILD RUN [ "npm", "install" ]
ONBUILD COPY . /app/
CMD [ "npm", "start" ]

# 只要当其他镜像 FROM my-node 从上面镜像作为基础镜像进行构建时,ONBUILD 的命令开始执行
로그인 후 복사

LABEL 为镜像添加元数据

LABEL <key>=<value> <key>=<value> <key>=<value> ...
로그인 후 복사
# 标注镜像的作者

LABEL org.opencontainers.image.authors="yeasy"
로그인 후 복사

SHELL 指定执行shell命令的参数

SHELL ["可执行程序", "参数"]
로그인 후 복사
SHELL ["/bin/sh", "-c"]

RUN lll ; ls             # 这里的shell命令将通过 /bin/sh -c 的方式执行
로그인 후 복사

推荐学习:《docker视频教程

위 내용은 DockerFile 명령을 심층적으로 이해하도록 안내합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Docker의 이미지를 업데이트하는 방법 Docker의 이미지를 업데이트하는 방법 Apr 15, 2025 pm 12:03 PM

Docker 이미지를 업데이트하는 단계는 다음과 같습니다. 최신 이미지 태그 가져 오기 새 이미지 특정 태그의 이전 이미지 삭제 (선택 사항) 컨테이너를 다시 시작하십시오 (필요한 경우)

Docker에서 거울을 만드는 방법 Docker에서 거울을 만드는 방법 Apr 15, 2025 am 11:27 AM

Docker 이미지 생성 단계 : 빌드 지침이 포함 된 Dockerfile을 작성하십시오. Docker 빌드 명령을 사용하여 터미널에 이미지를 빌드하십시오. Docker 태그 명령을 사용하여 이미지를 태그하고 이름과 태그를 지정하십시오.

Docker Desktop을 사용하는 방법 Docker Desktop을 사용하는 방법 Apr 15, 2025 am 11:45 AM

Docker Desktop을 사용하는 방법? Docker Desktop은 로컬 머신에서 Docker 컨테이너를 실행하는 도구입니다. 사용 단계는 다음과 같습니다. 1. Docker Desktop 설치; 2. Docker Desktop을 시작하십시오. 3. Docker 이미지를 만듭니다 (Dockerfile 사용); 4. Docker Image 빌드 (Docker 빌드 사용); 5. 도커 컨테이너를 실행하십시오 (Docker Run 사용).

Docker 버전을 읽는 방법 Docker 버전을 읽는 방법 Apr 15, 2025 am 11:51 AM

Docker 버전을 얻으려면 다음 단계를 수행 할 수 있습니다. Docker 명령 "Docker -version"을 실행하여 클라이언트 및 서버 버전을 볼 수 있습니다. Mac 또는 Windows의 경우 Docker Desktop GUI의 버전 탭 또는 Aff Docker Desktop 메뉴를 통해 버전 정보를 볼 수도 있습니다.

Docker 컨테이너의 이름을 확인하는 방법 Docker 컨테이너의 이름을 확인하는 방법 Apr 15, 2025 pm 12:21 PM

단계를 따르면 Docker 컨테이너 이름을 쿼리 할 수 ​​있습니다. 모든 컨테이너 (Docker PS)를 나열하십시오. 컨테이너 목록을 필터링합니다 (GREP 명령 사용). 컨테이너 이름 ( "이름"열에 위치)을 가져옵니다.

Docker 이미지를 저장하는 방법 Docker 이미지를 저장하는 방법 Apr 15, 2025 am 11:54 AM

Docker에 이미지를 저장하려면 Docker Commit 명령을 사용하여 지정된 컨테이너의 현재 상태가 포함 된 새 이미지를 만들 수 있습니다. 구문 : Docker Commit [옵션] 컨테이너 ID 이미지 이름. 이미지를 저장소에 저장하려면 Docker Push 명령 인 Syntax : Docker 푸시 이미지 이름 [: tag]을 사용할 수 있습니다. 저장된 이미지를 가져 오려면 Docker Pull 명령 인 Syntax : Docker Pull Image Name [: Tag]을 사용할 수 있습니다.

Docker의 파일을 외부로 복사하는 방법 Docker의 파일을 외부로 복사하는 방법 Apr 15, 2025 pm 12:12 PM

Docker의 외부 호스트에 파일을 복사하는 방법 : Docker CP 명령 사용 : Docker CP 실행 [옵션] & lt; 컨테이너 경로 & gt; & lt; 호스트 경로 & gt;. 데이터 볼륨 사용 : 호스트에서 디렉토리를 만들고 -V 매개 변수를 사용하여 양방향 파일 동기화를 달성하기 위해 컨테이너를 만들 때 컨테이너에 디렉토리를 장착하십시오.

중국의 도커 이미지 소스를 변경하는 방법 중국의 도커 이미지 소스를 변경하는 방법 Apr 15, 2025 am 11:30 AM

국내 거울 소스로 전환 할 수 있습니다. 단계는 다음과 같습니다. 1. 구성 파일 /etc/docker/daemon.json 편집 및 미러 소스 주소를 추가하십시오. 2. 저장 및 종료 후 Docker Service Sudo SystemCTL Docker를 다시 시작하여 이미지 다운로드 속도 및 안정성을 향상시킵니다.

See all articles