构建镜像教程
步骤 1:安装 Docker
#在安装 Docker 之前,建议先更新系统软件包。
sudo yum update -y
# 移除旧的Docker版本和Podman、runc软件包及其相关依赖。
yum remove -y docker docker-client docker-client-latest docker-ce-cli docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine podman runc
#清理旧缓存并重新生成
yum clean all
yum makecache
# 安装必要的依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加Docker仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 指定版本安装Docker
yum install -y docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io
# 启动并设置Docker开机自启
sudo systemctl start docker
sudo systemctl enable docker
#使用以下命令验证 Docker 是否安装成功:
docker --version
# 安装 wget工具
yum install -y wget
# 关闭并禁用防火墙
systemctl stop firewalld
systemctl disable firewalld
# 禁用SELinux 策略
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
#查看Docker服务的状态
sudo systemctl status docker
#添加镜像加速器
# 创建目录
mkdir -p /etc/docker
# 复制内容
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://mirrors.tuna.tsinghua.edu.cn",
"http://mirrors.sohu.com",
"https://ustc-edu-cn.mirror.aliyuncs.com",
"https://2yzmpomi.mirror.aliyuncs.com",
"https://ccr.ccs.tencentyun.com",
"https://docker.m.daocloud.io",
"https://docker.awsl9527.cn",
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://docker.1panel.live/",
"https://noohub.ru",
"https://huecker.io",
"https://dockerhub.timeweb.cloud",
"http://hub.urlsa.us.kg",
"http://hub.haod.eu.org",
"http://hub.chxza.eu.org",
"http://ccoc.eu.org"
]
}
{
"dns": ["8.8.8.8", "8.8.4.4"]
}
EOF
# 重新加载配置
systemctl daemon-reload
# 重启Docker
systemctl restart docker
#通过运行hello-world 映像来验证是否正确安装了Docker Engine 。
sudo docker run hello-world
#显示 Docker 系统信息
docker info
步骤 2:编写 Dockerfile
#Dockerfile 是 Docker 镜像构建的核心文件,它包含了如何创建镜像的所有指令,一定要注意,该文件名必须是Dockerfile且无后缀。
#示例 Dockerfile,创建一个新的目录并进入:
mkdir mydockerapp
cd mydockerapp
#在该目录下创建 Dockerfile 文件:
vim Dockerfile
#然后你可以编辑 Dockerfile 内容。例如,下面的 Dockerfile 安装了一个简单的 Apache HTTP 服务器:
# 使用官方的 CentOS 镜像作为基础镜像
FROM centos:8# 更新软件包并安装 Apache HTTP 服务器
RUN yum -y update && yum install -y httpd# 将当前目录下的代码复制到容器的 /var/www/html 目录
COPY ./index.html /var/www/html/# 设置容器启动时运行 Apache 服务
CMD ["httpd", "-D", "FOREGROUND"]# 暴露容器的 80 端口
EXPOSE 80
#这个 Dockerfile 会:
#使用 CentOS 8 镜像作为基础镜像
#安装 Apache HTTP 服务器
#将当前目录下的 index.html 文件复制到容器中
#设置容器启动时运行 Apache HTTP 服务器
#暴露容器的 80 端口
步骤 3:构建 Docker 镜像
#在包含 Dockerfile 文件的目录下,使用以下命令构建 Docker 镜像:
docker build -t myapacheimage .
# -t myapacheimage 选项为你的镜像指定标签(即镜像的名字)。
# . 表示 Dockerfile 文件所在的当前目录。
#构建过程中,Docker 会逐步执行 Dockerfile 中的指令,并构建镜像。完成后,你可以使用以下命令查看镜像列表:
docker images
#你应该能够看到名为 myapacheimage 的新镜像。
步骤 4:运行 Docker 容器
#构建完成镜像后,你可以使用以下命令启动一个容器:
docker run -d -p 8080:80 myapacheimage
#-d 表示在后台运行容器。
#-p 8080:80 将主机的 8080 端口映射到容器的 80 端口。
#此时,你可以通过访问 http://localhost:8080 来查看 Apache 服务器是否成功启动并显示 index.html 页面。
步骤 5:管理 Docker 容器
#使用以下命令查看所有正在运行的容器:
docker ps
#要停止容器,可以使用以下命令:
docker stop <container_id>
#你可以通过 docker ps 命令获取容器的 ID。
#停止容器后,可以删除容器:
docker rm <container_id>
#如果你不再需要镜像,可以使用以下命令删除它:
docker rmi <image_id>
步骤 6:总结
在龙蜥操作系统 8.9 上构建 Docker 镜像的步骤主要包括:
1、安装 Docker。
2、编写 Dockerfile。
3、使用 docker build 命令构建镜像。
4、使用 docker run 命令运行容器。
5、使用 docker ps 和 docker stop 等命令管理容器。
Dockerfile
常见指令的总结表格:
指令 | 描述 | 示例 |
---|---|---|
FROM | 指定基础镜像 | FROM centos:8 |
LABEL | 为镜像添加元数据 | LABEL maintainer="example@example.com" |
RUN | 执行命令并在镜像中创建层 | RUN yum update -y && yum install -y httpd |
COPY | 将文件或目录从构建上下文复制到容器内 | COPY ./myapp /usr/src/app |
ADD | 类似 COPY ,但支持解压 tar 文件和从 URL 下载文件 | ADD myapp.tar.gz /usr/src/app |
WORKDIR | 设置工作目录 | WORKDIR /usr/src/app |
CMD | 设置容器启动时默认执行的命令或程序 | CMD ["httpd", "-D", "FOREGROUND"] |
ENTRYPOINT | 设置容器启动时执行的命令,常与 CMD 配合使用 | ENTRYPOINT ["python", "app.py"] |
EXPOSE | 声明容器将要监听的端口(仅用于文档化,不会自动暴露端口) | EXPOSE 8080 |
VOLUME | 创建挂载点以便共享或持久化数据 | VOLUME ["/data"] |
ENV | 设置环境变量 | ENV APP_ENV=production |
ARG | 定义构建时可用的变量 | ARG VERSION=1.0 |
USER | 设置容器内的用户 | USER appuser |
SHELL | 更改 RUN 指令所用的 shell | SHELL ["/bin/bash", "-c"] |
STOPSIGNAL | 设置容器停止时使用的信号 | STOPSIGNAL SIGTERM |
搭建私人镜像仓库
步骤 1:准备环境
确保已安装 Docker,如果尚未安装 Docker,请参考之前的教程安装 Docker。
确保你的服务器有公网 IP 或者是一个内网 IP 可访问的服务器
需要有一台能够访问的服务器来托管镜像仓库。如果是在公司内网搭建私有镜像仓库,确保相关的内网机器能够访问该仓库。
步骤 2:拉取并启动 Docker Registry 镜像
Docker 官方提供了一个 registry 镜像,帮助你快速搭建私有镜像仓库。我们可以通过以下命令拉取并启动它。
拉取官方 Registry 镜像
docker pull registry:2
运行 Docker Registry 容器
启动一个 Docker 容器来运行镜像仓库,通常会使用端口 5000 来暴露仓库服务:
docker run -d -p 5000:5000 --name registry registry:2
这条命令会:
在后台启动一个 Docker 容器(-d)。
将容器的 5000 端口映射到主机的 5000 端口,这样你就可以通过 http://<your_server_ip>:5000 来访问仓库。
使用 registry:2 镜像启动私有仓库。
验证仓库是否启动成功
你可以通过以下命令查看容器的状态:
docker ps
如果仓库容器运行正常,你应该看到类似如下输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 registry:2 "/bin/registry serve …" 5 seconds ago Up 4 seconds 0.0.0.0:5000->5000/tcp registry
步骤 3:配置客户端访问仓库
默认情况下,Docker 不允许使用 HTTP 访问私有仓库,因此我们需要配置 Docker 客户端以允许 HTTP 协议的访问。
编辑 Docker 配置文件
编辑 /etc/docker/daemon.json 配置文件,允许 Docker 客户端访问私有仓库。文件内容如下:
{
"insecure-registries": ["<your_server_ip>:5000"]
}
其中,<your_server_ip> 是你搭建私有仓库的服务器 IP 地址。
重启 Docker 服务
修改完成后,重启 Docker 服务,使配置生效:
sudo systemctl restart docker
步骤 4:将镜像推送到私人仓库
构建 Docker 镜像
例如,构建一个简单的镜像:
docker build -t <your_server_ip>:5000/myimage .
这里的 <your_server_ip> 是你搭建仓库的服务器 IP 地址,myimage 是你自定义的镜像名称。
登录到私有仓库
你可能需要登录到私有仓库。使用以下命令进行登录:
docker login <your_server_ip>:5000
默认情况下,这个仓库不需要认证。如果你需要启用认证,可以参考 Docker 官方文档来配置用户名和密码。
推送镜像到私有仓库
使用以下命令将镜像推送到私有仓库:
docker push <your_server_ip>:5000/myimage
如果一切正常,Docker 会将镜像上传到你的私有仓库。
步骤 5:从私人仓库拉取镜像
从私有仓库拉取镜像
当你需要从私人仓库拉取镜像时,只需使用 docker pull 命令:
docker pull <your_server_ip>:5000/myimage
这样,你就能从你自己搭建的 Docker 私有仓库中拉取镜像。
步骤 6:配置 TLS (可选)
如果你希望通过 HTTPS 而不是 HTTP 来访问你的私有仓库,这里提供一个简单的配置方法。
生成 SSL 证书
如果你没有现成的 SSL 证书,可以通过以下命令生成自签名证书(只用于测试):
mkdir -p /certs
openssl req -newkey rsa:4096 -nodes -keyout /certs/domain.key -x509 -out /certs/domain.crt
更新 Registry 配置
停止当前的 Registry 容器:
docker stop registry
启动一个新的 Registry 容器,挂载 SSL 证书:
docker run -d -p 5000:5000 --name registry \
-v /certs/domain.crt:/certs/domain.crt \
-v /certs/domain.key:/certs/domain.key \
-e REGISTRY_HTTP_SECRET=<secret> \
-e REGISTRY_HTTP_HEADERS_X_FORWARDED_PROTO=https \
registry:2
配置 Docker 客户端
确保你已经配置 Docker 客户端以支持 HTTPS(和证书),并按照之前的步骤更新了 /etc/docker/daemon.json 文件。
步骤 7:清理和管理镜像
查看私有仓库中的镜像
你可以查看仓库中的所有镜像。使用以下命令列出仓库中所有镜像:
curl http://<your_server_ip>:5000/v2/_catalog
删除镜像
如果你需要删除某个镜像,可以通过以下命令:
docker rmi <your_server_ip>:5000/myimage
你可能还需要在仓库中手动删除镜像数据,以释放存储空间。
总结
搭建 Docker 私有镜像仓库的步骤主要包括:
使用官方 registry 镜像启动私有仓库。
配置 Docker 客户端以访问私有仓库。
构建镜像并推送到私有仓库。
从私有仓库拉取镜像。
如果需要,还可以进一步配置 HTTPS 和认证。这样,你就可以在自己的服务器上管理 Docker 镜像,享受私有化的镜像仓库服务了。