docker实践(一)

一、win11安装虚拟机

bash 复制代码
1. 安装虚拟机软件
VMware Workstation Pro / Player (推荐,功能强)
去 VMware 官网下载,官网地址:https://www.vmware.com/go/getworkstation-win
安装完成后重启 Windows。
2. 创建 Linux 虚拟机
打开 VMware → 新建虚拟机。
选择 安装镜像文件(ISO),加载你下载的 Linux 发行版(Ubuntu/CentOS/Debian 等)。 Centos6 地址:地址:https://wiki.centos.org/Download

分配资源:
CPU:2核以上
内存:2GB 
磁盘:30GB 以上(动态分配即可)
网络设置推荐选择 桥接模式(Bridged) 或 NAT 模式(要能和宿主机互通)。
3. xshell连接
打开终端,ip addr 查看ip地址,xshell连接

参考文章:https://www.cnblogs.com/malinyan/p/17070921.html

二、docker安装

bash 复制代码
1、查看操作系统版本是否是 CentOS7 及以上
cat /etc/redhat-release
2、查看 CentOS7 的内核版本,Docker 要求 CentOS7 系统必须为 64 位,且系统内核版本为 3.10 及以上
uname -r
以下步骤请以root用户运行指令,如果不是以 root 用户运行,请在指令的最前面加上sudo,表示以系统管理者 (root) 的身份执行指令
3、卸载旧版本 (如果之前没有安装过旧版本的 docker 可以跳过)
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
4、安装 docker 所需的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
bash 复制代码
这个报错说明 CentOS 虚拟机里 yum 无法联网,所以取不到镜像源。常见原因和解决方法如下

1. 检查虚拟机网络
先确认虚拟机能否上网:
ping www.baidu.com
ping 8.8.8.8
如果 8.8.8.8 能 ping 通,但域名(百度)ping 不通 → DNS 问题。
如果 都 ping 不通 → 虚拟机没联网(VMware/VirtualBox 网络配置有问题)
这里我两个都能ping 通


#!/bin/bash
# 适用于 CentOS 7,替换 yum 源为阿里云镜像

echo ">>> 备份原有 repo 文件..."
mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ 2>/dev/null

echo ">>> 下载阿里云 CentOS7 repo..."
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

echo ">>> 清理缓存并生成缓存..."
yum clean all
yum makecache

echo ">>> 完成!可以试试安装软件,比如: yum install -y net-tools"

编写脚本,粘贴上面代码
vi fix_yum.sh
chmod +x fix_yum.sh
./fix_yum.sh


#!/bin/bash
# 适用于 CentOS7,安装 Docker + docker-compose v2.27.1

set -e

echo ">>> 卸载旧版本 Docker(如果有)..."
yum remove -y docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-engine || true

echo ">>> 安装依赖..."
yum install -y yum-utils device-mapper-persistent-data lvm2

echo ">>> 添加 Docker 官方 repo..."
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

echo ">>> 安装 Docker 引擎..."
yum install -y docker-ce docker-ce-cli containerd.io

echo ">>> 启动 Docker 并设置开机自启..."
systemctl start docker
systemctl enable docker

echo ">>> 下载并安装 docker-compose v2.27.1..."
curl -L "https://github.com/docker/compose/releases/download/v2.27.1/docker-compose-$(uname -s)-$(uname -m)" \
    -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

echo ">>> 验证版本..."
docker --version
docker-compose version

echo ">>> 安装完成!🚀"

编写脚本,执行如上命令,此时安装Docker 最新版(docker-ce)
bash 复制代码
报错 Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)


说明 Docker 可以运行,但访问 Docker Hub(registry-1.docker.io)超时。常见原因有:
虚拟机能上网,但访问国外网站慢/被墙
Docker Hub 在国外,国内直连经常超时。
DNS 解析慢/失败
虚拟机里 DNS 没配好,导致 registry-1.docker.io 解析不了。
代理没配置
如果宿主机走代理(VPN),但 Docker 没配,就连不上
bash 复制代码
解决方案(换国内镜像数据源)
#!/bin/bash
# 一键配置 Docker 国内镜像源(适用于 CentOS7)

set -e

echo ">>> 创建 /etc/docker 目录..."
mkdir -p /etc/docker

echo ">>> 写入国内镜像源配置..."
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://mirror.ccs.tencentyun.com",
    "https://registry.docker-cn.com",
    "https://hub-mirror.c.163.com"
  ]
}
EOF

echo ">>> 重新加载并重启 Docker..."
systemctl daemon-reexec
systemctl restart docker

echo ">>> 配置完成!现在可以尝试: docker pull hello-world"

查看 docker 是否安装成功

三、常用的docker命令

