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: 持续更新中~~~