🌱 🦤 🌱

关于docker网络

  • docker网络模式, 有host, bridge, …
1
docker network ls
1
docker inspect --format='{{.Name}} => {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
1
sudo iptables -t nat -nvL
1
ip route
  • host: 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口

  • bridge: 此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信


docker pull 使用镜像

1
docker pull docker.nju.edu.cn/atest:latest
1
docker tag docker.nju.edu.cn/atest:latest btest:latest
1
docker image rm docker.nju.edu.cn/atest:latest

docker pull 使用代理

1
sudo mkdir -p /etc/systemd/system/docker.service.d
1
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
1
2
3
4
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:10809"
Environment="HTTPS_PROXY=http://127.0.0.1:10809"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
1
sudo systemctl daemon-reload
1
sudo systemctl restart docker

docker build 使用代理

1
docker build --network host --build-arg http_proxy=http://127.0.0.1:10809 --build-arg https_proxy=http://127.0.0.1:10809

docker contains 使用代理

1
docker run -it --rm --network host -e HTTP_PROXY="http://127.0.0.1:10809" -e HTTPS_PROXY="http://127.0.0.1:10809"

常用命令

  • 停止所有容器
1
docker stop $(docker ps -aq)
  • 上传文件到容器
1
docker cp testdir container:/

加入到docker用户组

1
2
3
sudo groupadd docker     #添加docker用户组
sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
1
2
sudo usermod -aG docker $USER
newgrp docker

查看docker信息

  • 查看docker存储位置
1
sudo docker info | grep "Docker Root Dir"
  • 查看所有容器
1
docker ps -a
  • 查看images
1
docker images -a
  • 查看容器对应ip
1
docker inspect --format='{{.Name}} => {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
  • 查看使用量
1
docker system df

从image运行容器

  • 前台运行
1
docker run -it --name cptk rockylinux/rockylinux:9.5 /bin/bash
  • 后台运行
1
docker run -dit --name cptk rockylinux/rockylinux:9.5 /bin/bash
  • 前台运行加上代理
1
docker run -it --network host --name cptk rockylinux/rockylinux:9.5 /bin/bash
  • 后台运行加上代理
1
docker run -dit --network host --name cptk rockylinux/rockylinux:9.5 /bin/bash
  • 进入容器,退出会导致容器停止
1
docker attach cptk
  • 进入容器,退出不会导致容器停止
1
docker exec -it cptk /bin/bash

在当前目录下启动容器

1
docker run -dit --network host --name test_1 -v $PWD:/mnt --privileged=true rockylinux/rockylinux:9.5 /bin/bash
1
docker exec -it test_1 /bin/bash
1
docker commit test_1 test/mytest
1
docker history test/mytest

从文件启动容器相关

  • 从文件启动容器
1
docker compose --file ~/app/windows/compose.yaml up
1
docker-compose up
1
docker compose up
  • 从文件撤销所有更改
1
docker compose down --rmi=all --volumes
  • 从文件撤销所有更改,除了image
1
docker compose down --volumes

备份image

  • 从镜像保存镜像
1
docker save rockylinux/rockylinux:9.5 > myrocky.tar
1
docker save -o myrocky.tar rockylinux/rockylinux:9.5
  • 从镜像重载镜像
1
docker load < myrocky.tar
1
docker load -i myrocky.tar
  • 当history太多时
1
docker run -dit --network host --name vasp chem/vasp:6.5.1 /bin/bash
1
docker export vasp > vasp.tar
1
2
docker rm vasp -f
docker rmi chem/vasp:6.5.1
1
docker import --change='ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]' --change='CMD ["vasp", "--version"]' --change="WORKDIR /mnt" vasp.tar chem/vasp:6.5.1

清除none image

1
docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }')
1
docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }')
1
docker rmi $(docker images | grep "none" | awk '{print $3}') -f

更改docker存储位置

1
sudo docker info | grep "Docker Root Dir"
1
docker stop $(docker ps -aq)
1
sudo systemctl stop docker docker.socket
1
sudo mv /var/lib/docker /$HOME/app/docker -f
1
sudo ln -sf /$HOME/app/docker /var/lib/docker
1
sudo ls -alF /var/lib/
1
sudo unlink /var/lib/docker
1
sudo docker info | grep "Docker Root Dir"
1
sudo systemctl start docker docker.socket