bash 复制代码
//启动docker
systemctl start docker
//停止docker
systemctl stop docker
//重启docker
systemctl restart docker
//设置docker开机自启
systemctl enable docker
//启动容器
docker start 容器ID/容器名称
//重启容器
docker restart 容器ID/容器名称
//停止容器
docker stop 容器ID/容器名称
//强制停止容器
docker kill 容器ID/容器名称


// 查看docker 版本信息
docker version
//查看镜像
docker images
//查看所有镜像(包含中间镜像层)
docker images -a
// 查找镜像
docker search 镜像名称
// 获取镜像元信息
docker inspect 镜像ID/镜像名称[:版本号]
docker inspect 容器ID/容器名称


// 拉取镜像
docker pull 镜像名称[:版本号]


//删除单个镜像
docker rmi 镜像ID/镜像名称[:版本号]
//-f:表示强制删除,强制删除单个镜像
docker rmi -f 镜像ID/镜像名称[:版本号]
//删除多个镜像
docker rmi [-f] 镜像1ID/镜像1名称[:版本号] 镜像2ID/镜像2名称[:版本号]
//删除已停止的容器
docker rm 容器ID/容器名称
//-f:表示强制删除,删除正在运行的容器
docker rm -f 容器ID/容器名称
//删除全部的容器
docker rm -f $(docker ps -qa)




//以交互模式运行容器
docker run -it -v 宿主机目录/文件的绝对路径:容器内目录/文件的绝对路径[:rw/ro] -p 主机端口:容器端口 --name=容器名称 镜像ID/镜像名称[:版本号]
//以后台方式运行容器 (推荐)
docker run -d -v 宿主机目录/文件的绝对路径:容器内目录/文件的绝对路径[:rw/ro] -p 主机端口:容器端口 --name=容器名称 镜像ID/镜像名称[:版本号]
//以exec方式进入到容器
docker exec -it 容器ID/容器名称 /bin/bash 或 /bin/sh
//以attach方式进入到容器
docker attach 容器ID/容器名称
//如果不想进入容器,直接获取相关指令的运行结果,可在后面填写相关操作指令
docker exec -it 容器ID/容器名称 相关命令
//退出并停止容器
exit
//退出但容器不停止
ctrl + p + q



//查看当前运行的容器
docker ps
//查看所有容器 (运行和停止的)
docker ps -a
//查看容器日志并显示时间戳
docker logs -t 容器ID/容器名称
//持续输出容器日志
docker logs -f 容器ID/容器名称
//查看最后n条容器日志
docker logs --tail n 容器ID/容器名称
// 查看容器日志
docker logs -f -t 容器ID/容器名称

docker 镜像的备份、恢复与迁移

bash 复制代码
1、docker 镜像的备份 (导出)
docker save -o 镜像导出文件(格式为tar压缩文件) 镜像ID或镜像名称[:版本号]
或
docker save 镜像ID或镜像名称[:版本号] > 镜像导出文件(格式为tar压缩文件)
示例:
docker save -o $(pwd)/mytomcat.tar newtomcat:v1.0
或
docker save newtomcat:v1.0 > $(pwd)/mytomcat.tar 



2、docker 镜像的迁移与恢复 (导入)
docker load -i 镜像导出文件(格式为tar压缩文件)
或
docker load < 镜像导出文件(格式为tar压缩文件)
示例:
docker load -i $(pwd)/mytomcat.tar
或
docker load < $(pwd)/mytomcat.tar
相关推荐
AI云原生3 小时前
如何使用Docker快速运行Firefox并实现远程访问本地火狐浏览器的教程
运维·docker·云原生·容器·serverless·firefox·kubeless
今生相伴9913 小时前
ELFK:企业级日志管理的完整解决方案——从入门到精通
运维·elk·elasticsearch
小猪咪piggy5 小时前
【JavaEE】(24) Linux 基础使用和程序部署
linux·运维·服务器
IT 小阿姨(数据库)5 小时前
PgSQL中pg_stat_user_tables 和 pg_stat_user_objects参数详解
linux·运维·数据库·sql·postgresql·oracle
❀͜͡傀儡师5 小时前
Docker部署搜索引擎SearXNG
运维·docker·容器·searxng
泡沫冰@5 小时前
K8S集群管理(3)
云原生·容器·kubernetes
虎头金猫5 小时前
如何在Linux上使用Docker在本地部署开源PDF工具Stirling PDF:StirlingPDF+cpolar让专业操作像在线文档一样简单
linux·运维·ubuntu·docker·pdf·开源·centos
麦兜*6 小时前
MongoDB 常见错误解决方案:从连接失败到主从同步问题
java·数据库·spring boot·redis·mongodb·容器
荣光波比6 小时前
Nginx 实战系列(七)—— Nginx一键安装脚本详解
运维·nginx·自动化·云计算