• Day05-docker-compose与私有仓库


    3.4 Docker Compose

    • docker镜像可以通过Dockerfile一键创建.

    • 目前问题:docker容器的管理(启动,关闭,重启),需要手动执行,如何管理多个容器

    • 单机容器编排工具

      • docker compose
    • 容器集群管理

      • ansible+docker compose+dockerfile
      • docker swarm实现集群管理.
      • mesos
      • 未来我们通过k8s kubernetes(船舵)实现集群管理.
    • 了解:docker三剑客之一:docker machine(管理虚拟机),docker compose(容器编排),docker swarm(集群)

    • docker compose需要单独安装(epel源中就有),语法yaml格式.

    在这里插入图片描述

    1)compose极速上手指南

    yum install -y docker-compose
    环境准备
    mkdir -p /server/compose/01-run-nginx
    docker-compose -v
    docker-compose version 1.18.0, build 8dd22a9
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 书写docker-compose

    在这里插入图片描述

    案例28-初步上手docker-compose

    • docker-compose默认文件名:docker-compose.yaml或docker-compose.yml
    [root@docker01.oldboylinux.cn /app/docker/compose/01-ngx]# cat docker-compose.yml 
    version:  "3.3"
    services:
      nginx_compose:
        image: "nginx:1.22.1-alpine"
        ports:
          - "18848:80"
          
    [root@docker01 01-ngx]# docker-compose up -d
    Creating network "01ngx_default" with the default driver
    Pulling nginx_compose (nginx:1.22.1-alpine)...
    1.22.1-alpine: Pulling from library/nginx
    f56be85fc22e: Pull complete
    902afa68ca51: Pull complete
    b0a3a88d1edf: Pull complete
    51509a9feac5: Pull complete
    2dcba36d07e0: Pull complete
    0665eda1eb4f: Pull complete
    034c69766aa3: Pull complete
    Digest: sha256:8745c93f1a1c33a8ec8c82707b9bb1c8fe9ebf2b5d82e9480e78625d809855a1
    Status: Downloaded newer image for nginx:1.22.1-alpine
    Creating 01ngx_nginx_compose_1 ... done
    [root@docker01 01-ngx]# docker-compose 
    build    config   down     exec     images   logs     port     pull     restart  run      start    top      up
    bundle   create   events   help     kill     pause    ps       push     rm       scale    stop     unpause  version
    [root@docker01 01-ngx]# docker-compose ps
            Name                       Command               State                   Ports                 
    -------------------------------------------------------------------------------------------------------
    01ngx_nginx_compose_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:18848->80/tcp,:::18848->80/tcp
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这里插入图片描述

    docker-compose命令格式这个命令包含了docker container和docker image 命令。
    容器
    up -dup==run 创建并运行容器 启动的时候后台运行类似于docker run -d
    down关闭容器,删除容器,及相关资源
    stop/start/restartdocker container 关闭、开启、重启容器
    ps查看容器运行情况 只有-q选项
    top容器进程信息
    logs容器日志
    rm删除容器(需要容器已经关闭)
    镜像
    images查看镜像

    PS:只能在对应的目录下用

    • 修改docker-compose与生效

    2)compose文件的常用指令

    • 挂载数据卷

    • 容器之间的依赖,先后顺序。

    depends_on: 依赖,先启动指定的容器然后再启动当前容器.
    volumes: 数据卷
    links: 容器连接,本质hosts解析
    
    • 1
    • 2
    • 3

    链接: https://docs.docker.com/compose/compose-file/compose-file-v3/

    3)案例29-docker-compose部署kodexp

    • nginx

    • php

    • 配置文件

    • 代码目录

    • 书写docker run指令

    docker run  -d  --name "kodexp_php" \
    -v `pwd`/conf/www.conf:/usr/local/etc/php-fpm.d/www.conf \
    -v `pwd`/code:/app/code/kodexp \
    php:7-fpm-alpine
    
    docker run  -d Վʔname "kodexp_nginx"  -p 10086:80 \
    --link kodexp_php:php \
    -v `pwd`/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v `pwd`/conf/kodexp.conf:/etc/nginx/conf.d/kodexp.conf \
    -v `pwd`/code:/app/code/kodexp/ \
    nginx:1.22.1-alpine
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    在这里插入图片描述

    5)小结

    • docker build构建镜像/docker run 运行容器
    • 书写docker compose的时候,通过docker run自行测试
      • docker-compose指令:
        • 容器:
          • image
          • ports
          • links
          • depends_on
          • volumes
          • build

    dockercompose指令说明
    链接: https://docs.docker.com/compose/compose-file/compose-file-v3/

    3.5 docker镜像仓库之registry仓库

    1)仓库选型与概述

    • 应用场景:
      • 未来docker官方的镜像无法直接满足我们需求
      • 我们企业内部也要定制很多镜像
      • 而且这些镜像不想公开,都是私有的
    docker镜像仓库方案应用场景与特点
    镜像保存为压缩包使用的时候,sl(save/load),仅适用于节点极少的情况,很不方便
    registry镜像仓库使用方便,适用于小型网站集群(镜像不多,环境不复杂),命令行操作
    harbor镜像仓库企业级镜像仓库(docker,k8s)都可用,图形化页面
    公有云的镜像服务在公有云上申请个人,企业

    2)环境规划

    主机名环境与ip地址
    docker01.oldboylinux.cndocker环境 10.0.0.81/172.16.1.81
    reg.oldboylinux.cnregistry环境 10.0.0.82/172.16.1.82

    所有主机对应主机名能够解析

    cat >>/etc/hosts<<EOF
    10.0.0.81 docker01.oldboylinux.cn
    10.0.0.82 docker02.oldboylinux.cn reg.oldboylinux.cn
    EOF
    
    • 1
    • 2
    • 3
    • 4

    3)极速上手指南

    安,配,用

    1. 下载registry #镜像仓库服务器配置
    docker pull registry
    
    2. 配置(docker服务端准许使用http) (未来所有使用私有镜像仓库的节点都要配置)
    tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://o0ot3ltv.mirror.aliyuncs.com"],
      "insecure-registries": ["reg.oldboylinux.cn:5000"]
    }
    EOF
    
    温馨提示: 
       注意第2行结尾的逗号.
       注意reg.oldboylinux.cn域名解析.hosts解析.
    systemctl restart docker
    
    #镜像仓库服务器
    3. 使用启动registry(未来可以docker compose实现)
    指定端口号5000:5000
    映射随机数据卷 容器中的/var/lib/registry/
    docker volume create registry
    docker volume ls 
    docker run -d --name "oldboy_registry" -p 5000:5000 -v registry:/var/lib/registry \
    --restart=always registry:latest
    --restart表示容器异常退出,会自动重启容器.
    
    查看私有仓库镜像信息
    http://reg.oldboylinux.cn:5000/v2/_catalog/  #默认没有有用信息
    [root@docker02 ~]# curl -L 10.0.0.82:5000/v2/_catalog
    {"repositories":[]}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述

    • 把镜像上传到私有仓库registry中
    4. (上传镜像到私有仓库全流程)
    tag 给镜像打上标签(地址/路径/名字:版本)
    push 镜像 上传镜像到私有仓库
    #打标签
    docker tag mysql:5.7-debian reg.oldboylinux.cn:5000/oldboyedu/mysql:5.7-debian
    [root@docker01 ~]# docker tag mariadb:latest reg.oldboylinux.cn:5000/oldboyedu/db:mariadb_latest
    #推送到私有仓库
    docker push reg.oldboylinux.cn:5000/oldboyedu/mysql:5.7-debian
    [root@docker01 ~]# docker push reg.oldboylinux.cn:5000/oldboyedu/db:mariadb_latest 
    The push refers to repository [reg.oldboylinux.cn:5000/oldboyedu/db]
    c359e781d90a: Pushed 
    f95954e05332: Pushed 
    060b534c4abd: Pushed 
    672465781193: Pushed 
    6c649bbdd7d6: Pushed 
    286a90349ea9: Pushed 
    eb3b55e3972c: Pushed 
    8f2689356f7c: Pushed 
    657a7983a5d3: Pushed 
    9f54eef41275: Pushed 
    mariadb_latest: digest: sha256:528cfe83d93caba437e75039b606a4637dd5c724c6a25d7c7b64ec2e9eb11303 size: 2412
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 查看打上标签后的镜像的信息
    [root@docker01 ~]# docker images|grep 5000
    reg.oldboylinux.cn:5000/oldboyedu/db   mariadb_latest      e2278f24ac88   2 years ago     410MB
    [root@docker02 ~]# curl -L 10.0.0.82:5000/v2/_catalog
    {"repositories":["oldboyedu/db"]}
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    在这里插入图片描述

    docker01 
    docker pull reg.oldboylinux.cn:5000/oldboyedu/mysql:5.7-debian
    docker images |grep reg
    
    • 1
    • 2
    • 3

    4)小结

    • 实现registry镜像私有仓库即可.
    • 补充: -v 随机挂载容器中的/data/registry/:/var/lib/registry/目录.
    • 自己把启动registry写成docker compose
    docker volume create registry 
    docker run -d --name "oldboy_registry" -p 5000:5000 -v registry:/var/lib/registry \
    --restart=always registry:latest
    
    #registry-docker-compose 
    version: "3.3"
    services:
      oldboy_registry:
         container_name: "oldboy_reg"
         image: "registry:latest"
         ports:
           - "5000:5000"
         restart: always
         volumes:
           - "registry:/var/lib/registry"
    volumes:
      registry:
    
    [root@docker01 04_registry]# docker-compose ps
       Name                 Command               State                    Ports                  
    ----------------------------------------------------------------------------------------------
    oldboy_reg   /entrypoint.sh /etc/docker ...   Up      0.0.0.0:5000->5000/tcp,:::5000->5000/tcp
    [root@docker01 04_registry]# docker volume ls
    DRIVER    VOLUME NAME
    local     04registry_registry
    local     oldboy_data
    [root@docker01 04_registry]# docker ps
    CONTAINER ID   IMAGE             COMMAND                   CREATED          STATUS          PORTS                                       NAMES
    b6051560376e   registry:latest   "/entrypoint.sh /etc…"   55 seconds ago   Up 53 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   oldboy_reg
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    3.6 docker企业级镜像仓库-harbor仓库

    1)环境准备

    2C4G(1C2G)

    tar xf harbor-offline-installer-v2.3.1.tgz -C /app/tools/
    #目录结构
    common.sh
    harbor.v2.3.1.tar.gz
    harbor.yml.tmpl  #临时配置文件 正式配置文件 叫harbor.yml 
    install.sh       #每次修改配置 需要执行下
    LICENSE
    prepare
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 配置文件
    cat >>/etc/hosts<<EOF
    10.0.0.81 docker01.oldboylinux.cn
    10.0.0.82 docker02.oldboylinux.cn reg.oldboylinux.cn harbor.oldboylinux.cn
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 准备配置文件
    cp harbor.yml.tmpl harbor.yml
    
    • 1
    • 修改域名部分
    hostname: harbor.oldboylinux.cn
    
    • 1
    • 禁用https功能
    注释掉了 https相关的内容
    #https:
    # # https port for harbor, default is 443
    # port: 443
    # # The path of cert and key files for nginx
    # certificate: /your/certificate/path
    # private_key: /your/private/key/path
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 修改了harbor仓库的默认的密码
    harbor_admin_password: admin
    
    • 1

    在这里插入图片描述

    • 进行安装
    ./install.sh  
    #注意要检查80是否被占用
    提示successfully
    ? ----Harbor has been installed and started 
    successfully.----
    成功
    需要安装docker和docker-compose
    [root@docker02 harbor]# docker-compose ps
          Name                     Command               State                  Ports                
    -------------------------------------------------------------------------------------------------
    harbor-core         /harbor/entrypoint.sh            Up                                          
    harbor-db           /docker-entrypoint.sh 96 13      Up                                          
    harbor-jobservice   /harbor/entrypoint.sh            Up                                          
    harbor-log          /bin/sh -c /usr/local/bin/ ...   Up      127.0.0.1:1514->10514/tcp           
    harbor-portal       nginx -g daemon off;             Up                                          
    nginx               nginx -g daemon off;             Up      0.0.0.0:80->8080/tcp,:::80->8080/tcp
    redis               redis-server /etc/redis.conf     Up                                          
    registry            /home/harbor/entrypoint.sh       Up                                          
    registryctl         /home/harbor/start.sh            Up       
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    2)浏览器访问

    在这里插入图片描述

    • 输入用户名admin,密码admin进入harbor仓库

    在这里插入图片描述

    3)仓库使用指南

    [root@docker01 04_registry]# cat /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://o0ot3ltv.mirror.aliyuncs.com"],
      "insecure-registries": ["harbor.oldboylinux.cn"]
    }
     docker login -uadmin -padmin harbor.oldboylinux.cn 
     
    [root@docker01 04_registry]#  docker login -uadmin -padmin harbor.oldboylinux.cn
    WARNING! Using --password via the CLI is insecure. Use --password-stdin.
    Error response from daemon: Get "https://harbor.oldboylinux.cn/v2/": dial tcp 10.0.0.82:443: connect: connection refused
    [root@docker01 04_registry]# systemctl restart docker
    [root@docker02 harbor]# systemctl restart docker
    [root@docker02 harbor]# docker-compose up -d
    harbor-log is up-to-date
    registryctl is up-to-date
    registry is up-to-date
    Starting harbor-portal ... 
    Starting redis ... 
    Starting harbor-db ... done
    harbor-core is up-to-date
    harbor-jobservice is up-to-date
    nginx is up-to-date
    
    [root@docker01 04_registry]#  docker login -uadmin -padmin harbor.oldboylinux.cn
    WARNING! Using --password via the CLI is insecure. Use --password-stdin.
    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
    
     docker tag oldboy_web:tengine_2.3.3-v2 harbor.oldboylinux.cn/library/tengine:2.3.3_v2
     docker push harbor.oldboylinux.cn/library/tengine:2.3.3_v2
     
    [root@docker01 ~]# docker tag centos:latest harbor.oldboylinux.cn/library/centos:latest
    [root@docker01 ~]# docker push harbor.oldboylinux.cn/library/centos:latest 
    The push refers to repository [harbor.oldboylinux.cn/library/centos]
    74ddd0ec08fa: Pushed 
    latest: digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc size: 529
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    在这里插入图片描述

    4)用户管理

    系统管理里面创建用户
    项目管理中成员关联用户

    5)harbor高可用

    可以通过harbor自带的镜像同步工具实现.(搭建2个harbor服务器)

    找出harbor的镜像目录(registry目录),目录备份/同步

    /data/registry/docker/registry/v2/repositories
    
    • 1

    6)小结

    通过脚本/配置一键搭建即可.
    简单使用与用户管理即可.
    安全:https,避免公网访问.

    docker尾巴

    • docker不同的网络模式
    • docker底层原理 namespace,cgroups,文件系统

    链接: https://www.processon.com/view/link/6347dbb207912921d8137498

  • 相关阅读:
    JavaSE | 初识Java(一) | JDK \ JRE \ JVM
    嵌入式软件学习进阶
    Onedev v7.4.14 路径遍历漏洞分析(CVE-2022-38301)
    用HTML+CSS做一个漂亮简单的个人网页——动漫网页【火影忍者】1个页面
    力扣爆刷第126天之动态规划五连刷(斐波那契、爬楼梯、不同路径)
    JDK1.8新特性--->stream流
    LeetCode算法二叉树—226. 翻转二叉树
    程序员 男方净身出户离婚协议书
    Mysql 的char 和varchar的的区别
    Java学习 10.Java-类和对象
  • 原文地址:https://blog.csdn.net/dws123654/article/details/138163329