Docker on Windows: Difference between revisions

From Chorke Wiki
Jump to navigation Jump to search
 
(27 intermediate revisions by the same user not shown)
Line 1: Line 1:
AMD Ryzen 9 3900x, Ryzen 7 5800H supports virtualization. Almost every processors released since a long time have Virtualization. For Windows it's Vt-x, SVM(in some AMD motherboard vtx is renamed as SVM) or AMD-V.
AMD '''Ryzen 9 3900x''', '''Ryzen 7 5800H''' supports virtualization. Almost every processors released since a long time have Virtualization. For Windows it's '''VT-x''', '''SVM'''(in some AMD motherboard vtx is renamed as SVM), '''Vanderpool''' or '''AMD-V'''.


==PowerShell==
==PowerShell==
Line 58: Line 58:
             "defaultKeepStorage": "20GB"
             "defaultKeepStorage": "20GB"
         }
         }
     },
     }
    "data-root": "D:\\var\\lib\\docker"
}
}
EOF
EOF
Line 138: Line 137:


<source lang="powershell">
<source lang="powershell">
# powershell
wsl -l -v
wsl -l -v
wsl --shutdown
wsl -d docker-desktop
wsl -d docker-desktop
wsl -d docker-desktop-data
wsl -d docker-desktop-data
</source>


wsl --export docker-desktop docker-desktop.tar
==Backup Docker==
wsl --export docker-desktop-data docker-desktop-data.tar
<source lang="powershell">
New-Item D:\var\lib\docker -Type Directory -Force
Set-Location -Path D:\var\lib\docker


wsl --export docker-desktop docker_engine.tar
wsl --export docker-desktop-data docker_images.tar
</source>
===Move Engine Path===
<source lang="powershell">
wsl --shutdown
wsl --unregister docker-desktop
wsl --unregister docker-desktop
Set-Location -Path D:\var\lib\docker
New-Item D:\var\lib\docker\engine -Type Directory -Force
wsl --import docker-desktop  D:\var\lib\docker\engine docker_engine.tar --version 2
Set-Location -Path D:\var\lib\docker\engine
Get-ChildItem
wsl -l -v
net stop com.docker.service
net start com.docker.service
</source>
===Move Images Path===
<source lang="powershell">
wsl --shutdown
wsl --unregister docker-desktop-data
wsl --unregister docker-desktop-data
Set-Location -Path D:\var\lib\docker
New-Item D:\var\lib\docker\images -Type Directory -Force
wsl --import docker-desktop-data D:\var\lib\docker\images docker_images.tar --version 2
Set-Location -Path D:\var\lib\docker\images
Get-ChildItem
wsl -l -v
net stop com.docker.service
net start com.docker.service
</source>
===Move Ubuntu Path===
You can move your '''Ubuntu''' distro to elsewhere as following. The drawback is it will be login <code>root</code> user by default. It's lost the integrity, consistency and other features. If you are aware about the risk then now worries else leave it as usual. It's recommended don't make changes or any engineering over there. Leave it as it's. Following example for experimental purpose nothing else.
<source lang="powershell">
New-Item D:\var\wsl\ubuntu -Type Directory -Force
Set-Location -Path D:\var\wsl\ubuntu
wsl --export ubuntu ubuntu.tar


wsl --import docker-desktop D:\etc\lib\docker\ docker-desktop.tar --version 2
wsl --shutdown
wsl --import docker-desktop-data D:\var\lib\docker\ docker-desktop-data.tar --version 2
wsl --unregister ubuntu
wsl --import ubuntu D:\var\wsl\ubuntu ubuntu.tar --version 2
Get-ChildItem
 
wsl -l -v
net stop com.docker.service
net start com.docker.service
</source>
</source>


==Knowledge==
==Knowledge==
<source lang="powershell">
wslconfig /l
wslconfig /u 'Ubuntu'
wslconfig /u 'Ubuntu-18.04'
</source>
<source lang="bash">
<source lang="bash">
docker network ls
docker network ls
Line 182: Line 234:
docker cp ~/.m2/settings.xml alpine:~/.m2/settings.xml
docker cp ~/.m2/settings.xml alpine:~/.m2/settings.xml
docker cp alpine:~/.m2/settings.xml ~/.m2/settings.xml
docker cp alpine:~/.m2/settings.xml ~/.m2/settings.xml
</source>
<source lang="bash">
if [[ "$(</proc/sys/kernel/osrelease)" == *microsoft* ]];then echo 'WSL enabled';fi
if grep -qEi '(Microsoft|WSL)' /proc/version &>/dev/null;then echo 'WSL enabled';fi
if [[ "$(</proc/version)" == *microsoft* ]];then echo 'WSL enabled';fi
</source>
</source>


Line 222: Line 280:
| valign="top" |
| valign="top" |
* [https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-docker/configure-docker-daemon Configure Docker <code>daemon.json</code> on Windows]
* [https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-docker/configure-docker-daemon Configure Docker <code>daemon.json</code> on Windows]
* [https://stackoverflow.com/questions/61396989/ What is the <code>docker-desktop-data</code> distro?]
* [https://superuser.com/questions/1317883/ Uninstall the subsystem for Linux on Windows]
* [https://blog.frankfu.com.au/2018/03/09/change-dockers-default-storage-directory-for-images/ Docker change default containers directory]
* [https://blog.frankfu.com.au/2018/03/09/change-dockers-default-storage-directory-for-images/ Docker change default containers directory]
* [https://logging.apache.org/log4j/2.x/manual/cloud.html Using Log4j in Cloud Enabled Applications]
* [https://logging.apache.org/log4j/2.x/manual/cloud.html Using Log4j in Cloud Enabled Applications]
* [https://docs.docker.com/docker-for-windows/troubleshoot/#virtualization Docker for Windows Troubleshooting]
* [https://docs.microsoft.com/en-us/windows/wsl/wsl-config WSL commands and launch config]
* [https://docs.microsoft.com/en-us/windows/wsl/wsl-config WSL commands and launch config]
* [https://support.sitecore.com/kb?id=kb_article_view&sysparm_article=KB0383441 Copy files to/from a container]
* [https://support.sitecore.com/kb?id=kb_article_view&sysparm_article=KB0383441 Copy files to/from a container]
* [[Docker Compose]]
* [[Docker]]
|-
| colspan="3" |
----
|-
| valign="top" |
* [https://www.google.com/search?q=enable+virtualization+in+bios+%2B+American+Megatrends Enable Virtualization in BIOS + American Megatrends]
* [https://docs.microsoft.com/en-us/windows/wsl/use-custom-distro WSL use a custom Linux distribution]
* [https://stackoverflow.com/questions/37599128/ Disable auto-restart of a container]
* [https://docs.microsoft.com/en-us/windows/wsl/wsl2-mount-disk Mounting a Linux disk in WSL 2]
* [https://docs.chocolatey.org/en-us/choco/commands/uninstall Chocolatey Uninstall Package]
* [https://stackoverflow.com/questions/38086185/ Detect WSL vs Native Linux]
* [https://stackoverflow.com/questions/38859145/ Trace WSL vs Native Linux]
* [[Linux Containers]]
| valign="top" |


|}
|}

Latest revision as of 22:35, 21 November 2021

AMD Ryzen 9 3900x, Ryzen 7 5800H supports virtualization. Almost every processors released since a long time have Virtualization. For Windows it's VT-x, SVM(in some AMD motherboard vtx is renamed as SVM), Vanderpool or AMD-V.

PowerShell

run as administrator
1. Press ⊞ + R
2. Type in PowerShell
3. Press Ctrl + Shift + Enter
4. Choose Yes and Press Enter
# powershell
net start com.docker.service
net stop  com.docker.service

Windows 10 Home

# powershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
wsl --set-default-version 2
# powershell
docker pull hello-world
docker run -it --rm --name hello hello-world:latest
# gitbash
winpty docker pull hello-world
winpty docker run -it --rm --name hello hello-world:latest

Networking

cat <<EOF > /mnt/c/Users/shahed/.docker/daemon.json
{
    "bip": "10.20.13.1/24",
    "mtu": 1500,
    "dns": [
        "10.19.83.100",
        "10.19.83.1"
    ],
    "registry-mirrors": [],
    "insecure-registries": [],
    "debug": true,
    "experimental": false,
    "features": {
        "buildkit": true
    },
    "builder": {
        "gc": {
            "enabled": true,
            "defaultKeepStorage": "20GB"
        }
    }
}
EOF
cat <<EOF > /mnt/c/Users/shahed/.docker/daemon.json
{
    "mtu": 1500,
    "debug": true,
    "experimental": false,
    "default-address-pools": [
        {
            "base": "10.20.0.0/16",
            "size": 24
        }
    ]
}
EOF
docker run --rm --detach --publish 1983:80 nginx
docker run --rm --detach --net=host nginx

docker run --rm --detach --publish 1983:80 --net=ckn.b00 --ip 10.20.15.10 nginx
docker run --rm --detach --publish 1983:80 --net=ckn.b01 --ip 10.20.16.10 nginx

Cache or Mirror

mkdir -p /etc/docker/registry
cat <<EOF > /etc/docker/registry/config.yml
proxy:
  remoteurl: https://hub.chorke.org
  username: academia
  password: sadaqah!
EOF

Troubleshoot

docker run --rm --net=host busybox nslookup google.com
docker run --rm --net=host alpine cat /etc/resolv.conf
docker run --rm --net=host alpine nslookup google.com
docker run --rm --net=host alpine ping google.com
docker run --rm --net=host alpine cat /etc/hosts
docker run --rm --net=host alpine ifconfig
docker run --rm --net=host alpine ip addr
docker run --rm --net=host alpine route
docker run --rm busybox nslookup google.com
docker run --rm alpine cat /etc/resolv.conf
docker run --rm alpine nslookup google.com
docker run --rm alpine ping google.com
docker run --rm alpine cat /etc/hosts
docker run --rm alpine ifconfig
docker run --rm alpine ip addr
docker run --rm alpine route

Images Path

Ubuntu: /var/lib/docker/
Fedora: /var/lib/docker/
Debian: /var/lib/docker/
Windows: C:\ProgramData\DockerDesktop
MacOS: ~/Library/Containers/com.docker.docker/Data/vms/0/
wsl -l -v
wsl -d docker-desktop
wsl -d docker-desktop-data

Backup Docker

New-Item D:\var\lib\docker -Type Directory -Force
Set-Location -Path D:\var\lib\docker

wsl --export docker-desktop docker_engine.tar
wsl --export docker-desktop-data docker_images.tar

Move Engine Path

wsl --shutdown
wsl --unregister docker-desktop
Set-Location -Path D:\var\lib\docker

New-Item D:\var\lib\docker\engine -Type Directory -Force
wsl --import docker-desktop  D:\var\lib\docker\engine docker_engine.tar --version 2
Set-Location -Path D:\var\lib\docker\engine
Get-ChildItem

wsl -l -v
net stop com.docker.service
net start com.docker.service

Move Images Path

wsl --shutdown
wsl --unregister docker-desktop-data
Set-Location -Path D:\var\lib\docker

New-Item D:\var\lib\docker\images -Type Directory -Force
wsl --import docker-desktop-data D:\var\lib\docker\images docker_images.tar --version 2
Set-Location -Path D:\var\lib\docker\images
Get-ChildItem

wsl -l -v
net stop com.docker.service
net start com.docker.service

Move Ubuntu Path

You can move your Ubuntu distro to elsewhere as following. The drawback is it will be login root user by default. It's lost the integrity, consistency and other features. If you are aware about the risk then now worries else leave it as usual. It's recommended don't make changes or any engineering over there. Leave it as it's. Following example for experimental purpose nothing else.

New-Item D:\var\wsl\ubuntu -Type Directory -Force
Set-Location -Path D:\var\wsl\ubuntu
wsl --export ubuntu ubuntu.tar

wsl --shutdown
wsl --unregister ubuntu
wsl --import ubuntu D:\var\wsl\ubuntu ubuntu.tar --version 2
Get-ChildItem

wsl -l -v
net stop com.docker.service
net start com.docker.service

Knowledge

wslconfig /l
wslconfig /u 'Ubuntu'
wslconfig /u 'Ubuntu-18.04'
docker network ls
docker network prune
docker network rm ckn.b00 ckn.b01

docker inspect nginx|grep "IPAddress"
docker network inspect bridge|grep "Gateway"
docker run --rm -dit --network \
none --name alpine alpine:latest ash;\
docker exec -it alpine ip link show
docker network connect ckn.b00 nginx
docker exec -it nginx cat /etc/hosts
docker inspect nginx|grep "IPAddress"
docker exec -it nginx cat /etc/resolv.conf
docker exec -it nginx ls -lah /sys/class/net/
docker cp ~/.m2/settings.xml alpine:~/.m2/settings.xml
docker cp alpine:~/.m2/settings.xml ~/.m2/settings.xml
if [[ "$(</proc/sys/kernel/osrelease)" == *microsoft* ]];then echo 'WSL enabled';fi
if grep -qEi '(Microsoft|WSL)' /proc/version &>/dev/null;then echo 'WSL enabled';fi
if [[ "$(</proc/version)" == *microsoft* ]];then echo 'WSL enabled';fi
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)
docker ps --filter volume=remote-volume --format "table {{.ID}}\t{{.Mounts}}"
docker ps --filter volume=/data --format "table {{.ID}}\t{{.Mounts}}"
docker ps --format "table {{.ID}}\t{{.Labels}}"
docker ps --format '{{.Names}}\t{{.Image}}'
docker ps --format "{{.ID}}: {{.Command}}"
docker ps --filter publish=80/udp

Reference