【问题标题】:Build Dockerfile without daemon on Windows在 Windows 上构建没有守护进程的 Dockerfile
【发布时间】:2021-08-20 03:38:24
【问题描述】:

Windows 上是否有任何可用的工具支持从 Dockerfile(Windows 映像)构建映像,而无需在 VM 上运行守护程序?

见过 Buildah 和 Podman,但从文档看来它们仅限于 Linux 平台。

【问题讨论】:

    标签: dockerfile docker-build podman buildah


    【解决方案1】:

    如果你想构建 linux 容器,你需要一个 linux 内核。所以这需要一个 VM 或 wsl2。

    Buildah 和 Podman 在任何一种情况下都可以正常工作。

    【讨论】:

    • Windows 容器* 我已经修改了主题。
    【解决方案2】:

    如果您担心在根上下文中工作的恶魔的安全问题,Podman 现在应该是您的朋友。 您需要在 bwt 后面安装带有 Linux 映像的 WSL2(如 Ubuntu)。

    请参阅博客文章:Replace Docker for Windows with Podman,其中详细描述了 Podman/WSL2 集成。

    我已将 myself compile 的案例放入单个 bash podman-quick.sh 脚本中。免费获取它并在您的新 WSL2 实例上执行它以感受本质。

    #!/bin/bash
    export NAME=xUbuntu
    export VERSION_ID=20.04
    export BASEPATH=/run/user/podman
    export PID_FILE=$BASEPATH/podman.pid
    export SOCK_FILE=$BASEPATH/podman.sock
    
    #--- Load dependencies
    sudo sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/${NAME}_${VERSION_ID}/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list"
    curl -L "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/${NAME}_${VERSION_ID}/Release.key" | sudo apt-key add -
    sudo apt-get update -qq
    sudo apt-get -qq -y install podman docker-compose
    sudo mkdir -p /etc/containers
    sudo mkdir -p $BASEPATH
    echo -e "[registries.search]\nregistries = ['docker.io', 'quay.io']" | sudo tee /etc/containers/registries.conf
    alias docker=podman
    
    podman system service --time=0 unix://$SOCK_FILE &  echo "$!" > $PID_FILE
    until [[ -S "$SOCK_FILE" && $COUNTER -lt 0 ]]; do echo Wating $COUNTER &&  sleep 1 &&  COUNTER=$((COUNTER-1)); done
    if [ -S $SOCK_FILE ]; then  sudo ln -sf $SOCK_FILE /var/run/docker.sock; fi
    echo "podman service started, pid is $(cat $PID_FILE)"
    
    # Validate Podman
    docker run -dt -p 8080:80/tcp docker.io/library/httpd
    curl http://localhost:8080 #... expected: <html><body><h1>It works!</h1></body></html>
    
    # Validate Docker-compose
    echo -e "version: '3' \nservices:\n  myalpine:\n    image: python:3.7-alpine" > docker-compose.yml
    sudo docker-compose up
    sudo docker-compose images #... expected: Image to be resent 'docker.io/library/python'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多