您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

docker中arg和env的区别是什么

2024/7/31 17:19:17发布20次查看
docker中arg和env的区别是:arg是在build的时候存在的,可以在dockerfile中当做变量来使用,而env是容器构建好之后的环境变量,不能在dockerfile中当参数使用。
本教程操作环境:linux7.3系统、docker-1.13.1版、dell g3电脑。
docker中arg和env的区别是什么在使用 docker-compoe 构建镜像的时候会感觉 arg 和 env 的作用很相似, 但是这两个存在就肯定有它的原因
它们起作用的时机
arg 是在 build 的时候存在的, 可以在 dockerfile 中当做变量来使用
env 是容器构建好之后的环境变量, 不能在 dockerfile 中当参数使用
从这里可以看出来 arg 就是专门为构建镜像而生的
拿一个具体的例子
# dockerfilefrom redis:3.2-alpinelabel maintainer="gpf <5173180@qq.com>"arg redis_set_password=developerenv redis_password ${redis_set_password}volume /dataexpose 6379cmd ["sh", "-c", "exec redis-server --requirepass \"$redis_password\""]
这是一个构建 redis 的文件, 中间有这么一句
arg redis_set_password=developerenv 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-alpinelabel maintainer="gpf <5173180@qq.com>"#https://yeasy.gitbooks.io/docker_practice/content/image/build.htmlrun mkdir -p /etc/nginx/cert \ && mkdir -p /etc/nginx/conf.d \ && mkdir -p /etc/nginx/sitescopy ./nginx.conf /etc/ngixn/nginx.confcopy ./conf.d/ /etc/nginx/conf.d/copy ./cert/ /etc/nginx/cert/copy ./sites /etc/nginx/sites/arg php_upstream_container=php-fpmarg php_upstream_port=9000run echo "upstream php-upstream { server ${php_upstream_container}:${php_upstream_port}; }" > /etc/nginx/conf.d/upstream.confvolume ["/var/log/nginx", "/var/www"]workdir /usr/share/nginx/html
这里就只是用了arg
arg php_upstream_container=php-fpmarg php_upstream_port=9000run 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的区别是什么的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product