引言:(可以跳过)
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。
Docker CE 分为 stable
test
和 nightly
三个更新频道。
官方网站上有各种环境下的 安装指南,这里主要介绍 Docker CE 在 CentOS上的安装。
Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。
一、安装Docker最新版
如果之前安装过旧版本的Docker,可以使用下面命令卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
1、配置Docker的yum库
yum install -y yum-utils
安装成功后,执行命令,配置Docker的yum源:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
注意:上述的执行结果要类似上图所示, repo saved to .... 如果有Could not 类似的字眼说明保存失败;请重新执行直到成功。
如果失败(上面2行代码):运行这行代码:(这种12345的错误)
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.old
vi /etc/yum.repos.d/CentOS-Base.repo
复制以下内容到新建CentOS-Base.repo配置中
按i进入修改模式,按Esc加:(冒号)加wq(小写),保存并退出。
[base]
name=CentOS-$releasever - Base
baseurl=http://vault.centos.org/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[updates]
name=CentOS-$releasever - Updates
baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[extras]
name=CentOS-$releasever - Extras
baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
sudo yum clean all
sudo yum makecache
再尝试yum安装即可成功
2、安装Docker
最后,执行命令,安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
注意:如果出现 网络不可达 的情况;请更换网络重新执行命令。
3、启动和校验
Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙!
启动docker前,一定要关闭防火墙后!!
启动docker前,一定要关闭防火墙后!!
启动docker前,一定要关闭防火墙后!!
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
4、配置镜像加速
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
EOF
如果最后测试拉取镜像不行(使用此方法)(先跳过不看)(拉取镜像成功,跳过此步)
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"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://dockerpull.com",
"https://docker.rainbond.cc",
"https://dockerpull.com",
"https://docker.udayun.com",
"https://docker.211678.top"
]
}EOF
测试:
docker pull nginx
一、Docker 安装与初始化
1. 系统环境准备
bash
# 更新系统
yum update -y
# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加 Docker CE 阿里云源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装最新 Docker CE
yum install -y docker-ce
# 启动并设置开机自启
systemctl start docker && systemctl enable docker
2. 验证安装
bash
docker version
# 测试运行 Hello World
docker run hello-world
二、镜像拉取与加速优化
1. 拉取镜像(示例:Nginx)
bash
# 拉取最新版本
docker pull nginx:latest
# 查看本地镜像
docker images
2. 配置国内镜像加速器(可选)
bash
# 创建 Docker 配置文件
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://hub-mirror.c.163.com"]
}
EOF
# 重启 Docker 生效
systemctl restart docker
三、自建 Docker 私有镜像仓库
1. 启动本地仓库容器
bash
# 创建存储目录
mkdir -p /mnt/registry
# 运行私有仓库(HTTP 模式,生产环境建议 HTTPS)
docker run -d \
--restart always \
--name registry \
-p 5000:5000 \
-v /mnt/registry:/var/lib/registry \
registry:2
2. 配置 Docker 信任本地仓库
bash
# 编辑 Docker 配置
cat > /etc/docker/daemon.json <<EOF
{
"insecure-registries": ["localhost:5000"]
}
EOF
# 重启 Docker
systemctl restart docker
3. 构建并推送自定义镜像
(1)创建测试镜像
bash
# 新建测试目录
mkdir myapp && cd myapp
# 创建 Dockerfile
cat > Dockerfile <<EOF
FROM nginx:latest
RUN echo "Hello Private Registry" > /usr/share/nginx/html/index.html
EOF
# 构建镜像
docker build -t localhost:5000/myapp:v1 .
(2)推送至私有仓库
bash
docker push localhost:5000/myapp:v1
(3)验证镜像仓库
bash
# 访问仓库列表(浏览器)
http://localhost:5000/v2/_catalog
# 拉取并运行测试
docker run -d -p 8080:80 localhost:5000/myapp:v1
四、镜像持续更新策略
1. 手动更新流程
bash
# 拉取最新基础镜像
docker pull nginx:latest
# 重新构建镜像
cd myapp && docker build -t localhost:5000/myapp:v2 .
# 推送新版本
docker push localhost:5000/myapp:v2
# 更新容器(示例)
docker stop myapp_container && docker rm myapp_container
docker run -d -p 8080:80 --name myapp_container localhost:5000/myapp:v2
2. 自动化更新方案
(1)GitHub Actions 自动构建
yaml
# .github/workflows/docker.yml
name: Docker Build and Push
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Registry
uses: docker/login-action@v3
with:
registry: localhost:5000
username: ${{ secrets.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: localhost:5000/myapp:${{ github.sha }}
(2)Watchtower 自动更新
bash
# 安装 Watchtower
docker run -d \
--name watchtower \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
五、生产环境优化建议
1. 安全加固
bash
# 生成自签名证书(HTTPS 模式)
mkdir -p /etc/docker/certs.d/localhost:5000
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/docker/certs.d/localhost:5000/key.pem \
-out /etc/docker/certs.d/localhost:5000/cert.pem \
-subj "/CN=localhost"
# 重启仓库容器(HTTPS 模式)
docker run -d \
--restart always \
--name registry \
-p 5000:5000 \
-v /mnt/registry:/var/lib/registry \
-v /etc/docker/certs.d/localhost:5000:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/cert.pem \
-e REGISTRY_HTTP_TLS_KEY=/certs/key.pem \
registry:2
2. 镜像分层与瘦身
dockerfile
# 多阶段构建示例
FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp .
CMD ["./myapp"]
3. 数据持久化
bash
# 使用卷挂载存储
docker run -d \
--restart always \
--name registry \
-p 5000:5000 \
-v registry-data:/var/lib/registry \
registry:2
六、常见问题解决方案
1. 镜像推送失败
bash
# 检查 Docker 配置是否包含 insecure-registries
cat /etc/docker/daemon.json
# 重启 Docker 服务
systemctl restart docker
2. 仓库证书错误
bash
# 删除旧证书并重新生成(HTTPS 模式)
rm -rf /etc/docker/certs.d/localhost:5000
# 重新生成证书并重启仓库
3. 镜像更新不生效
bash
# 强制拉取最新镜像
docker pull --force localhost:5000/myapp:v2
七、总结与扩展
通过以上步骤,你已完成:
- Docker 安装与基础配置
- 私有镜像仓库搭建
- 镜像构建与推送流程
- 自动化更新策略
扩展实践:
- 结合 Kubernetes 实现容器编排
- 使用 Harbor 增强镜像仓库功能(支持权限管理、扫描等)
- 集成 SonarQube 实现镜像安全扫描