Docker: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
| (3 intermediate revisions by the same user not shown) | |||
| Line 16: | Line 16: | ||
==Windows 10 Home== | ==Windows 10 Home== | ||
{|class='wikitable mw-collapsible' style='width:100%;margin:3px 0' | {|class='wikitable mw-collapsible' style='width:100%;margin:3px 0' | ||
!scope='col' style='text-align:left'| | !scope='col' style='text-align:left' colspan='2'| | ||
Windows 10 Home | Windows 10 Home | ||
|- | |- | ||
|valign='top'| | |valign='top' colspan='2'| | ||
<syntaxhighlight style='margin:3px 0' lang='powershell'> | <syntaxhighlight style='margin:3px 0' lang='powershell'> | ||
# powershell | # powershell | ||
| Line 26: | Line 26: | ||
wsl --set-default-version 2 | wsl --set-default-version 2 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|- | |||
|valign='top' style='width:50%'| | |||
<syntaxhighlight style='margin:3px 0' lang='powershell'> | <syntaxhighlight style='margin:3px 0' lang='powershell'> | ||
# powershell | # powershell | ||
| Line 33: | Line 34: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|valign='top' style='width:50%'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
# gitbash | # gitbash | ||
| Line 98: | Line 100: | ||
===Bridge=== | ===Bridge=== | ||
{|class='wikitable mw-collapsible' style='width:100%;margin:3px 0' | |||
!scope='col' style='text-align:left'| | |||
Bridge | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
docker network create \ | docker network create \ | ||
| Line 109: | Line 116: | ||
--opt com.docker.network.bridge.name=ckn.b00 ckn.b00 | --opt com.docker.network.bridge.name=ckn.b00 ckn.b00 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |||
===MAC VLAN=== | ===MAC VLAN=== | ||
{|class='wikitable mw-collapsible' style='width:100%;margin:3px 0' | |||
!scope='col' style='text-align:left'| | |||
MAC VLAN | |||
|- | |||
|valign='top'| | |||
'''Bridge mode''' | '''Bridge mode''' | ||
<syntaxhighlight style='margin:3px 0' lang='bash'> | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
| Line 120: | Line 132: | ||
--opt parent=wlan0 ckn.v00 | --opt parent=wlan0 ckn.v00 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|- | |||
|valign='top'| | |||
'''802.1q trunk bridge mode''' | '''802.1q trunk bridge mode''' | ||
<syntaxhighlight style='margin:3px 0' lang='bash'> | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
| Line 130: | Line 143: | ||
--opt parent=wlan0.01 ckn.v01 | --opt parent=wlan0.01 ckn.v01 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
docker network inspect ckn.v00 | docker network inspect ckn.v00 | ||
docker network connect ckn.v00 nginx | docker network connect ckn.v00 nginx | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
docker exec -it nginx ls -lah /sys/class/net/ | docker exec -it nginx ls -lah /sys/class/net/ | ||
| Line 146: | Line 161: | ||
curl -v http://10.20.20.240 | curl -v http://10.20.20.240 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
docker network disconnect bridge nginx | docker network disconnect bridge nginx | ||
docker network disconnect ckn.v00 nginx | docker network disconnect ckn.v00 nginx | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |||
===IP VLAN=== | ===IP VLAN=== | ||
{|class='wikitable mw-collapsible' style='width:100%;margin:3px 0' | |||
!scope='col' style='text-align:left'| | |||
IP VLAN | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
docker network create -d ipvlan \ | docker network create -d ipvlan \ | ||
| Line 163: | Line 183: | ||
--opt ipvlan_mode=l2 ckn.i00 | --opt ipvlan_mode=l2 ckn.i00 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |||
==Cache or Mirror== | ==Cache or Mirror== | ||
<syntaxhighlight lang= | {|class='wikitable mw-collapsible' style='width:100%;margin:3px 0' | ||
!scope='col' style='text-align:left'| | |||
Cache or Mirro | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='yaml'> | |||
mkdir -p /etc/docker/registry | mkdir -p /etc/docker/registry | ||
cat <<EOF > /etc/docker/registry/config.yml | cat <<EOF > /etc/docker/registry/config.yml | ||
--- | |||
proxy: | proxy: | ||
remoteurl: https://hub.chorke.org | remoteurl: https://hub.chorke.org | ||
| Line 174: | Line 201: | ||
EOF | EOF | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |||
==Add Tag & Push == | ==Add Tag & Push== | ||
<syntaxhighlight lang= | {|class='wikitable mw-collapsible' style='width:100%;margin:3px 0' | ||
!scope='col' style='text-align:left'| | |||
Add Tag & Push | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
RFIND_FILL="s|docker.chorke.com|docker.chorke.org|";\ | RFIND_FILL="s|docker.chorke.com|docker.chorke.org|";\ | ||
OLD_IMAGES="$(docker images --format 'table {{.Repository}}:{{.Tag}}'|grep chorke)";\ | OLD_IMAGES="$(docker images --format 'table {{.Repository}}:{{.Tag}}'|grep chorke)";\ | ||
| Line 187: | Line 220: | ||
done | done | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |||
==Troubleshoot== | ==Troubleshoot== | ||
{| | {|class='wikitable mw-collapsible' style='width:100%;margin:3px 0' | ||
|valign='top'| | !scope='col' style='text-align:left' colspan='2'| | ||
Troubleshoot | |||
|- | |||
|valign='top' style='width:50%'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
docker run --rm --net=host busybox nslookup google.com | docker run --rm --net=host busybox nslookup google.com | ||
| Line 202: | Line 239: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|valign='top'| | |valign='top' style='width:50%'| | ||
<syntaxhighlight style='margin:3px 0' lang='bash'> | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
docker run --rm busybox nslookup google.com | docker run --rm busybox nslookup google.com | ||
| Line 213: | Line 250: | ||
docker run --rm alpine route | docker run --rm alpine route | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|- | |- | ||
|valign='top'| | |||
|valign='top' | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
docker run --add-host=host.docker.internal:host-gateway\ | docker run --add-host=host.docker.internal:host-gateway\ | ||
| Line 224: | Line 257: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
docker run --add-host=host.docker.internal:host-gateway\ | docker run --add-host=host.docker.internal:host-gateway\ | ||
-it --rm alpine sh | -it --rm alpine sh | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
docker inspect crawler|grep compose | docker inspect crawler|grep compose | ||
docker logs crawler | docker logs crawler | ||
docker logs -f crawler | docker logs -f crawler | ||
</syntaxhighlight> | |||
|valign='top'| | |||
|- | |||
|valign='top' colspan='2'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
export DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --iptables=false --ip-forward=false" | export DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --iptables=false --ip-forward=false" | ||
| Line 240: | Line 279: | ||
systemctl restart docker | systemctl restart docker | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|- | |||
|valign='top'| | |valign='top'| | ||
<syntaxhighlight style='margin:3px 0' lang='bash'> | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
| Line 257: | Line 295: | ||
systemctl start docker | systemctl start docker | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|- | |||
|valign='top'| | |valign='top'| | ||
<syntaxhighlight style='margin:3px 0' lang='bash'> | <syntaxhighlight style='margin:3px 0' lang='bash'> | ||
| Line 264: | Line 302: | ||
setenforce 0 | setenforce 0 | ||
sestatus | sestatus | ||
</syntaxhighlight> | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
#devil most things for docker0 bridge | |||
sudo apt remove netscript-2.4 | |||
sudo apt purge netscript-2.4 | |||
sudo apt autoremove | |||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |} | ||
==Ryzen AMD-V== | ==Ryzen AMD-V== | ||
| Line 346: | Line 387: | ||
find /var/log/nginx -type f -mtime +90 -delete | find /var/log/nginx -type f -mtime +90 -delete | ||
EXE | EXE | ||
</syntaxhighlight> | |||
|} | |||
==Custom Docker Image== | |||
{|class='wikitable mw-collapsible' style='width:100%;margin:3px 0' | |||
!scope='col' style='text-align:left'| | |||
Custom Docker Image | |||
|- | |||
|valign='top'| | |||
<syntaxhighlight style='margin:3px 0' lang='bash'> | |||
cat <<'INI' | tee ./Dockerfile >/dev/null | |||
FROM eclipse-temurin:17-jre-focal | |||
RUN apt update --fix-missing \ | |||
&& apt install -y nginx apache2-utils | |||
INI | |||
docker build --rm -t 'docker.shahed.biz/tools/eclipse-temurin:17-jre-focal' -f ./Dockerfile . | |||
docker push docker.shahed.biz/tools/eclipse-temurin:17-jre-focal | |||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |} | ||
Latest revision as of 07:59, 15 January 2026
sudo usermod -aG docker $USER
newgrp docker
mkdir "$HOME/.docker"
sudo chown "$USER":"$USER" "$HOME/.docker" -R
sudo chmod g+rwx "$HOME/.docker" -R
sudo systemctl daemon-reload
sudo systemctl restart docker.service
|
Windows 10 Home
|
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
|
Networking | |
|---|---|
cat <<'EOF' | \
sudo tee /etc/docker/daemon.json >/dev/null
{
"bip" : "10.20.13.1/24",
"mtu" : 1500,
"dns" : [
"1.1.1.1",
"8.8.8.8",
"192.168.49.2"
],
"debug": true
}
EOF
|
cat << EOF | \
sudo tee /etc/docker/daemon.json >/dev/null
{
"mtu" : 1500,
"debug" : true,
"experimental": false,
"default-address-pools" :[{
"base" : "10.20.0.0/16",
"size" : 24
}]
}
EOF
|
apt install -y iputils
iptables -t nat -S
service docker stop
service docker start
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
|
|
Bridge
|
Bridge |
|---|
docker network create \
--driver bridge \
--gateway 10.20.15.1 \
--subnet 10.20.15.0/24 \
--opt com.docker.network.driver.mtu=1500 \
--opt com.docker.network.bridge.enable_icc=true \
--opt com.docker.network.bridge.enable_ip_masquerade=true \
--opt com.docker.network.bridge.host_binding_ipv4=0.0.0.0 \
--opt com.docker.network.bridge.name=ckn.b00 ckn.b00
|
MAC VLAN
|
MAC VLAN |
|---|
|
Bridge mode docker network create \
--driver macvlan \
--gateway 10.20.20.1 \
--subnet 10.20.20.0/24 \
--opt parent=wlan0 ckn.v00
|
|
802.1q trunk bridge mode docker network create \
--driver macvlan \
--gateway 10.20.20.1 \
--subnet 10.20.20.0/24 \
--ip-range 10.20.20.240/28 \
--opt parent=wlan0.01 ckn.v01
|
docker network inspect ckn.v00
docker network connect ckn.v00 nginx
|
docker exec -it nginx ls -lah /sys/class/net/
docker exec -it nginx cat /etc/resolv.conf
docker inspect nginx|grep "IPAddress"
docker exec -it nginx cat /etc/hosts
curl -v http://10.20.20.240:1983
curl -v http://localhost:1983
curl -v http://10.20.20.240
|
docker network disconnect bridge nginx
docker network disconnect ckn.v00 nginx
|
IP VLAN
|
IP VLAN |
|---|
docker network create -d ipvlan \
--subnet=10.20.1.0/24 \
--subnet=10.20.2.0/24 \
--gateway=10.20.1.254 \
--gateway=10.20.2.254 \
--opt ipvlan_mode=l2 ckn.i00
|
Cache or Mirror
|
Cache or Mirro |
|---|
mkdir -p /etc/docker/registry
cat <<EOF > /etc/docker/registry/config.yml
---
proxy:
remoteurl: https://hub.chorke.org
username: academia
password: sadaqah!
EOF
|
Add Tag & Push
|
Add Tag & Push |
|---|
RFIND_FILL="s|docker.chorke.com|docker.chorke.org|";\
OLD_IMAGES="$(docker images --format 'table {{.Repository}}:{{.Tag}}'|grep chorke)";\
for OLD_IMAGE in ${OLD_IMAGES};do\
NEW_IMAGE="$(echo ${OLD_IMAGE}|sed ${RFIND_FILL})";\
docker tag ${OLD_IMAGE} ${NEW_IMAGE} &&\
docker push ${NEW_IMAGE} &&\
docker rmi ${NEW_IMAGE} &&\
docker rmi ${OLD_IMAGE};\
done
|
Troubleshoot
|
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
|
docker run --add-host=host.docker.internal:host-gateway\
-it --rm alpine ping host.docker.internal
|
docker run --add-host=host.docker.internal:host-gateway\
-it --rm alpine sh
|
docker inspect crawler|grep compose
docker logs crawler
docker logs -f crawler
|
|
export DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --iptables=false --ip-forward=false"
firewall-cmd --permanent --zone=trusted --change-interface=docker0
firewall-cmd --reload
systemctl restart docker
| |
systemctl stop docker
rm -fr /var/lib/docker
rm -fr /etc/docker
pkill docker
|
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
systemctl start docker
|
vim /etc/selinux/config
shutdown -r now
setenforce 0
sestatus
|
#devil most things for docker0 bridge
sudo apt remove netscript-2.4
sudo apt purge netscript-2.4
sudo apt autoremove
|
Ryzen AMD-V
|
Ryzen AMD-V |
|---|
|
Yes, AMD Ryzen 9 3900x supports virtualization. Almost every processors released since a long time have Virtualization. For Windows it's Vt-x or SVM(in some AMD motherboard vtx is renamed as SVM). |
Images Path
|
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/
|
Backup & Restore
|
Backup & Restore |
|---|
docker pull gitea/gitea:1.10.6
docker pull gitea/gitea:1.16.2
docker image load -i ~/.config/backup/gitea_gitea_1.10.6.tar
docker image load -i ~/.config/backup/gitea_gitea_1.16.2.tar
docker image save -o ~/.config/backup/gitea_gitea_1.10.6.tar gitea/gitea:1.10.6
docker image save -o ~/.config/backup/gitea_gitea_1.16.2.tar gitea/gitea:1.16.2
|
Reclaim Disk Space
|
Reclaim Disk Space |
|---|
cat <<'EXE' | sudo bash
sh -c 'du -sh /var/lib/docker/containers/*'
sh -c 'truncate -s 0 /var/lib/docker/containers/*/*-json.log' 2>/dev/null
docker images -f 'dangling=true' -q
docker rmi $(docker images -f 'dangling=true' -q) 2>/dev/null
docker system prune -f --volumes
docker builder prune -f -a
docker network prune -f
docker volume prune -f
apt-get clean
apt-get autoclean
apt-get autoremove -y
journalctl --disk-usage
journalctl --vacuum-time=90d
find /tmp -type f -mtime +7
find /tmp -type f -mtime +7 -delete
find /var/log/nginx -type f -mtime +90
find /var/log/nginx -type f -mtime +90 -delete
EXE
|
Custom Docker Image
|
Custom Docker Image |
|---|
cat <<'INI' | tee ./Dockerfile >/dev/null
FROM eclipse-temurin:17-jre-focal
RUN apt update --fix-missing \
&& apt install -y nginx apache2-utils
INI
docker build --rm -t 'docker.shahed.biz/tools/eclipse-temurin:17-jre-focal' -f ./Dockerfile .
docker push docker.shahed.biz/tools/eclipse-temurin:17-jre-focal
|
Recovery Parent Image
|
Recovery Parent Image |
|---|
docker pull docker.shahed.biz/shahed-academia-apps:2025-10-10T1010
docker history docker.shahed.biz/shahed-academia-apps:2025-10-10T1010
docker inspect docker.shahed.biz/shahed-academia-apps:2025-10-10T1010 | jq '.[0].RootFS.Layers'
docker run -it --name recovery-openjdk-17-slim docker.shahed.biz/shahed-academia-apps:2025-10-10T1010 bash
# executing bash command try to clean up new changes and then commit as below
docker commit recovery-openjdk-17-slim openjdk:17-slim
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
alpine/dfimage:1.2 docker.shahed.biz/shahed-academia-apps:2025-10-10T1010
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
wagoodman/dive:v0.13.1 docker.shahed.biz/shahed-academia-apps:2025-10-10T1010
docker rmi docker.shahed.biz/shahed-academia-apps:2025-10-10T1010
docker rm recovery-openjdk-17-slim
docker rmi wagoodman/dive:v0.13.1
docker rmi alpine/dfimage:1.2
|
Knowledge
|
Knowledge | |
|---|---|
docker network ls
docker network prune
docker network rm ckn.b00 ckn.b01
docker inspect nginx|grep compose
docker inspect nginx|grep "IPAddress"
docker network inspect bridge|grep "Gateway"
| |
docker rm $(docker ps -a -q)
docker stop $(docker ps -a -q)
|
docker inspect nginx
docker update --restart=no nginx
|
docker run --rm -dit --network \
none --name alpine alpine:latest ash;\
docker exec -it alpine ip link show
| |
docker network create --driver bridge \
--opt com.docker.network.bridge.name=ckn.b00 ckn.b00
| |
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 run --add-host=host.docker.internal:host-gateway\
--rm alpine ping host.docker.internal
| |
docker cp ~/.m2/settings.xml alpine:/root/.m2/settings.xml
docker cp alpine:/root/.m2/settings.xml ~/.m2/settings.xml
| |
docker network disconnect bridge nginx
docker network disconnect ckn.b00 nginx
docker exec -it nginx ls -lah /sys/class/net/
| |
docker run -itd --network=ckn.b00 nginx
docker network disconnect ckn.b00 nginx
docker network connect --alias db --alias mysql ckn.b00 mysql
| |
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
| |