centos stream安装docker-compose和docker-registry

一、安装 Docker Compose

Docker Compose 不是通过默认的包管理器(如 yum)提供的,而是作为一个独立的二进制文件提供。你可以按照以下步骤来安装它,注意docker拉取很多镜像需要梯子:

  1. 下载最新的 Docker Compose 版本

    sudo curl -L "https://github.com/docker/compose/releases/download/v2.31.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
    

    请注意,这里下载的是x86_64架构的linux版本。

  2. 给目录增加应用可执行权限

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. 验证安装

    docker-compose --version
    

    这条命令会输出已安装的 Docker Compose 的版本信息,确认安装成功。

二、 安装 Docker Registry

Docker Registry 是一个用于存储和分发 Docker 镜像的服务。你可以使用 Docker 官方提供的镜像来运行一个本地的 Registry。

  1. 拉取 Docker Registry 镜像

    sudo docker pull registry:2
    
  2. 运行 Docker Registry

    sudo docker run -d -p 5000:5000 --name myregistry registry:2
    

    这将启动一个本地的 Docker Registry,并将其绑定到主机的 5000 端口上。

  3. 测试 Docker Registry
    你可以尝试推送一个镜像到这个本地的 Registry 来测试是否一切正常。首先,下载一个公共镜像:

    sudo docker pull alpine
    sudo docker images
    

    会看到现有的镜像,输入如下:

    REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
    alpine       latest    63b790fccc90   2 months ago    7.8MB
    registry     2         c18a86d35e98   14 months ago   25.4MB
    

    给你的本地镜像打标签:

    sudo docker tag alpine localhost:5000/alpine
    

    然后,推送这个镜像到本地 Registry:

    sudo docker push localhost:5000/alpine
    

    如果一切顺利,你应该能够看到镜像已经被推送到本地的 Docker Registry 中。

三、Docker Registry常用命令

1、查看 Docker Registry 中的镜像

Docker Registry 提供了一个 RESTful API,你可以使用 curl 命令来查询镜像和标签的信息。

列出所有仓库

curl -X GET http://localhost:5000/v2/_catalog

输出示例:

{
    "repositories": [
        "alpine"
    ]
}

列出特定仓库的所有标签

curl -X GET http://localhost:5000/v2/alpine/tags/list

输出示例:

{
    "name": "alpine",
    "tags": [
        "latest"
    ]
}
2、下载(拉取)Docker Registry 中的镜像

拉取镜像

sudo docker pull localhost:5000/alpine

验证镜像已成功拉取

sudo docker images

输出示例:

REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
localhost:5000/alpine     latest              1c6fc209c4dc        2 weeks ago         5.59MB

3、使用docker命令停止 Docker Registry

 sudo docker stop myregistry

四、 Docker Registry设置成服务

将 Docker Registry 设置为系统服务,可以确保它在系统启动时自动运行,并且可以通过 systemd 进行管理和控制。以下是具体的步骤:

创建 Docker Registry 的 Systemd 服务文件
  1. 创建服务文件
    /etc/systemd/system/ 目录下创建一个新的服务文件,例如 docker-registry.service

    sudo nano /etc/systemd/system/docker-registry.service
    
  2. 编辑服务文件
    在文件中添加以下内容:

    [Unit]
    Description=Docker Registry
    After=network.target
    
    [Service]
    Restart=always
    ExecStart=/usr/bin/docker run --rm -p 5000:5000 -v /path/to/registry/data:/var/lib/registry --name myregistry registry:2
    ExecStop=/usr/bin/docker stop myregistry
    
    [Install]
    WantedBy=multi-user.target
    

    -v /path/to/registry/data:/var/lib/registry 参数将主机上的 /path/to/registry/data 目录挂载到容器的 /var/lib/registry 目录,用于存储 Registry 数据。这里注意当你使用 docker run 命令启动 Docker Registry 而不指定任何数据卷挂载(即 -v 参数),Docker 会在容器内部使用默认的存储路径来保存镜像数据。具体来说,Docker Registry 默认会将数据存储在容器内的 /var/lib/registry 目录中。然而,这种做 法有一个明显的缺点:当容器停止或删除时,存储在容器内部的数据将会丢失。为了持久化数据,通常建议将宿主机的一个目录挂载到容器内的 /var/lib/registry 目录。

    防火墙设置:确保防火墙允许访问 5000 端口。

    sudo firewall-cmd --zone=public --add-port=5000/tcp --permanent
    sudo firewall-cmd --reload
    
  3. 重新加载 Systemd 配置
    保存并关闭文件后,重新加载 systemd 配置以使新的服务文件生效。

    sudo systemctl daemon-reload
    
启动和管理 Docker Registry 服务
  1. 启动服务

    sudo systemctl start docker-registry
    
  2. 检查服务状态

    sudo systemctl status docker-registry
    

    这条命令会显示服务的当前状态,包括是否正在运行以及最近的日志信息。

  3. 设置服务开机自启

    sudo systemctl enable docker-registry
    
  4. 停止服务

    sudo systemctl stop docker-registry
    
  5. 重启服务

    sudo systemctl restart docker-registry
    

    如果启动报错使用下面命令查看日志,我的就是存在myregistry同名镜像,删除重启就好了。

    sudo journalctl -u docker-registry.service -e
    

    同名报错是这样的:

    1129 11:07:57 localhost.localdomain systemd[1]: Failed to start Docker Registry.
    1129 11:11:52 localhost.localdomain systemd[1]: Started Docker Registry.
    1129 11:11:52 localhost.localdomain docker[7960]: docker: Error response from daemon: Conflict. The container name "/myregistry" is already in use by container "964d4e92949760   a5e29421f6c4369b814934d83d7fd01>
    1129 11:11:52 localhost.localdomain docker[7960]: See 'docker run --help'.
    

