Rumah >Operasi dan penyelenggaraan >Docker >Apakah perbezaan antara arg dan env dalam docker

Apakah perbezaan antara arg dan env dalam docker

WBOY
WBOYasal
2022-01-28 10:40:206647semak imbas

Perbezaan antara arg dan env dalam docker ialah: arg wujud semasa binaan dan boleh digunakan sebagai pembolehubah dalam Dockerfile, manakala env ialah pembolehubah persekitaran selepas bekas dibina dan tidak boleh digunakan sebagai parameter dalam penggunaan Dockerfile.

Apakah perbezaan antara arg dan env dalam docker

Persekitaran pengendalian tutorial ini: sistem linux7.3, versi docker-1.13.1, komputer Dell G3.

Apakah perbezaan antara arg dan env dalam docker?

Apabila anda menggunakan docker-compoe untuk membina imej, anda akan merasakan bahawa fungsi ARG dan ENV adalah sangat serupa, tetapi ini dua kewujudan pasti mempunyai kelebihan tersendiri

Masa kesannya

  • arg wujud semasa binaan dan boleh digunakan sebagai pembolehubah dalam Dockerfile

  • env ialah pembolehubah persekitaran selepas bekas itu dibina. Ia tidak boleh digunakan sebagai parameter dalam fail Docker

Dari sini anda boleh melihat bahawa ARG adalah khas. direka untuk membina imej

Ambil contoh khusus

# 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\""]

Ini adalah fail untuk membina redis Terdapat ayat sedemikian di tengah

ARG REDIS_SET_PASSWORD=developer
ENV REDIS_PASSWORD ${REDIS_SET_PASSWORD}

Ia untuk

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

Ayat perkhidmatan A ini, ayat ini adalah untuk menetapkan kata laluan apabila memulakan redis, kerana apabila CMD dilaksanakan, ia bermakna bekas telah berjaya dibina dan dijalankan Pada masa ini, CMD dilaksanakan arahan dalam bekas dalam bekas, jadi pembolehubah dalam CMD ialah Pembolehubah persekitaran digunakan dan bukannya pembolehubah dalam Dockerfile, jadi nilai dalam ARG perlu diberikan kepada ENV semasa membina

Contoh lain menggunakan 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

Ini hanyalah 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

Pembolehubah di sini menggunakan ARG dan bukannya ENV, kerana arahan ini dijalankan dalam fail Docker. Tidak perlu menyimpan nilai pembolehubah persekitaran untuk pembolehubah yang digunakan sementara seperti ini Sangat sesuai untuk menggunakan ARG

Pembelajaran yang disyorkan: "tutorial video docker"

Atas ialah kandungan terperinci Apakah perbezaan antara arg dan env dalam docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn