zoukankan      html  css  js  c++  java
  • Docker Compose实战

    Docker Compose 安装 Tomcat

    version: '3.1'
    services:
      tomcat:
        restart: always
        image: tomcat
        container_name: tomcat:8.5.32
        ports:
          - 8080:8080
        volumes:
          - /usr/local/docker/tomcat/webapps/test:/usr/local/tomcat/webapps/test
        environment:
          TZ: Asia/Shanghai
    

    Docker Compose 安装 MySQL

    mysql5.0

    version: '3.1'
    services:
      mysql:
        restart: always
        image: mysql:5.7.22
        container_name: mysql
        ports:
          - 3306:3306
        environment:
          TZ: Asia/Shanghai
          MYSQL_ROOT_PASSWORD: 123456
        command:
          --character-set-server=utf8mb4
          --collation-server=utf8mb4_general_ci
          --explicit_defaults_for_timestamp=true
          --lower_case_table_names=1
          --max_allowed_packet=128M
          --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
        volumes:
          - mysql-data:/var/lib/mysql
    
    volumes:
      mysql-data:
    

    mysql8.0

    version: '3.1'
    services:
      db:
        image: mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: 123456
        command:
          --default-authentication-plugin=mysql_native_password
          --character-set-server=utf8mb4
          --collation-server=utf8mb4_general_ci
          --explicit_defaults_for_timestamp=true
          --lower_case_table_names=1
        ports:
          - 3306:3306
        volumes:
          - ./conf:/etc/mysql/conf.d 
          - ./logs:/var/log/mysql 
          - ./data:/var/lib/mysql 
      adminer:
        image: adminer
        restart: always
        ports:
          - 8080:8080
    

    adminer是一个简洁的网页数据库管理界面,对MySQL功能的更好支持,更高的性能和更高的安全性。访问地址:http://ip:port

    Docker Compose 安装 GitLab

    概述

    GitLab 是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。它拥有与 Github 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序 (Wall) 进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

    安装

    这里以安装汉化的 GitLab 社区版 Docker Image为例,镜像地址: https://hub.docker.com/r/twang2218/gitlab-ce-zh,docker-compose.yml 配置如下:

    version: '3'
    services:
        gitlab:
          image: 'twang2218/gitlab-ce-zh:11.1.4'
          restart: always
          container_name: gitlab
          hostname: '192.168.147.138'
          environment:
            TZ: 'Asia/Shanghai'
            GITLAB_OMNIBUS_CONFIG: |
              external_url 'http://192.168.147.138:8080'
              gitlab_rails['time_zone'] = 'Asia/Shanghai'
              gitlab_rails['gitlab_shell_ssh_port'] = 2222
              unicorn['port'] = 8888
              nginx['listen_port'] = 8080
          ports:
            - '8080:8080'
            - '8443:443'
            - '2222:22'
          volumes:
            - /usr/local/docker/gitlab/config:/etc/gitlab
            - /usr/local/docker/gitlab/data:/var/opt/gitlab
            - /usr/local/docker/gitlab/logs:/var/log/gitlab
    

    设置管理员初始密码

    • 端口 8080 是因为我在配置中设置的外部访问地址为 8080,默认是 80
    • 初始化安装完成后效果如下:

    • 设置管理员初始密码,这里的密码最好是 字母 + 数字 组合,并且 大于等于 8 位
    • 配置完成后登录,管理员账号是 root

    注意: 如果服务器配置较低,启动运行可能需要较长时间,请耐心等待

    登陆成功之后界面如下:

    基本设置

    可见性与访问控制

    第一次使用时需要做一些初始化设置,点击管理区域-->设置

    帐户和限制

    关闭头像功能,由于 Gravatar 头像为网络头像,在网络情况不理想时可能导致访问时卡顿

    注册限制

    由于是内部代码托管服务器,可以直接关闭注册功能,由管理员统一创建用户即可

    GitLab 的账户管理

    使用时请不要直接通过 root 用户操作,需要先创建用户,然后通过创建的用户操作,如果你是管理员还需要为其他开发人员分配账户

    新建用户

    点击管理区域-->新建用户

    设置账户信息

    同时将自己设置为管理员

    修改用户密码

    由于我们创建时并没有配置邮箱,所以还需要重新编辑用户信息并手动设置密码

    点击编辑跳转账户页面设置初始密码

    设置后密码后退出使用账号密码登录gitlab,第一次登录会设置新密码。

    创建项目

    新建项目提供了空白项目、从模板创建以及导入项目三种方式,这里以空白项目为例

    输入项目名称及描述信息,设置可见等级为私有,并且是否通过README 的方式来初始化项目

    创建好项目如下

    拉取推送代码

    SSH方式

    在账号中 新建 SSH 公钥 之前将无法通过 SSH 拉取或推送代码。SSH 密钥用于在您的电脑和 GitLab 建立安全连接。

    在 Git 安装目录下,使用 ssh-keygen 工具生成SSH KEY

    ssh-keygen -t rsa -C "your.email@example.com" -b 4096
    
    D:developSoftwareGit>ssh-keygen -t rsa -C "592188043@qq.com" -b 4096
    Generating public/private rsa key pair.
    Enter file in which to save the key (C:UsersAS/.ssh/id_rsa):
    Created directory 'C:UsersAS/.ssh'.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in C:UsersAS/.ssh/id_rsa.
    Your public key has been saved in C:UsersAS/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:qUybGbZ32xVEZm2oziDFZwESd1Sy0+4yPIfA/zBt/kc 592188043@qq.com
    The key's randomart image is:
    +---[RSA 4096]----+
    |        oooo=o=o |
    |         oo.oB. o|
    |         . oo.o. |
    |        .o. .+   |
    |      + S.o+  o  |
    |     + B   +o+ .E|
    |      B . . X *. |
    |       . . o %  .|
    |          . . o.o|
    +----[SHA256]-----+
    

    生成的秘钥位置在C:UsersAS/.ssh/id_rsa,将秘钥复制到服务端

    拉取推送代码有很多工具可自行研究,这是主要目的是为了测试推送,就直接使用git命令测试

    拉取代码

    推送代码

    创建一个.gitignore文件commit到本地git push到服务器

    HTTP方式

    在账户上创建个人令牌,以通过http的方式来拉取和推送代码,与SSH方式不同的是不需要设置秘钥,而是通过github的账号密码拉取和推送代码

    Docker Compose 安装 Nexus

    概述

    Nexus 是一个强大的仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。

    2016 年 4 月 6 日 Nexus 3.0 版本发布,相较 2.x 版本有了很大的改变:

    • 对低层代码进行了大规模重构,提升性能,增加可扩展性以及改善用户体验。
    • 升级界面,极大的简化了用户界面的操作和管理。
    • 提供新的安装包,让部署更加简单。
    • 增加对 Docker, NeGet, npm, Bower 的支持。
    • 提供新的管理接口,以及增强对自动任务的管理。

    安装

    我们使用 Docker 来安装和运行 Nexus,docker-compose.yml 配置如下:

    version: '3.1'
    services:
      nexus:
        restart: always
        image: sonatype/nexus3:3.29.2
        container_name: nexus
        ports:
          - 8081:8081
        volumes:
          - /usr/local/docker/nexus/data:/nexus-data
    

    注: 启动时如果出现权限问题可以使用:chmod 777 /usr/local/docker/nexus/data 赋予数据卷目录可读可写的权限

    登录web控制台 ,地址:http://ip:port/ 界面如下:

    初始账号密码,第一次登录的时候会提示admin用户的密码在/nexus-data/admin.password

    由于/nexus-data挂载到宿主机的/usr/local/docker/nexus/data目录下,所以admin的密码在/usr/local/docker/nexus/data/admin.password里

    登录之后会重置密码,nexus目录下的admin.password会被删除。

    Maven 仓库介绍

    代理仓库(Proxy Repository)

    意为第三方仓库,如:

    • maven-central
    • nuget.org-proxy

    版本策略(Version Policy):

    • Release: 正式版本
    • Snapshot: 快照版本
    • Mixed: 混合模式

    布局策略(Layout Policy):

    • Strict:严格
    • Permissive:宽松

    宿主仓库(Hosted Repository)

    存储本地上传的组件和资源的,如:

    • maven-releases
    • maven-snapshots
    • nuget-hosted

    部署策略(Deployment Policy):

    • Allow Redeploy:允许重新部署
    • Disable Redeploy:禁止重新部署
    • Read-Only:只读

    仓库组(Repository Group)

    通常包含了多个代理仓库和宿主仓库,在项目中只要引入仓库组就可以下载到代理仓库和宿主仓库中的包,如:

    • maven-public
    • nuget-group

    在项目中使用 Maven 私服

    1、配置认证信息

    在 Maven的 settings.xml 中添加 Nexus 认证信息(servers 节点下):

    <server>
      <id>nexus-releases</id>
      <username>admin</username>
      <password>12345678</password>
    </server>
    
    <server>
      <id>nexus-snapshots</id>
      <username>admin</username>
      <password>12345678</password>
    </server>
    

    Snapshots 与 Releases 的区别

    • nexus-releases: 用于发布 Release 版本
    • nexus-snapshots: 用于发布 Snapshot 版本(快照版)

    Release 版本与 Snapshot 定义如下:

    Release: 1.0.0/1.0.0-RELEASE
    Snapshot: 1.0.0-SNAPSHOT
    
    • 在项目 pom.xml 中设置的版本号添加 SNAPSHOT 标识的都会发布为 SNAPSHOT 版本,没有 SNAPSHOT 标识的都会发布为 RELEASE 版本。
    • SNAPSHOT 版本会自动加一个时间作为标识,如:1.0.0-SNAPSHOT 发布后为变成 1.0.0-SNAPSHOT-20180522.123456-1.jar

    2、配置自动化部署

    pom.xml 中添加如下代码:

    <distributionManagement>  
      <repository>  
        <id>nexus-releases</id>  
        <name>Nexus Release Repository</name>  
        <url>http://127.0.0.1:8081/repository/maven-releases/</url>  
      </repository>  
      <snapshotRepository>  
        <id>nexus-snapshots</id>  
        <name>Nexus Snapshot Repository</name>  
        <url>http://127.0.0.1:8081/repository/maven-snapshots/</url>  
      </snapshotRepository>  
    </distributionManagement> 
    

    注意事项:

    • ID 名称必须要与 settings.xml 中 Servers 配置的 ID 名称保持一致。
    • 项目版本号中有 SNAPSHOT 标识的,会发布到 Nexus Snapshots Repository, 否则发布到 Nexus Release Repository,并根据 ID 去匹配授权账号。

    3、部署到仓库

    mvn deploy
    

    4、配置代理仓库

    <repositories>
        <repository>
            <id>nexus</id>
            <name>Nexus Repository</name>
            <url>http://127.0.0.1:8081/repository/maven-public/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>nexus</id>
            <name>Nexus Plugin Repository</name>
            <url>http://127.0.0.1:8081/repository/maven-public/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </pluginRepository>
    </pluginRepositories>
    

    5、上传第三方 JAR 包

    Nexus 3.0 不支持页面上传,可使用 maven 命令:

    # 如第三方JAR包:aliyun-sdk-oss-2.2.3.jar
    mvn deploy:deploy-file 
      -DgroupId=com.aliyun.oss 
      -DartifactId=aliyun-sdk-oss 
      -Dversion=2.2.3 
      -Dpackaging=jar 
      -Dfile=D:aliyun-sdk-oss-2.2.3.jar 
      -Durl=http://127.0.0.1:8081/repository/maven-3rd/ 
      -DrepositoryId=nexus-releases
    

    注意事项:

    • 建议在上传第三方 JAR 包时,创建单独的第三方 JAR 包管理仓库,便于管理有维护。(maven-3rd)
    • -DrepositoryId=nexus-releases 对应的是 settings.xml 中 Servers 配置的 ID 名称。(授权)

    Docker Compose 安装 Registry 私服

    概述

    官方的 Docker Hub 是一个用于管理公共镜像的地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜像放到公网当中,那么你就需要 Docker Registry,它可以用来存储和管理自己的镜像。

    安装

    docker私有仓库章节配置和使用容器运行私有仓库,这里使用 docker-compose 来安装,配置如下:

    version: '3.1'
    services:
      registry:
        image: registry
        restart: always
        container_name: registry
        ports:
          - 5000:5000
        volumes:
          - /usr/local/docker/registry/data:/var/lib/registry
    

    启动成功后需要测试服务端是否能够正常提供服务,有两种方式:

    1、访问

    浏览器端http://ip:5000/v2/ 或者终端访问 curl http://ip:5000/v2/

    2、查看所有镜像

    http://192.168.147.134:5000/v2/_catalog

    3、查看指定镜像

    http://192.168.147.134:5000/v2/mysql/tags/list

    配置 Docker Registry 客户端

    1、修改配置文件daemon.json(如果不存在请新建该文件)

    vim /etc/docker/daemon.json
    

    在daemon.json文件中添加"insecure-registries":["ip:5000"],如下:

    {
        "registry-mirrors": ["https://xx.mirror.aliyuncs.com"],
        "insecure-registries":["IP:5000"]
    }
    

    注意:该文件必须符合 json 规范,否则 Docker 将不能启动。

    刷新配置:

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    部署 Docker Registry WebUI

    私服安装成功后就可以使用 docker 命令行工具对 registry 做各种操作了。然而不太方便的地方是不能直观的查看 registry 中的资源情况,这里介绍两个 Docker Registry WebUI 工具管理镜像。

    docker-registry-frontend

    docker-compose.yml 配置如下:

    version: '3.1'
    services:
      frontend:
        image: konradkleine/docker-registry-frontend:v2
        restart: always
        container_name: registry-frontend
        ports:
          - 8888:80
        volumes:
          - ./certs/frontend.crt:/etc/apache2/server.crt:ro
          - ./certs/frontend.key:/etc/apache2/server.key:ro
        environment:
          - ENV_DOCKER_REGISTRY_HOST=192.168.75.133
          - ENV_DOCKER_REGISTRY_PORT=5000
    

    注意:请将配置文件中的主机和端口换成自己仓库的地址

    ENV_DOCKER_REGISTRY_HOST: 指定私有仓库的主机地址

    ENV_DOCKER_REGISTRY_PORT: 指定私有仓库的端口号

    运行成功后在浏览器访问:http://192.168.75.133:8888,但是在主页中找不到任何存储库,报错如下

    官方Issues:https://github.com/kwk/docker-registry-frontend/issues/181

    真正的原因是寄存器容器不能通过网络通过docker-registry-frontend容器连接,即使这两个容器在同一台机器上,可以采用link或者创建bridge网络

    这里我使用link的方式:

    services:
      registry:
        image: registry
        restart: always
        container_name: registry
        ports:
          - 5000:5000
        volumes:
          - /usr/local/docker/registry/data:/var/lib/registry
    
      frontend:
        image: konradkleine/docker-registry-frontend:v2
        restart: always
        container_name: registry-frontend
        links:
          - registry:registry
        ports:
          - 8888:80
        volumes:
          - ./certs/frontend.crt:/etc/apache2/server.crt:ro
          - ./certs/frontend.key:/etc/apache2/server.key:ro
        environment:
          - ENV_DOCKER_REGISTRY_HOST=registry
          - ENV_DOCKER_REGISTRY_PORT=5000
    

    --link:参数中第一个registry是registry的容器名,第二个registry是定义的容器别名(使用别名访问容器),为了方便使用,一般别名默认容器名。

    测试如下:

  • 相关阅读:
    Android websocket使用
    Android WebSocket实现即时通讯功能
    A dependency may only have one source
    Finished with error: ProcessException: Process "D:FlutterAPPflutter_appfiveandroidgradlew.bat" exited abnormally:
    Android 中指纹识别
    vue学习指南:第四篇(详细)
    vue学习指南:第二篇(详细Vue基础)
    vue学习指南:第三篇(详细)
    webpack打包js文件
    H5离线缓存(基础)学习指南
  • 原文地址:https://www.cnblogs.com/bigfairy/p/14281066.html
Copyright © 2011-2022 走看看