Skip to content

16、阿里云镜像仓库ACR和Harbor

1、阿里云镜像仓库

1、进入阿里云控制台

https://cr.console.aliyun.com/cn-hangzhou/instances

2、新建命名空间

1-16.png

3、新建镜像仓库

1-17.png

4、登录阿里云Docker Registry

  • laosu_blog 命名空间
  • laosu_springboot 仓库名称
bash
 sudo docker login --username=aliyun2373804424 crpi-of3t8d16lbfndd3c.cn-shenzhen.personal.cr.aliyuncs.com
 ### 密码:
 L*******
bash
# 有个 warning
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

处理警告

警告内容解析

  • 1.密码存储问题:

    • 你通过 docker login 命令登录时,Docker 会将你的用户名和密码 明文存储 在 /root/.docker/config.json 文件中。
    • 这是一个安全风险,因为任何能访问该文件的人都可以看到你的密码。
  • 2.建议解决方案:

    • Docker 推荐使用 凭证助手(Credential Helper) 来加密存储密码,而不是明文存储。
  • 3.Login Succeeded :

    • 尽管有警告,但登录已经成功,你可以正常使用 Docker 推送或拉取镜像。

如何解决这个警告? 方法 1:使用 Docker 凭证助手(推荐)

  • 1.安装凭证助手:
    • 例如,使用 pass (Linux)或 osxkeychain (macOS):
    bash
    sudo apt-get install pass  # Linux
    brew install docker-credential-helper  # macOS
  • 2.配置 Docker:
    • 修改 Docker 配置文件 ~/.docker/config.json ,添加凭证助手:
      json
      {
        "credsStore": "pass"
      }
    • 或者直接运行:
      bash
      docker config --global credsStore pass
  • 3.重新登录:
    • 再次运行 docker login 命令,,密码会被加密存储。

5、将镜像推送到Registry

bash
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/xx_blog/xx-springboot:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/xx_blog/xx-springboot:[镜像版本号]

# mine
docker tag b8fe4873ffb7 crpi-of3t8d16lbfndd3c.cn-shenzhen.personal.cr.aliyuncs.com/laosu_blog/laosu-springboot:v1
bash
[root@xx-blog ~]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED          SIZE
xx-spring-boot-web   v1        2155d2ca31fa   12 minutes ago   192MB
xx-springboot        v1        82132e652235   56 minutes ago   546MB
[root@xx-blog ~]# docker tag 82132e652235 registry.cn-hangzhou.aliyuncs.com/xx_blog/xx-springboot:v1
[root@xx-blog ~]# docker push registry.cn-hangzhou.aliyuncs.com/xx_blog/xx-springboot:v1

1-18.png

6、拉取镜像

bash
docker pull registry.cn-hangzhou.aliyuncs.com/xx_blog/xx-springboot:[镜像版本号]

# mine
docker pull crpi-of3t8d16lbfndd3c.cn-shenzhen.personal.cr.aliyuncs.com/laosu_blog/laosu-springboot:v1

2、安装与卸载Docker Compose

bash
sudo curl -L "https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 可以进这里看版本
https://github.com/docker/compose/releases/

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version 

# 如果是使用的 curl 方式来安装的
sudo rm /usr/local/bin/docker-compose
bash
# 如果上述安装不了,可以手动下载
https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-Linux-x86_64

# 1.使用阿里云镜像
sudo curl -L "https://mirrors.aliyun.com/docker-toolbox/linux/compose/latest/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose


# 将已下载的Docker Compose二进制文件复制到/usr/local/bin目录中。您可以使用sudo命令来拷贝,确保文件有执行权限
sudo cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose

