Docker · Spring Boot · Kotlin · 微服务Docker容器

【二-docker】3. docker compose

2020-03-17  本文已影响0人  后端技术学习分享

前言

近期在学习千峰达摩院的微服务2.0教程。我会把学习过程中提炼出来的知识记录并分享出来~

基础

案例

  1. 准备工作

    # 建立用户app及用户组appg
    groupadd appg
    useradd -g appg app    
    passwd app
    
    # 查看用户
    id app
    
    # 为hadoop添加sudo权限
    visudo 
      app ALL=(ALL) ALL
      # ALL=(ALL) NOPASSWD: ALL # 免密码sudo,暂时不使用
    
    # 将用户添加进docker用户组
    sudo gpasswd -a app  docker
    
    # 切换到app用户
    su app
    
    # 建立相关目录 sotf-存放安装包 install-软件安装目录
    cd /
    sudo mkdir server
    chown app:appg server
    cd server
    mkdir soft 
    mkdir install
    
  2. 部署mysql

    • 建立目录
      cd /server/install
      mkdir mysql
      mkdir mysql/data
      cd mysql
      
    • docker-compose.yml
      version: '3.1'
      services:
        img_mysql5.7:
          image: mysql:5.7
          container_name: con_mysql5.7
          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:
            - ./data:/var/lib/mysql
      
  3. 部署tomcat

    • 建立目录
      cd /server/install
      mkdir tomcat85
      mkdir tomcat85/webapps
      mkdir tomcat85/webapps/ROOT
      touch tomcat85/webapps/ROOT/index.html
      cd tomcat85
    • docker-compose.yml
      version: '3.1'
      services:
        img_tomcat8.5:
          restart: always
          image: tomcat:8.5
          container_name: con_tomcat8.5
          ports:
            - 8080:8080
          volumes:
            - ./webapps:/usr/local/tomcat/webapps
          environment:
            TZ: Asia/Shanghai
      
  4. 部署nexus
    Nexus是一个Maven仓库管理器,一般用于maven私服。Nexus3.0与2.0相比有很大的改进

    • 建立目录
      cd /server/install
      mkdir nexus
      mkdir nexus/data
      cd nexus
    • docker-compose.yml
      version: '3.1'
      services:
        img_nexus:
          restart: always
          image: sonatype/nexus3:3.21.1
          container_name: con_nexus
          ports:
            - 8081:8081
          volumes:
            - ./data:/nexus-data
          # 某些情况下,容器内无法解析域名,则可加此配置设置dns
          dns:
            - 114.114.114.114
      
    • 关于权限问题
      如果容器启动失败,使用docker-compose logs查看日志发现是Permission denied问题,
      则原因为挂载出来的./data目录所有者id与容器内nexus用户id不一致。
      • 我的处理方法:
        • 编辑docekr-compose.yml文件,去掉挂载目录的配置,然后重启容器
        • 进入容器查询nexus用户id,可查到nexus id为200
          docker exec -it con_nexus bash 
          id nexus
          
        • 设置宿主机的nexus/data挂载目录所有者为200:200,即与容器内用户id一致
          sudo chown 200:200 data
        • 编辑docker-compose.yml文件,配置挂载目录,然后重启容器
    • 部署成功后尝试使用
      • 访问http://ip:8081
        • 输入admin账号和默认密码登录(密码在nexus-data/admin.password里)
        • 修改admin密码
      • 配置开发机Maven环境的settings.xml文件
        <servers>
         <server>
           <id>nexus-releases</id>
           <username>admin</username>
           <password>123456</password>
         </server>
         <server>
           <id>nexus-snapshots</id>
           <username>admin</username>
           <password>123456</password>
         </server>
        </servers>
        
      • 配置maven项目里的pom文件 - 配置自动化部署
        • 配置后执行mav deploy即可将项目打包到maven私服仓库
         <!-- id必须要与 settings.xml 中 Servers 配置的 ID 名称保持一致 -->
         <distributionManagement>  
           <repository>  
             <id>nexus-releases</id>  
             <name>Nexus Release Repository</name>  
             <!-- 注意填写自己容器宿主机的ip -->
             <url>http://ip:8081/repository/maven-releases/</url>  
           </repository>  
           <snapshotRepository>  
             <id>nexus-snapshots</id>  
             <name>Nexus Snapshot Repository</name>  
             <url>http://ip:8081/repository/maven-snapshots/</url>  
           </snapshotRepository>  
         </distributionManagement> 
        
      • 配置代理仓库
        <repositories>
           <repository>
               <id>nexus</id>
               <name>Nexus Repository</name>
               <!-- 注意填写自己容器宿主机的ip -->
               <url>http://ip: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://ip:8081/repository/maven-public/</url>
      <snapshots>
      <enabled>true</enabled>
      </snapshots>
      <releases>
      <enabled>true</enabled>
      </releases>
      </pluginRepository>
      </pluginRepositories>
      
      
  5. 部署gitlab

    version: '3'
    services:
      img_gitlab:
        image: 'twang2218/gitlab-ce-zh:11.1'
        container_name: con_gitlab
        restart: always
        hostname: '192.168.0.201'
        environment:
          TZ: 'Asia/Shanghai'
          GITLAB_OMNIBUS_CONFIG: |
            # GitLab的资源如图片、git仓库地址都是基于这个url,默认为hostname
            external_url 'http://192.168.50.100'
            # 外部SSH登陆端口,宿主机需要22端口,所以需要换一个 
            gitlab_rails['gitlab_shell_ssh_port'] = 2222 
            # 服务内部IP,可不管
            unicorn['port'] = 8888
            # 默认为80,宿主机80被占用则这里需要改
            nginx['listen_port'] = 8082
        ports:
          - '8082:8082' # 与nginx端口一致
          - '443:443'
          - '2222:22'
        volumes:
          - ./config:/etc/gitlab
          - ./data:/var/opt/gitlab
          - ./logs:/var/log/gitlab
    

docker compose网络设置(转载)

资料来源&参考

个人公众号,定期分享各种技术干货,欢迎扫码关注!

扫描上方二维码获取更多技术分享
上一篇 下一篇

猜你喜欢

热点阅读