Docker 容器化系列

243 阅读2分钟

Docker 基础

安装

安装 Docker

==本小节使用 root 用户操作,环境为 centos 7。==

卸载老版本 Docker

如果之前装过 Docker,那么在安装新版本之前,需要先卸载老版本的 Docker 及其相关依赖。

$ yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

卸载 Docker 并不会自动删除之前存储的镜像、容器、数据卷和网络,这些文件默认被保存在/var/lib/docker ;如果有需要的话,可以手动进行删除:

$ rm -rf /var/lib/docker

添加 Docker 的 yum 源

安装 yum-utils 包,它提供了一个 yum-config-manager 工具,方便管理 yum 源。

$ yum install -y yum-utils

添加 Docker 官方 yum 源。

$ yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

安装 Docker 引擎

安装 Docker 引擎,容器和 Docker Compose:

$ yum list docker-ce --showduplicates | sort -r

# 安装指定版本 Docker
$ yum install -y docker-ce-23.0.1-1 docker-ce-cli-23.0.1-1 containerd.io docker-buildx-plugin docker-compose-plugin

# 安装最新版本 Docker
$ yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

[!info] 如果在安装过程中出现以下错误: https://download.docker.com/linux/centos/2.1903/x86_64/stable/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found 这是由于云服务商对系统发行版本编号进行了修改,导致 repo 的地址失效,yum 在安装软件时会检查所有的 repo 地址是否有效,如果存在失效的会给出报错提示!

解决办法: 以 centos7 为例,进入 /etc/yum.repos.d 目录并编辑对应 repo,将 $releasever 替换为 centos 版本号(这里是替换为 ‘7’),然后运行 yum clean all && yum makecache 即可。

配置 Docker

创建 Docker 配置目录和数据目录:

$ mkdir -p /etc/docker && mkdir -p /data/docker

创建 Docker 配置文件 daemon.json配置 Docker

$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "insecure-registries": ["0.0.0.0/0"],
  "registry-mirrors": [
    "https://dockerproxy.com",
    "https://hsmof0nn.mirror.aliyuncs.com",
    "https://mirror.ccs.tencentyun.com"
  ],
  "data-root": "/data/docker",
  "log-level": "info",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": ["overlay2.override_kernel_check=true"]
}
EOF
  • 配置解读:
    • registry-mirrors:配置国内镜像地址,加快下载速度。
    • data-root:配置 Docker 数据目录,用于存储镜像、容器、数据卷、网络等,默认是 /var/lib/docker
    • log-driver:配置日志驱动。
    • log-level:日志级别,默认为 info。
    • log-opts:日志相关的配置选项。
      • max-size:表示日志文件大小。
    • storage-driver:配置存储驱动。建议使用 overlay2
    • storage-opts:存储相关的配置选项。

[!info] 写入配置时注意换行符要是 LF

设置开机自启,然后启动 Docker:

# 设置 Docker 开机自启
$ systemctl enable docker
# 查看是否开机自启
$ systemctl is-enabled docker

# 加载配置
$ systemctl daemon-reload
# 启动 Docker 
$ systemctl start docker

# 查看 docker 服务状态
$ systemctl status docker
# 或
$ journalctl -xu docker

查看 Docker 信息:

$ dokcer info

配置 Docker 用户

上面我们是使用的 root 用户安装的 Docker,实际上我们要尽可能少的使用 root,因为它的权限太大了,权限越大风险越大。在企业中,通常只有在安装软件时系统管理员会给你开放 root 权限,其他时间只能使用普通用户。

为了避免每次使用 Docker 命令都需要切换至 root 用户,我们需要新建一个用户并把它加入到 docker 组(安装 Docker 时会自动创建):

# 创建名为 software 的组专门用来管理软件
$ groupadd software
# 创建名为 kevin 的用户并指定主组(登录组)为
$ useradd -g software kevin
# 将 kevin 加入 docker 组
$ usermod -aG docker kevin
# 设置密码
$ passwd kevin
# 查看用户的组
$ groups kevin

切换至 kevin 用户登录,然后执行 docker info 命令查看 Docker。

镜像

Docker 三大核心点:镜像、容器、仓库,其中镜像是最重要的,Docker 容器是基于镜像创建的,在运行容器前需要本地存在对应的镜像。接下来我们将介绍操作镜像的相关命令:

  • 从 Docker Hub 拉取、搜索镜像
  • 创建和查看镜像
  • 删除和清理镜像
  • 保存和载入镜像
  • 上传镜像至 Docker Hub

拉取和搜索镜像

使用 docker search 命令搜索 Docker Hub 中的镜像。基本用法如下:

# 搜索 alpine 镜像
$ docker search alpine

完整的语法格式为:docker search [options] keyword,参数选项如下:

  • -f,--filter filter:根据 filter 过滤输出内容,filter 的格式为 key=value,包括以下三种:
    • stars=number:stars 数大于指定数量的。
    • is-official=boolean:是否是官方镜像。
    • is-automated=boolean:是否是自动构建的镜像。
  • --format string:格式化输出结果。
  • --limit number: 限制输出结果条数,默认为 25 条。
  • --no-trunc:不截断输出结果,保留过长的内容。
# -f,--filter
$ docker search -f is-official=true alpine
$ docker search -f stars=100 alpine

# --format 
$ docker search --format "{{.Name}}: {{.StarCount}}: {{.Description}}: {{.IsOfficial}}: {{.IsAutomated}}" alpine
#### table 表示显示表头
$ docker search --format "table {{.Name}}\t{{.StarCount}}\t{{.Description}}\t{{.IsOfficial}}\t{{.IsAutomated}}" nginx

# --limit
$ docker search --limit 5 alpine 

# --no-trunc
$ docker search --no-trunc alpine

拉取镜像

使用 docker pull 命令拉取 Docker Hub 中的镜像。

语法格式为:docker [image] pull name[:tag],name 表示镜像仓库的名称(用来区分镜像),tag 表示镜像的标签(通常用来表示版本信息):

# 如果不指定 tag,默认拉取最新的(latest)
$ docker pull alpine

# 指定 tag 拉取 apline:3.17
$ docker pull alpine:3.17

默认是从官方的 Docker Hub (即 registry,注册服务器)拉取镜像,如果要从其他非官方仓库下载则需要在仓库名称前加上仓库地址:

# 从 dockerproxy 拉取镜像
$ docker pull dockerproxy.com/library/alpine:latest

# 查看已下载的镜像
$ docker images

[!info] 镜像文件是由若干层组成的,每一层会有一个唯一的 id,在下载镜像的时候你可以看到 docker 会输出每一层的信息,当不同的镜像包括相同的层时,docker 在本地仅存储一份内容,节约存储空间。

查看和修改镜像

:sparkles: 持续更新中~~~