如何在Dockerfile中下载和解压缩

Dro*_*miX 6 wordpress wget unzip docker dockerfile

因此,我可以使用它,但是我想更改立即下载文件并解压缩的方式:

Dockerfile
FROM wordpress:fpm

# Copying themes from local  
COPY  ./wordpress/ /var/www/html/wp-content/themes/wordpress/    
RUN chmod -R 777 /var/www/html/    
Run Code Online (Sandbox Code Playgroud)

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

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 
Run Code Online (Sandbox Code Playgroud)

我试过了:

#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;
Run Code Online (Sandbox Code Playgroud)

小智 6

在Docker 文档中找到了有关远程压缩文件的更多指导

\n
\n

由于图像大小很重要,因此强烈建议不要使用 ADD 从远程 URL 获取包;你应该使用curl或wget代替。\n这样你就可以在提取\xe2\x80\x99ve\n后删除不再需要的文件,并且\xe2\x80\x99\n不必在图像中添加另一个图层。\例如,您应该避免执行以下操作:

\n
\n
ADD https://example.com/big.tar.xz /usr/src/things/\nRUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things\nRUN make -C /usr/src/things all\n
Run Code Online (Sandbox Code Playgroud)\n

相反,做类似的事情:

\n
RUN mkdir -p /usr/src/things \\\n    && curl -SL https://example.com/big.tar.xz \\\n    | tar -xJC /usr/src/things \\\n    && make -C /usr/src/things all\n
Run Code Online (Sandbox Code Playgroud)\n


Tar*_*yan 5

Dockerfile 有用于复制和提取.tar.gz文件的“本机命令”。

因此,您可以将存档类型从.zip更改为.tar.gz(也许在未来版本中也将支持 zip,我不确定)并使用ADD而不是COPY.tar.gz。

阅读更多关于ADD

  • 问题是,如何将 ADD 与 wget 结合起来,因为 ADD 只解压缩 __local__ 文件。 (6认同)
  • “ADD”确实复制、提取或下载……但从不混合,这是非常愚蠢的。就我个人而言,我会创建 3 个不同的动词(具有单一含义)。(抱歉胡言乱语) (4认同)

kra*_*rad 5

最好使用多阶段 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/    
Run Code Online (Sandbox Code Playgroud)

更好的是,如果已经使用您想要的内容构建了一个 Docker 映像,您只需要“copy --from”行并为其指定映像名称。

最后,不要担心第一阶段中的任何混乱,因为它在构建完成时被丢弃,因此它的高山性和不使用无缓存的事实是无关紧要的,并且没有任何已安装的软件包最终出现在最终图像中