Skip to content

搭建 Docker 环境

概述

  记录一下在 CentOS7 环境下的 Docker 搭建过程。注意,在开始搭建 Docker 环境前,可以参考另一篇笔记[链接]来完成 CentOS7 的初始化、更新工作。

搭建步骤

配置基础环境

bash
# 由于 firewalld 防火墙与 docker 服务有冲突,因此卸载 firewalld
# 可以使用 iptables 来代替 firewalld
$ systemctl stop firewalld && systemctl disable firewalld && yum -y remove firewalld

# 安装 iptables
$ yum install -y iptables iptables-services

# 启用 iptables
$ systemctl start iptables && systemctl enable iptables

# 清空 iptables 配置
$ iptables -F && service iptables save

# 重启 iptables
$ systemctl restart iptables

# 永久禁用 SELinux
$ setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

# 禁用交换分区,并写入挂载表
$ swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab

# 重启生效
$ reboot

安装 Docker

bash
# 添加 Docker 源
$ yum install -y yum-utils
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 Docker
$ yum install -y docker-ce

# 启动 Docker 服务,并添加开机自启
$ systemctl start docker && systemctl enable docker

# 安装 Docker Compose
$ curl -L "https://github.com/docker/compose/releases/download/2.16.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 为 docker-compose 添加可执行权限
$ chmod +x /usr/local/bin/docker-compose

# 输出 docker 版本号
$ docker --version
Docker version 23.0.1, build cb74dfc

# 输出 docker-compose 版本号
$ docker-compose --version
Docker Compose version v2.16.0

使用技巧

导出/导入 Docker 镜像

  在一些生产环境,服务器是无法访问外部 Docker Registry 服务的,因此需要在本地将相关镜像下载下来,然后导出到生产环境去使用。在这种场影下,可以通过以下方法完成镜像的导出与导入。

bash
# 将 Dokcer 镜像保存为 tar 文件
# 注意,这里要用镜像名称来导出,不要用镜像的 hash 来导出
$ docker save sonatype/nexus3:3.47.1 -o nexus3-3.47.1.tar

# 将导出来的镜像文件复制到指定的服务器,用以下命令即可导入镜像
$ docker load -i nexus3-3.47.1.tar

# 查看是否导入成功
$ docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
sonatype/nexus3   3.47.1    d2fd210c6f4c   3 months ago   545MB

访问 Dokcer 私库

  我们搭建 Docker Registry 私库之后,如果你没有办法为其配置 HTTPS 访问,那么就需要配置 Docker,使其允许以不安全的方式(以 http 的方式)访问 Registry 私库。

bash
# 查看当前 Docker 信息
$ docker info
...
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

# 创建 Docker 配置文件,添加 insecure-registries 选项
# 注意,如果 insecure-registries 只添加域名,在正常情况下是能正常使用私库的
# 但是发现有时在编译镜像时,Docker 还是以 https 去访问私库
# 此时可以在 insecure-registries 再加上 http://<domain> 选项即可
$ vi /etc/docker/daemon.json

{
    "insecure-registries": [
        "mirror.cluster.k8s",
        "http://mirror.cluster.k8s"
    ]
}

# 重启 Docker 服务
$ systemctl daemon-reload
$ systemctl restart docker

# 再次查看 Docker 信息,发现 Insecure Registries 已经添加上去了
$ docker info
...
 Insecure Registries:
  registry.cluster.k8s
  mirror.cluster.k8s
  127.0.0.0/8
 Live Restore Enabled: false

添加 Docker 镜像加速服务

  在没有网络的环境,或者我们需要做镜像加速时,可以通过修改 Docker 的配置文件,使其优先从镜像加速服务中拉取镜像。

bash
# 查看当前 Docker 信息
$ docker info
...
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

# 创建 Docker 配置文件,添加 registry-mirrors 选项
# 如果你的镜像加速服务是以 http 协议提供的,那么还需要添加 insecure-registries 选项
$ vi /etc/docker/daemon.json

{
    "insecure-registries": [
        "mirror.cluster.k8s"
    ],
    "registry-mirrors": [
        "http://mirror.cluster.k8s"
    ]
}

# 重启 Docker 服务
$ systemctl daemon-reload
$ systemctl restart docker

# 再次查看 Docker 信息,发现 Registry Mirrors 已经添加上去了
$ docker info
...
 Insecure Registries:
  mirror.cluster.k8s
  127.0.0.0/8
 Registry Mirrors:
  http://mirror.cluster.k8s/
 Live Restore Enabled: false

优化日志存储

  Docker 默认将容器运行时产生的日志保存在 /var/lib/docker/<container>/<container>-json.log 文件,并且默认不滚动。也就是说,在容器未销毁前,这个容器产生的日志会一直保存在这个文件下。长期运行时,这个日志文件就会越滚越大,最终将磁盘占满。

  为了解决这个问题,可以修改 Docker 的配置文件来优化日志的存储方式。

bash
# 修改配置文件,添加日志选项
# 单个文件最大 10m,保留最近 10 个文件
# 这样就可以限制单个容器的日志最多占用磁盘 100m 空间了
$ vi /etc/docker/daemon.json

{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "10m",
        "max-file": "10"
    }
}

# 重启 Docker 以生效
$ systemctl restart docker

  查看以下文档,获取更多关于日志的配置选项:

提示

  虽然通过 systemctl restart docker 使配置生效了,但是新配置对已创建的容器是不生效的,因此需要重新创建这些容器。


Released under the MIT license.