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是定义的容器别名(使用别名访问容器),为了方便使用,一般别名默认容器名。

    测试如下:

  • 相关阅读:
    Running APP 使用说明
    Android 控件八 WebView 控件
    Android 控件七 ImageView 控件
    Android 控件六 CheckBox 控件
    Android 控件五 RadioButton 控件
    Android 控件四 EditText 控件
    Android 控件三 TextView 控件实现 Button
    Android 控件二 Button
    Android 基础控件演示实例
    Android 控件一 TextView
  • 原文地址:https://www.cnblogs.com/bigfairy/p/14281066.html
Copyright © 2011-2022 走看看