wyp博客
首页
  • Github
首页
  • Github
  • 前言

    • 内容介绍

    • 使用指南

  • docker
    • 安装

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加速

image-20260117200440935

# 在这个文件中追加这两条信息   这个端口需要加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

image-20260117172503131

四、启动与验证

启动服务

# 重新加载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/
最近更新: 2026/1/27 18:34
Contributors: opsjjq