Docker on Windows: Difference between revisions
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 | 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" | ||
} | } | ||
} | } | ||
} | } | ||
EOF | EOF | ||
Line 138: | Line 137: | ||
<source lang="powershell"> | <source lang="powershell"> | ||
wsl -l -v | wsl -l -v | ||
wsl -d docker-desktop | wsl -d docker-desktop | ||
wsl -d docker-desktop-data | wsl -d docker-desktop-data | ||
</source> | |||
==Backup Docker== | |||
<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 | wsl --shutdown | ||
wsl -- | 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