docker-1. 安装

352 阅读3分钟

安装

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce

镜像加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://sj7qyvur.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

允许远程客户端请求

Docker daemon是一个docker服务端组件,它是以Linux后台服务进程运行

Docker daemon程序运行在 Docker host 上,负责创建、运行、监控容器,构建、存储镜像

默认配置下,Docker daemon 只能响应来自本地 Host 的客户端请求。如果要允许远程客户端请求,需要在配置文件中打开 TCP 监听,步骤如下:

  1. 编辑配置文件 /etc/systemd/system/multi-user.target.wants/docker.service 在环境变量 ExecStart 后面添加 -H tcp://0.0.0.0,允许来自任意 IP 的客户端连接。

2. 重启 Docker daemon

sudo systemctl daemon-reload
sudo systemctl restart docker
  1. 通过以下命令即可实现与远程服务器通信
docker -H 服务器IP地址 info

优化

ulimit

ulimit含义

  • core dump

    在绝大多数GNU/Linux系统中,当应用程序发生没有捕获的异常信号ARORT/SEGV时,系统会终止当前进程,并生成core dump文件,它一般在程序执行的主目录下,通常命名为core或者core.PID。通常情况下core dump包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等。在实际的开发场景中,这些信息能够对开发人员调试定位问题提供非常大的帮助,所以在特定场合生成并留存core dump是一件必要而有意义的事情。

  • ulimit

    ulimit是GNU/Linux的一个命令行工具,用于显示或设置用户可以使用的资源限制。 对core文件大小限制的设置或查看, 使用ulimit -c查看对core文件大小的限制,例如:

# ulimit -c
unlimited

  unlimited表示没有限制,这意味着当应用程序异常时,系统能够输出任意大小的core dump文件,如果结果是非零数字,则表示系统只能输出限制大小的core dump文件,如果结果为零,则系统不会输出core dump文件。

  设置对core文件大小的限制,如:

ulimit -c unlimited  # 不限制
ulimit -c 1024      # 限制大小为1024
ulimit -c 0         # 限制大小为0,即不输出core文件
  • docker ulimit

    在docker容器中,ulimit的限制由dockerd进程控制,用户可以通过参数--default-ulimit进行配置,默认时,不会限制core文件生成大小,如果用户在dockerd进程启动时,对core文件生成大小进行了限制,用户依然可以在docker run的时候通过--ulimit参数进行修改,docker run中的--ulimit参数会优先生效。

  • kubernetes ulimit

    在kubernetes中,对容器的ulimit限制,只提供了cpu,memory,storage,alpha.kubernetes.io/nvidia-gpu的限制,core文件生成大小的限制依赖dockerd进程--default-ulimit参数对core文件生成大小的配置。

修改生效

  • 方法一

    修改docker的配置文件-/usr/lib/systemd/system/docker.service,

    ExecStart=/usr/bin/dockerd --default-ulimit nproc=65536:65536 --default-ulimit nofile=128000:128000 --default-ulimit stack=-1:-1

    systemctl daemon-reload
    systemctl restart docker

  • 方法二

    vim /etc/docker/daemon.json

{
  "insecure-registries": ["10.110.0.2:8000","idockerhub.cloud.com"],
  "graph":"/export/App/docker",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ],
  "live-restore": true,
  "default-ulimits": {
    "nofile": {
            "Name": "nofile",
            "Hard": 65535,
            "Soft": 65535
    },
    "nproc": {
            "Name": "nproc",
            "Hard": -1,
            "Soft": -1
    },
    "stack": {
            "Name": "stack",
            "Hard": -1,
            "Soft": -1
    }
  }
}
systemctl daemon-reload
systemctl restart docker