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.
Persekitaran pengendalian tutorial ini: sistem linux7.3, versi docker-1.13.1, komputer Dell G3.
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!