docker安装部署
一、安装前准备
配置内核参数(必需)
# 创建配置文件
cat >/etc/sysctl.d/docker.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 加载内核模块
modprobe br_netfilter
# 应用配置
sysctl -p /etc/sysctl.d/docker.conf
作用说明:
ip_forward=1:允许流量转发(Docker网络必需)bridge-nf-call-*:让iptables规则作用于网桥流量
二、Docker 安装流程(两种源可选)
方案一:使用清华源(推荐国内)
# 1. 卸载旧版本
yum remove docker docker-common docker-selinux docker-engine -y
# 2. 安装依赖
yum install yum-utils device-mapper-persistent-data lvm2 -y
# 3. 下载官方repo文件
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
# 4. 替换为清华源
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
# 5. 安装
yum makecache fast
yum install docker-ce -y
方案二:使用阿里源
# 1. 配置阿里云yum源
curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 2. 下载docker-ce repo
curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3. 清理缓存并安装
yum clean all && yum makecache
yum install docker-ce -y
查看可用版本
# 查看所有可用版本
yum list docker-ce --showduplicates | sort -r
三、配置镜像加速器(必需国内环境)
配置镜像加速
容器镜像服务获取自己的阿里云镜像加速器
# 创建配置目录
mkdir -p /etc/docker
# 配置加速地址
cat > /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://docker.m.ixdev.cn",
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
EOF
systemctl daemon-reload
systemctl restart docker
https://blog.csdn.net/csdn122345/article/details/145686969
https://cloud.tencent.com/developer/article/2485043
批量测试镜像站
cat >/opt/qwe.sh << 'EOF'
#!/bin/bash
MIRRORS=(
"https://docker.registry.cyou"
"https://docker-cf.registry.cyou"
"https://mirror.aliyuncs.com"
"https://mirror.baidubce.com"
"https://docker.m.daocloud.io"
"https://docker.nju.edu.cn"
"https://fpu73b7s.mirror.aliyuncs.com"
"https://docker.mirrors.sjtug.sjtu.edu.cn"
"https://docker.mirrors.ustc.edu.cn"
"https://mirror.iscas.ac.cn"
"https://docker.rainbond.cc"
)
echo "正在测试Docker镜像站连通性..."
echo "======================================"
for url in "${MIRRORS[@]}"; do
domain=$(echo $url | sed 's|https://||')
echo -n "测试 $domain ... "
# 测试DNS解析
if nslookup "$domain" &>/dev/null; then
echo -n "DNS✓ "
else
echo "DNS✗"
continue
fi
# 测试HTTPS连接
if curl --max-time 10 --silent --head "$url" &>/dev/null; then
echo "HTTPS✓"
else
echo "HTTPS✗"
fi
done
echo "======================================"
echo "测试完成!"
EOF
chmod +x /opt/qwe.sh
bash /opt/qwe.sh
代理vpn加速

# 在这个文件中追加这两条信息 这个端口需要加1
vim /etc/environment
http_proxy="http://10.0.0.1:7898"
https_proxy="http://10.0.0.1:7898"
# 使其生效
source /etc/environment
# 检查代理设置
echo $http_proxy
echo $https_proxy
echo $no_proxy
# 临时取消代理
unset http_proxy https_proxy no_proxy

