Docker 构建镜像并搭建私家镜像仓库教程

打印 上一主题 下一主题

主题 857|帖子 857|积分 2571

构建镜像教程

步骤 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 服务器:
  1. # 使用官方的 CentOS 镜像作为基础镜像
  2. FROM centos:8
  3. # 更新软件包并安装 Apache HTTP 服务器
  4. RUN yum -y update && yum install -y httpd
  5. # 将当前目录下的代码复制到容器的 /var/www/html 目录
  6. COPY ./index.html /var/www/html/
  7. # 设置容器启动时运行 Apache 服务
  8. CMD ["httpd", "-D", "FOREGROUND"]
  9. # 暴露容器的 80 端口
  10. 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:8LABEL为镜像添加元数据LABEL maintainer="example@example.com"RUN实行命令并在镜像中创建层RUN yum update -y && yum install -y httpdCOPY将文件或目次从构建上下文复制到容器内COPY ./myapp /usr/src/appADD雷同 COPY,但支持解压 tar 文件和从 URL 下载文件ADD myapp.tar.gz /usr/src/appWORKDIR设置工作目次WORKDIR /usr/src/appCMD设置容器启动时默认实行的命令或步伐CMD ["httpd", "-D", "FOREGROUND"]ENTRYPOINT设置容器启动时实行的命令,常与 CMD 配合使用ENTRYPOINT ["python", "app.py"]EXPOSE声明容器将要监听的端口(仅用于文档化,不会主动暴露端口)EXPOSE 8080VOLUME创建挂载点以便共享或长期化数据VOLUME ["/data"]ENV设置环境变量ENV APP_ENV=productionARG定义构建时可用的变量ARG VERSION=1.0USER设置容器内的用户USER appuserSHELL更改 RUN 指令所用的 shellSHELL ["/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 镜像,享受私有化的镜像仓库服务了。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表