简介

  • docker常用技巧

docker 镜像存储位置

  • Docker 镜像存储位置取决于你在安装 Docker 时所选择的存储驱动程序。Docker 默认使用“overlay2”存储驱动程序,它会将镜像存储在 /var/lib/docker/overlay2 目录下。但是,如果你使用的是其他存储驱动程序,那么镜像存储位置可能会有所不同。
  • 你可以通过以下命令查看 Docker 镜像存储位置:
    1
    
    docker info | grep -i 'docker root dir'
    
  • 在输出结果中,你将看到存储路径的具体位置。例如:
    1
    
    Docker Root Dir: /var/lib/docker
    
  • 如果你想将 Docker 镜像存储到不同的位置,可以通过以下步骤进行设置:
  • 停止 Docker 服务:
    1
    
    sudo systemctl stop docker
    
  • 移动 /var/lib/docker 目录到新的位置,例如 /new/docker/path:
    1
    
    sudo mv /var/lib/docker /new/docker/path
    
  • 创建一个指向新目录的符号链接:
    1
    
    sudo ln -s /new/docker/path /var/lib/docker
    
  • 启动 Docker 服务:
    1
    
    sudo systemctl start docker
    
  • 现在,Docker 镜像将被存储在新的位置 /new/docker/path 中。请注意,这种更改可能会导致现有的 Docker 容器无法正常运行,因此请谨慎操作。

网络模式设置

在 Docker 中,-net=host 是一种网络模式选项,用于指定容器的网络命名空间。当你使用该选项时,容器将与宿主机共享网络命名空间,这意味着容器将使用宿主机的网络栈,与宿主机具有相同的网络接口和IP地址。

具体来说,使用-net=host选项,容器内的网络配置与宿主机完全一致,容器可以直接访问宿主机上的网络接口和端口。这样的配置有一些优势和限制:

优势:

  1. 简化网络配置:使用该选项,不需要再单独设置容器的网络配置,容器直接继承宿主机的网络配置。
  2. 容器与宿主机共享IP地址:可以让容器直接使用宿主机的IP地址,方便某些网络应用场景。

限制:

  1. 安全性:容器与宿主机共享网络命名空间,容器内的进程可以直接访问宿主机的网络,这可能会增加潜在的安全风险,因此需要格外小心。
  2. 端口冲突:由于容器与宿主机共享网络,如果宿主机上已经在使用的端口被容器尝试使用,可能会导致端口冲突。
  3. 主机网络的限制:由于容器使用宿主机网络栈,容器将受到宿主机网络设置和限制的影响。

在大多数情况下,推荐使用默认的网络模式,Docker会为容器分配独立的网络命名空间,从而保持隔离和安全性。只有在特定的使用场景下,才应该考虑使用-net=host选项。

请注意,Docker在不同版本中可能会有一些变化,因此建议查阅最新的Docker文档以获得最准确的信息。

保存镜像

  • 使用命令:tar cvf image.tar --exclude=/proc --exclude=/image.tar /, 在容器里打包系统所需要的文件,
    • 记录以下:tar cvf image.tar --exclude=/system --exclude=/sys --exclude=/proc --exclude=/image.tar /
  • sudo docker cp containerID:/image.tar ./ , 将容器中打包的文件拷贝到主机中
  • cat image.tar | sudo docker import - image:v1, 导入镜像

linux下重启,启动,关闭docker服务

  • sudo systemctl start docker : 启动
  • sudo systemctl daemon-reload: 守护进程重启
  • sudo systemctl restart docker or sudo service docker restart : 重启docker服务
  • sudo service docker stop or sudo systemctl stop docker : 关闭docker

以非root用户身份管理

  • Docker守护程序绑定到Unix套接字而不是TCP端口,默认情况下,Unix套接字的用户有root,其它用户只能使用sudo来访问。 Docker守护程序始终以root用户身份运行
  • 不想使用sudo,创建docker的Unix组,将用户添加到改组
    • sudo groupadd docker
    • sudo usermod -aG docker $USER
    • newgrp docker

镜像的上传和拉取

  • 登录docker
    • docker login
  • 修改镜像命名
    • 修改镜像的repository,使之与Docker Hub账号匹配
    • Docker Hub为了区分不同用户的同名镜像,镜像的registry中要包含用户名,完整的格式为:[username]/xxx:tag
    • Docker官方自己维护的镜像没有用户名
  • 镜像上传
    • 通过docker push将镜像上传到Docker Hub
  • 镜像的拉取
    • 上传的是公共镜像仓库,任何人都可以下载使用

根据这些md5目录名检查是哪个容器

  • docker inspect xxx | grep merge

查看容器日志

  • docker logs <container-id>,查看日志
  • 示例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
      user@computer:test-docker$ docker logs 172
      root@1722c360945f:/# ls
      bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  src  srv  sys  tmp  usr  var
      root@1722c360945f:/# cd src
      root@1722c360945f:/src# ks
      bash: ks: command not found
      root@1722c360945f:/src# ls
      one.txt
      root@1722c360945f:/src# ls
      one.txt  two.txt
      root@1722c360945f:/src# cat two.txt
      root@1722c360945f:/src# ls
      two.txt
      root@1722c360945f:/src# ls
      two.txt
      root@1722c360945f:/src# pwd
      /src
      user@computer:test-docker$ 
    

mount

  • docker run -it --mount type=bind,src="$(pwd)",target=/src ubuntu:18.04 bash