四、启动与验证
启动服务
# 重新加载systemd配置
systemctl daemon-reload
systemctl restart docker
systemctl start docker
# 设置开机自启
systemctl enable docker
验证安装
# 1. 查看docker信息
docker info
# 2. 查看版本
docker version
# 3. 验证镜像加速
docker info | grep -A 10 "Registry Mirrors"
# 4. 运行测试容器
time docker pull hello-world
docker run hello-world
查看相关进程
# Docker客户端位置
which docker
# Docker守护进程
ps aux | grep docker
# containerd运行时
ps aux | grep containerd
systemctl status containerd
五、镜像命令
1.拉取
docker pull centos:latest
docker pull centos:7.9.2009
docker pull alpine
docker pull busybox:1.29
2.镜像列表
docker images
# 镜像重命名
docker tag image1:tag name:tagname
docker tag centos:7.9.2009 centos:7
3.容器运行run == create & start
docker run = docker create + docker start
生成(创建并启动)一个新的容器。
docker run --rm alpine /bin/echo "Hello docker谢谢"
docker run --rm centos bash -c "ls /opt/"
docker run centos bash "/opt/qwe.sh"
docker stop "CONTAINER ID"或者name
docker start "CONTAINER ID"或者name
4.进入容器空间
docker run -it --name name1 -p 99:80 centos:7.9.2009 bash
docker stop name1
docker start name1
docker exec -it name1 bash
5.容器列表
# 查看运行中的容器列表
docker ps
# 包括未运行
docker ps -a
6.删除容器、镜像
docker stop "CONTAINER ID"或者name
docker rm "CONTAINER ID"或者name
# rmi需要先删除相关容器进程(无论是否存活 都要删除)
docker ps -a
docker rmi hello-world
docker rmi centos:latest
7.镜像发行版&内核
# 容器发行版
docker exec "CONTAINER ID" bash -c "cat /etc/os-release"
docker exec "eb2" bash -c "cat /etc/os-release"
# 容器内核,和宿主机内核一样
docker exec "eb2" bash -c "cat /proc/version"
docker exec "eb2" bash -c "uname -a"
docker exec "eb2" bash -c "uname -r"
容器没有自己的内核 ----- 完全正确,它共享宿主机内核
/etc/os-release 显示的是用户空间的发行版,不是内核
容器可以运行不同的Linux发行版,只要它们兼容宿主机内核
内核版本必须兼容:如果容器内的应用需要特定内核特性,宿主机内核必须支持
8.参数-运行模式
-i, --interactive
# 保持 STDIN 打开,即使没有附加 # 允许从终端输入
docker run -i ubuntu cat /etc/os-release
-t, --tty
# 分配一个伪终端(TTY)
docker run -t ubuntu bash
# 通常与 -i 一起使用:-it
-d, --detach
# 后台运行容器
docker run -d --name webserver nginx
# 返回容器ID,不进入容器
-a, --attach
# 附加到标准输入、输出或错误流
docker run -a stdin -a stdout -a stderr ubuntu echo "hello"
# 后台运行,但希望看到错误输出
docker run -d -a stderr --name myapp nginx
--name指定容器名称
--rm 容器退出时自动删除
9.后台运行容器
docker run 创建+启动
容器内的进程必须处于前台运行状态,否则容器就会直接退出 ======= 容器id还在 只是状态是exit
docker images -q参数只看id
# 后台运行容器
docker run -d -p 100:80 nginx:1.17.9
# 交互式的运行,可以进入容器空间
docker run -it --name name1 -p 101:80 centos:7.9.2009 bash
# exit退出后
docker start name1
docker exec -it name1 bash
#或者二合一
docker start -ai name1
# 创建时(或者run)决定是否有 TTY
docker create -t --name test1 ubuntu bash # 有 TTY
docker create --name test2 ubuntu bash # 无 TTY
# 启动时无法改变这个配置
docker start -ai test1 # 有 TTY 效果
docker start -ai test2 # 无 TTY 效果(即使加了 -a -i)
10.inspect容器IP
inspect查看容器、镜像、网络、卷等所有 Docker 对象的底层配置和元数据。
# 获取容器 IP 地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' my-container
# 获取容器状态
docker inspect --format='{{.State.Status}}' my-container
# 获取容器使用的镜像
docker inspect --format='{{.Config.Image}}' my-container
# 获取端口映射
docker inspect --format='{{.NetworkSettings.Ports}}' my-container
###########
# 端口映射
docker port id/name
# 容器内进程
docker top id/name
11.重命名容器rename
docker rename name2 name3
docker ps # up存活的
12.进入容器空间
# docker run -d --name name2 image1 bash
# exec 为每个新进程独立分配 TTY
docker exec -it name2 bash
13.容器日志
容器内日志
docker logs id/name
14.容器资源监控
docker stats name2
15.commit镜像记录
提交镜像记录,它基于现有的容器创建新的镜像。将 容器的当前状态 保存为一个 新的镜像。
docker commit name1 my-image:v1
16.导出、导入镜像save load
docker images
docker save image1 > /opt/image1.tar
docker save image1 | gzip > /opt/image1.tgz
gzip -d /opt/image1.tgz
docker load < /opt/image1.tar
六、实践操作
自建docker镜像
centos:7.9.2009最小化系统 基础镜像
1.bash命令行交互式启动nginx
docker run -it --name os1 -p 101:80 centos:7.9.2009 bash
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum install net-tools nginx vim -y
yum clean all
nginx
编辑nginx.conf或者conf.d/80.conf
nginx -s reload
curl 10.0.0.200:101
docker ps -a |grep name1|awk '{print $1}'
docker commit 46a61fba350b os1-nginx
2.直接启动nginx
docker run -d -p 102:80 os1-nginx nginx -g "daemon off;"
提取容器内日志
docker inspect id/name |grep -i logPath
"LogPath": "/var/lib/docker/containers/eb24eb3a27866ef16c5bcc0264f3be16cdb3d514b4ccb6d9dc59e8acaaaee597/eb24eb3a27866ef16c5bcc0264f3be16cdb3d514b4ccb6d9dc59e8acaaaee597-json.log"
cat /var/lib/docker/containers/eb24eb3a27866ef16c5bcc0264f3be16cdb3d514b4ccb6d9dc59e8acaaaee597/eb24eb3a27866ef16c5bcc0264f3be16cdb3d514b4ccb6d9dc59e8acaaaee597-json.log
docker logs id/name > /tmp/qwe_all.log 2>&1
数据卷挂载映射
1. 命名卷(Named Volume) - 最常用
# Docker 管理,存储在 /var/lib/docker/volumes/
docker volume create mydata # 创建命名卷
docker run -v mydata:/app/data nginx # 使用命名卷
2. 绑定挂载(Bind Mount) - 直接挂载主机目录
# 直接使用主机目录
docker run -v /host/path:/app/data nginx
# 或
docker run --mount type=bind,source=/host/path,target=/app/data nginx
3. 匿名卷(Anonymous Volume) - 自动创建,不好管理
# Docker 自动创建,随机名称
docker run -v /app/data nginx
# 卷名类似:f7b4b5c6d7e8...
# 创建和管理卷
docker volume create [卷名] # 创建卷
docker volume ls # 列出所有卷
docker volume inspect [卷名] # 查看卷详情
docker volume rm [卷名] # 删除卷
docker volume prune # 删除所有未使用的卷
# 使用卷运行容器
docker run -v [卷名]:[容器路径] [镜像] # 挂载卷
docker run -d -v /etc/nginx/conf.d/:/etc/nginx/conf.d/ -v /html/:/html/ -v /html/logs/:/var/log/nginx/ -p 81:81 -p 80:80 --name nginx2 nginx
docker cp
# 容器和宿主机之间复制文件的命令。 路径1 --> 路径2
# 容器名或ID:路径
docker cp name:/opt/dir1 /opt/
docker cp /opt/dir2 name:/opt/