本文中使用的安装包、设置文件、脚本文件:docker-20.10.7-linux-x86_64.zip
下载
获取操作系统信息
- [root@localhost 桌面]# uname -m
- x86_64
复制代码 docker 下载地点:https://download.docker.com/linux/static/stable/
提示:根据上方 操作系统架构 进行下载,如 x86_64 则选择 x86_64 目录。
docker compose 下载地点:https://github.com/docker/compose/releases
提示:根据上方 操作系统架构 进行下载,如 x86_64 则选择 dokcer-compose-linux-x86_64。
整理安装文件
移动 docker、docker compose 安装包
提示:将 docker-20.10.7.tgz、dokcer-compose-linux-x86_64 放到一个目录,方便安装。本文存放目录:/root/下载/。
编写 docker 系统服务设置文件
- [root@localhost 下载]# touch docker.service
- [root@localhost 下载]# vi docker.service
- [Unit]
- Description=Docker Application Container Engine
- Documentation=https://docs.docker.com
- After=network-online.target firewalld.service
- Wants=network-online.target
- [Service]
- Type=notify
- # the default is not to use systemd for cgroups because the delegate issues still
- # exists and systemd currently does not support the cgroup feature set required
- # for containers run by docker
- ExecStart=/usr/bin/dockerd
- ExecReload=/bin/kill -s HUP $MAINPID
- # Having non-zero Limit*s causes performance problems due to accounting overhead
- # in the kernel. We recommend using cgroups to do container-local accounting.
- LimitNOFILE=infinity
- LimitNPROC=infinity
- LimitCORE=infinity
- # Uncomment TasksMax if your systemd version supports it.
- # Only systemd 226 and above support this version.
- #TasksMax=infinity
- TimeoutStartSec=0
- # set delegate yes so that systemd does not reset the cgroups of docker containers
- Delegate=yes
- # kill only the docker process, not all processes in the cgroup
- KillMode=process
- # restart the docker process if it exits prematurely
- Restart=on-failure
- StartLimitBurst=3
- StartLimitInterval=60s
- [Install]
- WantedBy=multi-user.target
复制代码 提示:ExecStart=/usr/bin/dockerd 是设置的执行文件,此中 /usr/bin/ 是安装目录。
编写安装脚本
- [root@localhost 下载]# touch docker_install.sh
- [root@localhost 下载]# vi docker_install.sh
- #!/bin/sh
- # 离线安装 docker、docker-compose
- echo '解压tar包...'
- tar -xvf docker-20.10.7.tgz
- echo '将 docker 目录移动 /usr/bin 目录下...'
- cp -p docker/* /usr/bin/
- rm -rf docker/
- echo '将 docker-compose 文件复制到 /usr/local/bin/ 目录下,并重命名为docker-compose'
- cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose
- echo '为 docker-compose 文件添加执行权限'
- chmod +x /usr/local/bin/docker-compose
- echo '将 docker.service 移到 /etc/systemd/system/ 目录...'
- cp docker.service /etc/systemd/system/
- echo '添加文件执行权限...'
- chmod +x /etc/systemd/system/docker.service
- echo '重新加载配置文件...'
- systemctl daemon-reload
- echo '启动docker...'
- systemctl start docker
- echo '设置开机自启...'
- systemctl enable docker.service
- echo 'docker 安装成功...'
- # 验证 docker 是否安装成功
- docker -v
- # 验证 docker compose 是否安装成功
- docker-compose -v
复制代码 编写卸载脚本
- [root@localhost 下载]# touch docker_uninstall.sh
- [root@localhost 下载]# vi docker_uninstall.sh
- #!/bin/sh
- # 卸载 docker 和 docker-compose
- echo '删除docker.service...'
- rm -f /etc/systemd/system/docker.service
- echo '删除docker文件...'
- rm -rf /usr/bin/docker*
- echo '删除docker-compose文件'
- rm -f /usr/local/bin/docker-compose
- echo '重新加载配置文件'
- systemctl daemon-reload
- echo '卸载成功...'
复制代码 安装
- [root@localhost 下载]# chmod +x docker.service docker_install.sh docker_uninstall.sh
- [root@localhost 下载]# ./docker_install.sh
复制代码 常见题目/方法
常用命令
查看镜像列表:docker images
删除指定镜像:docker image rm [REPOSITORY:TAG 或 IMAGE ID]
查看正在运行的镜像:docker ps
停止正在运行的镜像:docker stop [CONTAINER ID]
设置 docker 镜像源
提示:此方法可解决一些镜像拉取慢/超时/错误的题目。
- [root@localhost 下载]# vi /etc/docker/daemon.json
- {"registry-mirrors":["新的镜像地址"]}
- [root@localhost 下载]# systemctl daemon-reload
- [root@localhost 下载]# systemctl restart docker
复制代码 以下是网络网络的一些镜像地点,可解决大多数的镜像拉取需求:
- {
- "registry-mirrors": [ "https://docker.registry.cyou",
- "https://docker-cf.registry.cyou",
- "https://dockercf.jsdelivr.fyi",
- "https://docker.jsdelivr.fyi",
- "https://dockertest.jsdelivr.fyi",
- "https://mirror.aliyuncs.com",
- "https://dockerproxy.com",
- "https://mirror.baidubce.com",
- "https://docker.m.daocloud.io",
- "https://docker.nju.edu.cn",
- "https://docker.mirrors.sjtug.sjtu.edu.cn",
- "https://docker.mirrors.ustc.edu.cn",
- "https://mirror.iscas.ac.cn",
- "https://docker.rainbond.cc",
- "https://docker.hpcloud.cloud",
- "https://docker.m.daocloud.io",
- "https://docker.unsee.tech",
- "https://docker.1panel.live",
- "http://mirrors.ustc.edu.cn",
- "https://docker.chenby.cn",
- "http://mirror.azure.cn",
- "https://dockerpull.org",
- "https://dockerhub.icu",
- "https://hub.rat.dev"]
- }
复制代码 镜像导出、导入脚本工具(v0.0.1 - 初版)
提示:镜像导入、导出脚本工具可以将 docker 镜像完整的导出进行备份与还原,节省新情况摆设镜像的时间。
镜像导出脚本工具
- #!/bin/bash
- # 获取当前工作目录并设置为导出路径
- export_dir="$(pwd)/docker_imgs"
- # 创建导出根目录
- mkdir -p "$export_dir"
- # 获取所有镜像的仓库和标签
- image_names=$(docker images --format "{{.Repository}}:{{.Tag}}")
- # 检查是否有镜像
- if [ -z "$image_names" ]; then
- echo "没有找到Docker镜像,脚本终止。"
- exit 1
- fi
- # 循环导出每个镜像
- for image_name in $image_names; do
- # 提取仓库名和标签
- repository=$(echo "$image_name" | cut -d: -f1) # 获取仓库名
- tag=$(echo "$image_name" | cut -d: -f2) # 获取标签
- # 判断仓库名是否包含 '/'
- if [[ "$repository" == *"/"* ]]; then
- # 获取最后一个 '/' 之前的部分作为目录层级
- repo_dir=$(echo "$repository" | sed 's/\(.*\)\/.*/\1/')
- # 获取最后一个 '/' 之后的部分作为镜像名称
- image_name_only=$(echo "$repository" | sed 's/.*\///')
- # 将仓库名称中的 '/' 替换为目录分隔符
- repo_path="$export_dir/$repo_dir"
- # 创建目录结构
- mkdir -p "$repo_path"
- # 生成导出文件名,使用 -- 作为分隔符
- output_file="$repo_path/$image_name_only--$tag.tar"
- else
- # 如果仓库名没有 '/',则直接作为镜像名称
- repo_path="$export_dir"
- image_name_only="$repository"
-
- # 生成导出文件名,使用 -- 作为分隔符
- output_file="$repo_path/$image_name_only--$tag.tar"
- fi
- # 导出镜像
- echo "正在导出镜像: $image_name"
- if docker save -o "$output_file" "$image_name"; then
- echo "成功导出: $image_name 到 $output_file"
- else
- echo "导出失败: $image_name"
- fi
- done
- echo "所有镜像导出过程完成!"
复制代码 镜像导入脚本工具
- #!/bin/bash
- # 获取当前工作目录并设置为镜像 tar 文件的根目录
- import_dir="$(pwd)/docker_imgs"
- # 检查目录是否存在
- if [ ! -d "$import_dir" ]; then
- echo "导入目录 $import_dir 不存在!"
- exit 1
- fi
- # 递归查找目录中的所有 tar 文件并导入镜像
- find "$import_dir" -type f -name "*.tar" | while read tar_file; do
- # 获取相对路径并构建镜像名称
- rel_path=$(realpath --relative-to="$import_dir" "$tar_file")
-
- # 去掉 .tar 后缀,并将最后一个 -- 替换为 :
- image_name=$(echo "$rel_path" | sed 's/\.tar$//' | sed 's/\(.*\)--/\1:/')
- # 导入镜像
- echo "正在导入镜像: $image_name"
- if docker load -i "$tar_file"; then
- echo "成功导入镜像: $image_name"
- else
- echo "导入失败: $image_name"
- exit 1 # 如果导入失败,终止脚本执行
- fi
- done
- echo "所有镜像导入过程完成!"
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |