class="hljs-ln-code"> class="hljs-ln-line">FROM centos:8
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line">
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line"># 更新软件包并安装 Apache HTTP 服务器
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line">RUN yum -y update && yum install -y httpd
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line">
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line"># 将当前目录下的代码复制到容器的 /var/www/html 目录
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line">COPY ./index.html /var/www/html/
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="9"> class="hljs-ln-code"> class="hljs-ln-line">
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="10"> class="hljs-ln-code"> class="hljs-ln-line"># 设置容器启动时运行 Apache 服务
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="11"> class="hljs-ln-code"> class="hljs-ln-line">CMD ["httpd", "-D", "FOREGROUND"]
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="12"> class="hljs-ln-code"> class="hljs-ln-line">
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="13"> class="hljs-ln-code"> class="hljs-ln-line"># 暴露容器的 80 端口
  • class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="14"> class="hljs-ln-code"> class="hljs-ln-line">EXPOSE 80
  • class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">

    #这个 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
    #你可以通过 docker ps 命令获取容器的 ID。

    #停止容器后,可以删除容器:
    docker rm
    #如果你不再需要镜像,可以使用以下命令删除它:
    docker rmi

    步骤 6:总结

    在龙蜥操作系统 8.9 上构建 Docker 镜像的步骤主要包括:

    1、安装 Docker。
    2、编写 Dockerfile。
    3、使用 docker build 命令构建镜像。
    4、使用 docker run 命令运行容器。
    5、使用 docker ps 和 docker stop 等命令管理容器。

    Dockerfile 常见指令的总结表格:

    class="table-box">
    指令描述示例
    FROM指定基础镜像FROM centos:8
    LABEL为镜像添加元数据LABEL maintainer="[email protected]"
    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 指令所用的 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://: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": [":5000"]
    }

    其中, 是你搭建私有仓库的服务器 IP 地址。

    重启 Docker 服务
    修改完成后,重启 Docker 服务,使配置生效:
    sudo systemctl restart docker

    步骤 4:将镜像推送到私人仓库

    构建 Docker 镜像
    例如,构建一个简单的镜像:

    docker build -t :5000/myimage .
    这里的 是你搭建仓库的服务器 IP 地址,myimage 是你自定义的镜像名称。

    登录到私有仓库
    你可能需要登录到私有仓库。使用以下命令进行登录:

    docker login :5000

    默认情况下,这个仓库不需要认证。如果你需要启用认证,可以参考 Docker 官方文档来配置用户名和密码。
    推送镜像到私有仓库
    使用以下命令将镜像推送到私有仓库:

    docker push :5000/myimage
    如果一切正常,Docker 会将镜像上传到你的私有仓库。

    步骤 5:从私人仓库拉取镜像

    从私有仓库拉取镜像
    当你需要从私人仓库拉取镜像时,只需使用 docker pull 命令:

    docker pull :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= \
      -e REGISTRY_HTTP_HEADERS_X_FORWARDED_PROTO=https \
      registry:2

    配置 Docker 客户端
    确保你已经配置 Docker 客户端以支持 HTTPS(和证书),并按照之前的步骤更新了 /etc/docker/daemon.json 文件。

    步骤 7:清理和管理镜像

    查看私有仓库中的镜像
    你可以查看仓库中的所有镜像。使用以下命令列出仓库中所有镜像:

    curl http://:5000/v2/_catalog

    删除镜像
    如果你需要删除某个镜像,可以通过以下命令:
    docker rmi :5000/myimage
    你可能还需要在仓库中手动删除镜像数据,以释放存储空间。

    总结

    搭建 Docker 私有镜像仓库的步骤主要包括:
    使用官方 registry 镜像启动私有仓库。
    配置 Docker 客户端以访问私有仓库。
    构建镜像并推送到私有仓库。
    从私有仓库拉取镜像。
    如果需要,还可以进一步配置 HTTPS 和认证。这样,你就可以在自己的服务器上管理 Docker 镜像,享受私有化的镜像仓库服务了。

    实战练习:

    私有服务器:

    #列出所有镜像
    docker images
    #查看所有容器
    docker ps -a

    #配置镜像源
    vim /etc/docker/daemon.json

    {
      "insecure-registries": ["私有镜像服务器IP:5000"]
    }

    #注意:"insecure-registries": ["私有镜像服务器IP:5000"]  这个地址是私有镜像仓库地址

    #拉取 Docker Registry 镜像
    docker pull registry:2
    #启动一个简单的私有仓库(在本地端口 5000):
    docker run -d -p 5000:5000 --name registry registry:2
    #首先,标记你想要推送到私有仓库的镜像:
    docker tag 镜像名称 私有镜像服务器IP:5000/镜像名称
    #然后,推送该镜像到你创建的私有仓库:
    docker push 私有镜像服务器IP:5000/镜像名称

    目标服务器:

    #当你在另一台机器上想要拉取镜像时:
    #首先配置私有镜像仓库地址
    vim /etc/docker/daemon.json

    #添加以下内容:

    {
      "insecure-registries": ["私有镜像服务器IP:5000"]
    }

    #最后使用此以下命令:
    docker pull 私有镜像服务器IP:5000/镜像名称

    注:本文转载自blog.csdn.net的GHY云端大师的文章"https://blog.csdn.net/m0_71071763/article/details/145493287"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
    复制链接

    评论记录:

    未查询到任何数据!