如何在Dockerfile中下载和解压缩

txu3uszq  于 2023-10-16  发布在  Docker
关注(0)|答案(3)|浏览(190)

所以,我有,它的工作原理,但我想改变的方式立即下载文件并解压:

Dockerfile
FROM wordpress:fpm

# Copying themes from local  
COPY  ./wordpress/ /var/www/html/wp-content/themes/wordpress/    
RUN chmod -R 777 /var/www/html/

如何立即从网站下载文件并将其解压缩到相应的文件夹?

docker-compose.yml
wordpress:
build: . 
links:
  - db:mysql
nginx:
image: raulr/nginx-wordpress 
links:
  - wordpress
ports:
 - "8080:80"
 volumes_from:
 - wordpress
db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: qwerty

我试过:

#install unzip and wget
RUN \
apt-get update && \
apt-get install unzip wget -y && \
rm -rf /var/lib/apt/lists/*

RUN wget -O /var/www/html/type.zip http://wp-templates.ru/download/2405 \
&& unzip '/var/www/html/type.zip' -d /var/www/html/wp-content/themes/ && rm 
/var/www/html/type.zip || true;
p1iqtdky

p1iqtdky1#

最好使用多阶段Docker构建。您需要启用最新版本的docker和buildkit。然后沿着这些路线做些沿着的事情

# syntax=docker/dockerfile:1
FROM alpine:latest AS unzipper
RUN apk add unzip wget curl
RUN mkdir /opt/ ; \
  curl <some-url> | tar xvzf - -C /opt

FROM wordpress:fpm
COPY  --from=unzipper /opt/ /var/www/html/wp-content/themes/wordpress/

更好的是,如果有一个Docker镜像已经构建了你想要的东西,你只需要'copy --from'一行,然后给予镜像名称。
最后,不要担心第一阶段的任何混乱,因为当构建完成时,它会被丢弃,所以它的阿尔卑斯山和不使用无缓存的事实是无关紧要的,并且没有一个安装的软件包最终会出现在最终的图像中

atmip9wb

atmip9wb2#

Docker documentation中找到远程压缩文件的更多指导
因为图像大小很重要,所以强烈建议不要使用ADD从远程URL获取软件包;你应该使用curl或wget来代替。这样你就可以删除你不再需要的文件后,他们已经被提取,你不必添加另一个图层在你的图像。例如,你应该避免做这样的事情:

ADD https://example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all

相反,请执行以下操作:

RUN mkdir -p /usr/src/things \
    && curl -SL https://example.com/big.tar.xz \
    | tar -xJC /usr/src/things \
    && make -C /usr/src/things all
nue99wik

nue99wik3#

Dockerfile有一个“native command”,用于复制和提取.tar.gz文件。
所以你可以把压缩文件的类型从 .zip 改为 *. tar.gz *(也许将来的版本也会支持zip,我不确定),并使用ADD代替COPY
阅读更多关于ADD

相关问题