你可能不知道的Docker使用技巧

116次阅读
没有评论

作为一名 Docker 忠实用户,感觉 docker 真是太好用啦,万物皆可 docker,我的所有项目都是用 docker 跑的,给大家分享一下我的使用心得

build命令

docker run -itd \
   -e XRAY_VMESS_AEAD_FORCED=false \
   -v $PWD/db/:/etc/x-ui/ \
   -v $PWD/cert/:/root/cert/ \
   --network=host \
   --restart=unless-stopped \
   --name 3x-ui \
   --build https://github.com/MHSanaei/3x-ui.git

这里的 build 命令会远程拉取 3x-ui 的仓库代码,类似于 git clone 到一个临时目录,并根据仓库中的 Dockerfile 进行编译然后运行。启动成功后会自动删除刚刚下载的代码。

这样就很方便编译远程项目并运行,同时不占用空间。很适合有洁癖的用户。


同样也适用于docker-compose

services:
  3x-ui:
    build: https://github.com/MHSanaei/3x-ui.git
    container_name: 3x-ui
    environment:
      - XRAY_VMESS_AEAD_FORCED=false
    volumes:
      - ./db:/etc/x-ui
      - ./cert:/root/cert
    network_mode: host
    restart: unless-stopped

当然也可以指定仓库的分支

build: https://github.com/MHSanaei/3x-ui.git#dev

ADD命令

还有就是 Dockerfile 里的 ADD 命令,这个命令支持远程下载文件,类似于 wget,同时也可以当复制用,同时带有自动解压功能,这样就可以不用在构建镜像时安装wgetunzip 这些工具,可以优化镜像大小。示例:

FROM php:8.1-apache

WORKDIR /var/www/html

# 下载远程脚本并赋予执行权限
ADD https://example.com/install.sh /var/www/html/install.sh
RUN chmod +x /var/www/html/install.sh && /var/www/html/install.sh

# 复制本地目录的 epay.tar 源码压缩包到容器中并自动解压
ADD ./epay.tar .

# 修改所有文件的所有者为 www-data 用户和组
RUN chown -R www-data:www-data /var/www/html

EXPOSE 80

# 启动 Apache 服务
CMD ["apache2-foreground"]

多阶段构建的 --from 命令

多阶段构建的 --from 命令不仅支持复制上一阶段的构建成果,同时也支持直接复制别人镜像里的成果,会先拉取别人的镜像,然后将别人镜像里指定目录里的文件复制到我们的镜像,然后自动删除别人的镜像,示例:

FROM webdevops/php-nginx:8.0-alpine

WORKDIR /app

# 将 weikedata/acgfaka 镜像里的 /app/www 目录下的源码文件复制到我们镜像里的 app 目录
COPY --from=weikedata/acgfaka /app/www /app

RUN chown -R www-data:www-data /app && \
    chmod -R 775 /app && \
    chmod -R 777 /app/config /app/data /app/uc_client /app/uc_server

EXPOSE 80

USER www-data

CMD ["supervisord"]

正文完
 0
评论(没有评论)
验证码