五、 Docker Compose集合性部署

我们可以使用 Docker Compose 配合Dockrdile实现项目部署,这里基础使用Ubuntu 20.04作为基础镜像,并安装JDK 11的。

Dockerfile 文件名simple.Dockerfile
# 使用Ubuntu 20.04作为基础镜像
FROM ubuntu:20.04

# 设置环境变量以避免交互式配置
ENV DEBIAN_FRONTEND=noninteractive

# 更新包列表并安装必要的工具
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y software-properties-common curl vim

# 安装OpenJDK 11
RUN apt-get update && \
    apt-get install -y openjdk-11-jdk

# 验证Java安装
RUN java -version

# 设置JAVA_HOME环境变量
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
ENV PATH=$JAVA_HOME/bin:$PATH

# 创建工作目录
RUN mkdir -p /app
WORKDIR /app

# 暴露端口(可选,根据需要)
# EXPOSE 8080

# 默认命令(可选,根据需要)
CMD ["java", "-version"]
docker-compose.yml

接下来,创建一个名为 docker-compose.yml 的文件,内容如下:

version: '3.8'

services:
  jdk11:
    build:
      context: .
      dockerfile: simple.Dockerfile
    container_name: jdk11-container
    image: my-jdk11
    ports:
      - "8080:8080"  # 如果您的应用需要暴露端口,可以在这里配置
    volumes:
      - ./app:/app  # 将本地的app目录挂载到容器的/app目录
    environment:
      - JAVA_OPTS=-Xmx512m -Xms256m  # 可以在这里设置Java启动参数
    command: ["java", "-version"]  # 默认命令
构建和运行
  1. 构建镜像
    在包含 Dockerfiledocker-compose.yml 文件的目录中,运行以下命令来构建镜像:

    sudo docker compose build
    

    成功后输出:

    [liuruifeng@localhost dockercomplex]$ sudo docker compose build
    WARN[0000] /home/dockercomplex/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
    [+] Building 8.8s (11/11) FINISHED                                                                                                                                                                 docker:default
     => [jdk11 internal] load build definition from simple.Dockerfile                                                                                                                                            0.0s
     => => transferring dockerfile: 805B                                                                                                                                                                         0.0s
     => [jdk11 internal] load metadata for docker.io/library/ubuntu:20.04                                                                                                                                        8.8s
     => [jdk11 internal] load .dockerignore                                                                                                                                                                      0.0s
     => => transferring context: 2B                                                                                                                                                                              0.0s
     => [jdk11 1/6] FROM docker.io/library/ubuntu:20.04@sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b                                                                                  0.0s
     => CACHED [jdk11 2/6] RUN apt-get update &&     apt-get upgrade -y &&     apt-get install -y software-properties-common curl vim                                                                            0.0s
     => CACHED [jdk11 3/6] RUN apt-get update &&     apt-get install -y openjdk-11-jdk                                                                                                                           0.0s
     => CACHED [jdk11 4/6] RUN java -version                                                                                                                                                                     0.0s
     => CACHED [jdk11 5/6] RUN mkdir -p /app                                                                                                                                                                     0.0s
     => CACHED [jdk11 6/6] WORKDIR /app                                                                                                                                                                          0.0s
     => [jdk11] exporting to image                                                                                                                                                                               0.0s
     => => exporting layers                                                                                                                                                                                      0.0s
     => => writing image sha256:17b65fb330f6557b8bc52ee3203b06fee3c0fa1318c6f0561013e6b1deb66130                                                                                                                 0.0s
     => => naming to docker.io/library/my-jdk11                                                                                                                                                                  0.0s
     => [jdk11] resolving provenance for metadata file 
    
  2. 运行容器
    使用以下命令来启动容器:

    sudo docker compose up -d
    

    成功后输出:

    [liuruifeng@localhost dockercomplex]$ sudo docker compose up -d
    WARN[0000] /home/dockercomplex/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
    [+] Running 2/2
    ✔ Network dockercomplex_default  Created                                                                                                                                                                    0.2s 
    ✔ Container jdk11-container      Started   
    
  3. 查看日志
    如果您想查看容器的日志,可以使用以下命令:

    sudo docker compose logs jdk11
    
  4. 验证服务状态

    你可以使用以下命令来验证服务的状态:

    sudo docker compose ps
    
  5. 停止和删除容器
    如果您想停止并删除容器,可以使用以下命令:

    sudo docker compose down
    
解释
  1. Dockerfile

    • 基础镜像:使用ubuntu:20.04
    • 更新包列表并安装必要的工具。
    • 安装OpenJDK 11。
    • 设置JAVA_HOME环境变量。
    • 创建工作目录并设置默认命令。
  2. docker-compose.yml

    • 定义一个名为 jdk11 的服务。
    • 指定构建上下文和Dockerfile路径。
    • 设置容器名称和镜像名称。
    • 暴露端口(如果需要)。
    • 挂载本地目录到容器中。
    • 设置环境变量和默认命令。

以上就是如何在 CentOS Stream 上安装 Docker Compose 和 Docker Registry 的基本步骤。后续会提供安装更强大的企业级镜像仓库harbor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值