# 为docker-compose文件添加执行权限
sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version
bash
[root@iZwz90axp17yqnoevndbydZ bin]# cd /usr/local/bin/
[root@iZwz90axp17yqnoevndbydZ bin]# ls
1panel  cloud-id    cloud-init-per               jsondiff   jsonpointer  normalizer
1pctl   cloud-init  docker-compose-linux-x86_64  jsonpatch  jsonschema
[root@iZwz90axp17yqnoevndbydZ bin]# mv docker-compose-linux-x86_64 docker-compose
[root@iZwz90axp17yqnoevndbydZ bin]# ls
1panel  1pctl  cloud-id  cloud-init  cloud-init-per  docker-compose  jsondiff  jsonpatch  jsonpointer  jsonschema  normalizer
[root@iZwz90axp17yqnoevndbydZ bin]# sudo chmod +x /usr/local/bin/docker-compose
[root@iZwz90axp17yqnoevndbydZ bin]# docker-compose --version
Docker Compose version v2.39.3
[root@iZwz90axp17yqnoevndbydZ bin]#

3.使用dockerCompose

1. 创建 docker-compose.yml 文件

Docker Compose 通过一个 YAML 文件(通常命名为 docker-compose.yml )来定义和管理多个容器服务。以下是一个简单的示例:

yaml
version: '3.8'  # 指定 Docker Compose 版本
services:
  web:  # 服务名称
    image: nginx:latest  # 使用的镜像
    ports:
      - "80:80"  # 端口映射(主机端口:容器端口)
    volumes:
      - ./html:/usr/share/nginx/html  # 挂载本地目录到容器
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password  # 设置环境变量

2. 常用命令

启动服务

bash
docker-compose up -d  # -d 表示后台运行
  • 首次运行会自动拉取镜像并启动容器。
  • 如果修改了 docker-compose.yml ,重新运行此命令会更新服务。

查看运行状态

bash
docker-compose ps  # 查看当前服务的状态
docker-compose logs  # 查看日志
docker-compose logs -f  # 实时查看日志(类似 tail -f)

停止服务

bash
docker-compose stop  # 停止正在运行的服务
docker-compose down  # 停止并删除容器

重启服务

bash
docker-compose restart  # 重启所有服务
docker-compose restart web  # 仅重启 web 服务

进入容器

bash
docker-compose exec web bash  # 进入 web 服务的容器

构建自定义镜像 如果你的服务需要自定义镜像(例如基于 Dockerfile ),可以在 docker-compose.yml 中指定:

yaml
services:
  web:
    build: ./myapp  # 指定 Dockerfile 所在目录
    ports:
      - "5000:5000"

然后运行:

bash
docker-compose build  # 构建镜像
docker-compose up -d  # 启动服务

3. 实际案例

案例 1:部署 WordPress

yaml
version: '3.8'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    volumes:
      - db_data:/var/lib/mysql
  wordpress:
    image: wordpress:latest
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - ./wp-content:/var/www/html/wp-content
volumes:
  db_data:  # 定义数据卷

运行:

bash
docker-compose up -d

访问 http://localhost:8000 即可看到 WordPress 安装页面。

案例 2:部署 Flask + Redis

yaml
version: '3.8'
services:
  web:
    build: .  # 使用当前目录的 Dockerfile
    ports:
      - "5000:5000"
    environment:
      REDIS_HOST: redis
  redis:
    image: redis:alpine

运行:

bash
docker-compose up -d

4. 高级功能

环境变量文件 将敏感信息(如密码)放在 .env 文件中:

bash
# .env 文件
MYSQL_ROOT_PASSWORD=secret

在 docker-compose.yml 中引用:

yaml
environment:
  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

多文件配置 可以使用多个 YAML 文件(如 docker-compose.prod.yml )来区分不同环境:

bash
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

5. 常见问题

Q:如何更新服务? 修改 docker-compose.yml 后运行:

bash
docker-compose up -d --build  # 重新构建并启动

Q:如何查看服务依赖关系?

bash
docker-compose config  # 查看最终生成的配置

Q:如何清理数据?

bash
docker-compose down -v  # 删除容器和卷