首頁  >  文章  >  運維  >  docker中arg和env的差別是什麼

docker中arg和env的差別是什麼

WBOY
WBOY原創
2022-01-28 10:40:206573瀏覽

docker中arg和env的區別是:arg是在build的時候存在的,可以在Dockerfile中當做變量來使用,而env是容器構建好之後的環境變量,不能在Dockerfile中當參數使用。

docker中arg和env的差別是什麼

本教學操作環境:linux7.3系統、docker-1.13.1版、Dell G3電腦。

docker中arg和env的區別是什麼

在使用docker-compoe 構建映像的時候會感覺ARG 和ENV 的作用很相似, 但是這兩個存在就肯定有它的原因

它們起作用的時機

  • arg 是在build 的時候存在的, 可以在Dockerfile 中當做變數來使用

  • #env 是容器建置好之後的環境變數, 不能在Dockerfile 中當參數使用

#從這裡可以看出來ARG 就是專門為建構鏡像而生的

拿一個具體的例子

# Dockerfile
FROM redis:3.2-alpine
LABEL maintainer="GPF <5173180@qq.com>"
ARG REDIS_SET_PASSWORD=developer
ENV REDIS_PASSWORD ${REDIS_SET_PASSWORD}
VOLUME /data
EXPOSE 6379
CMD ["sh", "-c", "exec redis-server --requirepass \"$REDIS_PASSWORD\""]

這是一個構建redis 的文件, 中間有這麼一句

ARG REDIS_SET_PASSWORD=developer
ENV REDIS_PASSWORD ${REDIS_SET_PASSWORD}

它是為

CMD ["sh", "-c", "exec redis-server --requirepass \"$REDIS_PASSWORD\""]

這一句服務的, 這句就是在啟動redis 的時候設定密碼, 因為當執行CMD 的時候,說明容器已經建構成功運行了起來,此時CMD是在容器中執行容器中的命令, 因此CMD 中的變數是用的環境變數而不是在Dockerfile 中的變數,因此需要把ARG 中的值在建構的時候賦值給ENV

另一個使用ARG 的例子

FROM nginx:1.13.1-alpine
LABEL maintainer="GPF <5173180@qq.com>"
#https://yeasy.gitbooks.io/docker_practice/content/image/build.html
RUN mkdir -p /etc/nginx/cert \
    && mkdir -p /etc/nginx/conf.d \
    && mkdir -p /etc/nginx/sites
COPY ./nginx.conf /etc/ngixn/nginx.conf
COPY ./conf.d/ /etc/nginx/conf.d/
COPY ./cert/ /etc/nginx/cert/
COPY ./sites /etc/nginx/sites/
ARG PHP_UPSTREAM_CONTAINER=php-fpm
ARG PHP_UPSTREAM_PORT=9000
RUN echo "upstream php-upstream { server ${PHP_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" > /etc/nginx/conf.d/upstream.conf
VOLUME ["/var/log/nginx", "/var/www"]
WORKDIR /usr/share/nginx/html

這裡就只是用了ARG

ARG PHP_UPSTREAM_CONTAINER=php-fpm
ARG PHP_UPSTREAM_PORT=9000
RUN echo "upstream php-upstream { server ${PHP_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" > /etc/nginx/conf.d/upstream.conf

這裡的變數用的就是ARG 而不是ENV了,因為這條指令運行在Dockerfile 當中的, 像這種臨時使用一下的變數沒必要存環境變數的值就很適合使用ARG

推薦學習:《docker影片教學

以上是docker中arg和env的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn