찾다
운영 및 유지보수DockerDockerFile 명령을 심층적으로 이해하도록 안내합니다.

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

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

추천 학습: "docker video tutorial"

DockerFile 명령에 대한 자세한 설명

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

이미지 빌드

docker build [选项] 

docker build -t nginx:v3 .           # . 表示Dockerfile在当前目录

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

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

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

RUN 실행 명령

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

쉘 형식:

RUN 

RUN echo '<h1 id="Hello-Docker">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>] ["",... ""]</group></user></group></user>
# 把当前目录的a.txt文件复制到镜像的根目录
COPY a.txt /a.txt

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

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

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>...</value2></key2></value1></key1></value></key>

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 ["", ""...]
VOLUME 

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

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

EXPOSE 노출된 포트

EXPOSE  [...]

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> ...</value></key></value></key></value></key>
# 标注镜像的作者

LABEL org.opencontainers.image.authors="yeasy"

SHELL 指定执行shell命令的参数

SHELL ["可执行程序", "参数"]
SHELL ["/bin/sh", "-c"]

RUN lll ; ls             # 这里的shell命令将通过 /bin/sh -c 的方式执行

推荐学习:《docker视频教程

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

성명
이 기사는 CSDN에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
docker中rm和rmi有什么区别docker中rm和rmi有什么区别Jul 14, 2022 am 11:02 AM

docker中rm和rmi的区别:rm命令用于删除一个或者多个容器,而rmi命令用于删除一个或者多个镜像;rm命令的语法为“docker rm [OPTIONS] CONTAINER [CONTAINER...]”,rmi命令的语法为“docker rmi [OPTIONS] IMAGE [IMAGE...]”。

docker官方镜像有哪些docker官方镜像有哪些May 12, 2022 pm 02:23 PM

docker官方镜像有:1、nginx,一个高性能的HTTP和反向代理服务;2、alpine,一个面向安全应用的轻量级Linux发行版;3、busybox,一个集成了三百多个常用Linux命令和工具的软件;4、ubuntu;5、PHP等等。

docker是免费的吗docker是免费的吗Jul 08, 2022 am 11:21 AM

docker对于小型企业、个人、教育和非商业开源项目来说是免费的;2021年8月31日,docker宣布“Docker Desktop”将转变“Docker Personal”,将只免费提供给小型企业、个人、教育和非商业开源项目使用,对于其他用例则需要付费订阅。

docker容器重启后数据会丢吗docker容器重启后数据会丢吗Jun 17, 2022 am 10:41 AM

docker容器重启后数据会丢失的;但是可以利用volume或者“data container”来实现数据持久化,在容器关闭之后可以利用“-v”或者“–volumes-from”重新使用以前的数据,docker也可挂载宿主机磁盘目录,用来永久存储数据。

什么是docker最早支持的存储引擎什么是docker最早支持的存储引擎May 12, 2022 pm 03:27 PM

AUFS是docker最早支持的存储引擎。AUFS是一种Union File System,是文件级的存储驱动,是Docker早期用的存储驱动,是Docker18.06版本之前,Ubuntu14.04版本前推荐的,支持xfs、ext4文件。

docker能安装oracle吗docker能安装oracle吗Jul 08, 2022 pm 04:07 PM

docker能安装oracle。安装方法:1、拉取Oracle官方镜像,可以利用“docker images”查看镜像;2、启动容器后利用“docker exec -it oracle11g bash”进入容器,并且编辑环境变量;3、利用“sqlplus /nolog”进入oracle命令行即可。

docker存储空间不足怎么办docker存储空间不足怎么办Jul 22, 2022 pm 03:44 PM

解决方法:1、停止docker服务后,利用“rsync -avz /var/lib/docker 大磁盘目录/docker/lib/”将docker迁移到大容量磁盘中;2、编辑“/etc/docker/daemon.json”添加指定参数,将docker的目录迁移绑定;3、重载和重启docker服务即可。

docker中的镜像会自动更新吗docker中的镜像会自动更新吗Jun 22, 2022 pm 04:23 PM

docker中的镜像会自动更新;可以利用Watchtower工具来自动更新镜像,Watchtower是一个可以监控正在运行的容器镜像是否更新的工具,当本地镜像与远程镜像有差异的时候,可以自动使用当前容器的运行参数以新镜像重新创建一个新的容器,并删除旧的容器。

See all articles

핫 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를 무료로 생성하십시오.

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전