跳转至

10-Docker编排工具

编排工具说明

http://dockone.io/article/834

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。 Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。 使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。 Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。 Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。

Docker Compose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成一切准备工作。

- github.com/docker/compose

一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose,不再需要使用shell脚本来启动容器。在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器。完整的命令列表如下:

build 构建或重建服务
help 命令帮助
kill 杀掉容器
logs 显示容器的输出内容
port 打印绑定的开放端口
ps 显示容器
pull 拉取服务镜像
restart 重启服务
rm 删除停止的容器
run 运行一个一次性命令
scale 设置服务的容器数目
start 开启服务
stop 停止服务
up 创建并启动容器

简单的编排-nginx例子

安装配置

1.首先我们需要安装python-pip工具

yum -y install python3-pip

2.配置python pip支持国内的源

mkdir ~/.pip/ -p
cat >~/.pip/pip.conf<<EOF
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com
EOF

3.开始安装docker-compose编排工具

pip3.6 install docker-compose

以上方式如果安装报错,可以使用二进制方式安装

docker-compose-Linux-x86_64.64

\cp docker-compose-Linux-x86_64.64 /usr/local/bin/docker-compose
chmod +x  /usr/local/bin/docker-compose

4.检查是否安装完成

[root@linux-bkce-node21 ~]# docker-compose --version
docker-compose version 1.26.2, build eefe0d31

配置文件

1.Compose的配置文件是docker-compose.yml。让我们看看下面这个文件:

mkdir -p /root/compose 
cd /root/compose
cat >docker-compose.yml<<\EOF
version: '2'
services:
  web1:
    image: nginx
    ports: 
      - "6061:80"
    container_name: "web1"
    networks:
      - dev
  web2:
    image: nginx
    ports: 
      - "6062:80"
    container_name: "web2"
    networks:
      - dev
      - pro
  web3:
    image: nginx
    ports: 
      - "6063:80"
    container_name: "web3"
    networks:
      - pro
  web4:
    image: nginx
    ports:
      - "80"
    networks:
      - pro
networks:
  dev:
    driver: bridge
  pro:
    driver: bridge

EOF

docker-compose.yml文件指定了3个web服务

启动服务

1.如果你从互联网运行,将docker-compose-internet.yml保存为docker-compose.yml。

2.如果你使用教师给的镜像,将docker-compose-instructor.yml保存为docker-compose.yml。

3.使用下面的命令,所有的服务将使用后台模式被启动

  docker-compose up -d

显示的输出如下:

Creating network "compose_dev" with driver "bridge"
Creating network "compose_pro" with driver "bridge"
Creating web3 ... done
Creating web1 ... done
Creating web2 ... done

使用-f指定代替的compose文件。

使用-p指定代替compose文件所在的目录。

验证应用

使用docker-compose ps命令显示端口

[root@linux-bkce-node21 compose]# docker-compose ps
Name              Command               State          Ports        
--------------------------------------------------------------------
web1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:6061->80/tcp
web2   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:6062->80/tcp
web3   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:6063->80/tcp

检查服务状态

curl 192.168.1.21:6061
curl 192.168.1.21:6062
curl 192.168.1.21:6063

扩展服务

你能像这样扩展服务:

[root@linux-bkce-node21 compose]# docker-compose scale web4=5
WARNING: The scale command is deprecated. Use the up command with the --scale flag instead.
Creating compose_web4_1 ... done
Creating compose_web4_2 ... done
Creating compose_web4_3 ... done
Creating compose_web4_4 ... done
Creating compose_web4_5 ... done

检查日志:

docker-compose logs

检查运行的实例:

[root@linux-bkce-node21 compose]# docker-compose ps
     Name                   Command               State           Ports        
-------------------------------------------------------------------------------
compose_web4_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:32773->80/tcp
compose_web4_2   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:32774->80/tcp
compose_web4_3   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:32772->80/tcp
compose_web4_4   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:32771->80/tcp
compose_web4_5   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:32775->80/tcp
web1             /docker-entrypoint.sh ngin ...   Up      0.0.0.0:6061->80/tcp 
web2             /docker-entrypoint.sh ngin ...   Up      0.0.0.0:6062->80/tcp 
web3             /docker-entrypoint.sh ngin ...   Up      0.0.0.0:6063->80/tcp

你也能减少运行的实例数目:

[root@linux-bkce-node21 compose]# docker-compose scale web4=2
WARNING: The scale command is deprecated. Use the up command with the --scale flag instead.
Stopping and removing compose_web4_3 ... done
Stopping and removing compose_web4_4 ... done
Stopping and removing compose_web4_5 ... done
[root@linux-bkce-node21 compose]# docker-compose ps
     Name                   Command               State           Ports        
-------------------------------------------------------------------------------
compose_web4_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:32773->80/tcp
compose_web4_2   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:32774->80/tcp
web1             /docker-entrypoint.sh ngin ...   Up      0.0.0.0:6061->80/tcp 
web2             /docker-entrypoint.sh ngin ...   Up      0.0.0.0:6062->80/tcp 
web3             /docker-entrypoint.sh ngin ...   Up      0.0.0.0:6063->80/tcp 

停止服务

[root@linux-bkce-node21 compose]# docker-compose stop
Stopping compose_web4_2 ... done
Stopping compose_web4_1 ... done
Stopping web2           ... done
Stopping web1           ... done
Stopping web3           ... done

删除服务

[root@linux-bkce-node21 compose]# docker-compose rm
Going to remove compose_web4_2, compose_web4_1, web2, web1, web3
Are you sure? [yN] y
Removing compose_web4_2 ... done
Removing compose_web4_1 ... done
Removing web2           ... done
Removing web1           ... done
Removing web3           ... done

简单的编排-haproxy例子

现在开始创建一个目录,并编写编排内容

mkdir -p /root/compose 
cd /root/compose
cat >docker-compose.yml<<\EOF
web1:
  image: nginx
  expose:
    - 80

web2:
  image: nginx
  expose:
    - 80

haproxy:
  image: haproxy
  volumes:
    - /root/compose/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
  links:
    - web1
    - web2
  ports:
    - "7777:1080"
    - "80:8080"
EOF


cat >haproxy.cfg<<\EOF
global
  log 127.0.0.1 local0
  log 127.0.0.1 local1 notice
  maxconn 4096

defaults
  log global
  mode http
  option httplog
  option dontlognull
  timeout connect 5000ms
  timeout client 5000ms
  timeout server 5000ms

listen stats
  bind 0.0.0.0:1080
  mode http
  stats enable
  stats hide-version
  stats uri /stats
  stats auth admin:admin

frontend balance
  bind 0.0.0.0:8080
  default_backend web_backends

backend web_backends
  mode http
  option forwardfor
  balance roundrobin 
  server web1 web1:80 check
  server web2 web2:80 check
EOF

在当前目录执行docker-compose命令

[root@linux-bkce-node21 compose]# docker-compose up -d
Starting compose_web1_1 ... done
Starting compose_web2_1 ... done
Starting compose_haproxy_1 ... done

我们可以尝试打开浏览器访问应用

image-20201009153217164

其他方式

[root@linux-bkce-node21 compose]# docker-compose ps
      Name                     Command               State    Ports 
--------------------------------------------------------------------
compose_haproxy_1   docker-entrypoint.sh hapro ...   Exit 1         
compose_web1_1      /docker-entrypoint.sh ngin ...   Up       80/tcp
compose_web2_1      /docker-entrypoint.sh ngin ...   Up       80/tcp

最后我们把容器停止

[root@192e168e56e11 compose]# docker-compose stop   停止容器
Stopping compose_haproxy_1 ... done
Stopping compose_web2_1 ... done
Stopping compose_web1_1 ... done

最后我们可以删除容器

docker rm -f compose_web1_1 compose_web2_1 compose_haproxy_1

docker-compose rm

应用的编排-Wordpress

1.创建一个wordpress应用

mkdir -p /root/compose 
cd /root/compose
cat >docker-compose.yml<<\EOF
version: '3.3'           #compose文件版本
services:
   db:                   # 服务1:db
     image: mysql:5.7    # 使用镜像 mysql:5.7版本
     volumes:
       - db_data:/var/lib/mysql   # 数据持久化
     restart: always     # 容器服务宕机后总是重启
     environment:        # 环境配置
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:          # 服务2:wordpress
     depends_on:       # wordpress服务启动时依赖db服务,所以会自动先启动db服务
       - db
     image: wordpress:latest    # 使用镜像 wordpress:latest最新版
     ports:
       - "8000:80"          #端口映射8000:80
     restart: always
     environment:        # 环境
       WORDPRESS_DB_HOST: db:3306     # wordpress连接db的3306端口
       WORDPRESS_DB_USER: wordpress    # wordpress的数据库用户为wordpress
       WORDPRESS_DB_PASSWORD: wordpress   # wordpress的数据库密码是wordpress
       WORDPRESS_DB_NAME: wordpress    # wordpress的数据库名字是wordpress
volumes:
    db_data: {}
EOF

2.启动wordpress容器应用

docker-compose up -d

3.检查是否启动

[root@linux-bkce-node21 compose]# docker-compose ps
       Name                      Command               State          Ports        
-----------------------------------------------------------------------------------
compose_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp 
compose_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8000->80/tcp
  1. 访问wordpress应用 http://192.168.1.21:8000/

image-20201009153231026

5.访问首页

image-20201009153240976

清理环境

docker rm -f compose_wordpress_1 compose_db_1
docker-compose rm -f

应用的编排-discuz

Crossday Discuz! Board(简称 Discuz!)是北京康盛新创科技有限责任公司推出的一套通用的社区论坛软件系统

https://gitee.com/quyihuang/docker_compose_lnmp/blob/master/docker-compose.yml

https://gitee.com/unrpyc/Discuz_X3.4_docker/tree/master

创建数据目录

docker rm -f discuz-discuz discuz-mysql
rm -fr /data/devops-compose/discuz

mkdir -p /data/devops-compose/discuz/db/mysql/data
mkdir -p /data/devops-compose/discuz/db/mysql/example_db
mkdir -p /data/devops-compose/discuz/db/mysql.conf.d
chmod -R 777  /data/devops-compose/discuz

创建一个应用的配置文件

version: '2'
services:
  Discuz:
    image: discuz
    container_name: discuz-discuz
    build: .
    ports:
      - "8082:80"

  mysql:
    image: hub.c.163.com/library/mysql:5.7.18
    container_name: discuz-mysql
    ports:
      - "33007:3306"
    volumes:
      - /data/devops-compose/discuz/db/mysql/data:/var/lib/mysql
      - /data/devops-compose/discuz/db/mysql/example_db:/var/example_db
      - /data/devops-compose/discuz/db/mysql.conf.d:/etc/mysql/conf.d
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=asdf159753
      - MYSQL_DATABASE=discuz
    networks:
      - webnet
networks:
  webnet:

启动容器应用

/root/discuz-compose
docker-compose -f discuz.yml up -d

检查是否启动

# docker-compose -f discuz.yml ps
    Name                  Command             State                   Ports                
-------------------------------------------------------------------------------------------
discuz-discuz   supervisord -n                Up      22/tcp, 443/tcp, 0.0.0.0:8082->80/tcp
discuz-mysql    docker-entrypoint.sh mysqld   Up      0.0.0.0:33007->3306/tcp       

访问web应用 http://192.168.1.21:8082/

image-20220420220700858

Devops编排准备

端口规划

Jenkins 8080
Gitlab 80
gerrit 8088
Nexus 8081
Redline 3000
sonarqube 9000

挂载一个数据盘

mkfs.xfs -f /dev/sdb
mkdir -p /data
mount /dev/sdb /data/
 echo "/dev/sdb                                  /data                   xfs     defaults        0 0" >>/etc/fstab ; cat /etc/fstab |grep data

拉取代码

git clone https://gitee.com/chriscentos/devops-d.git

Devops编排-ldap

OpenLDAP是轻型目录访问协议(Lightweight Directory Access Protocol,LDAP)的自由和开源的实现,在其OpenLDAP许可证下发行,并已经被包含在众多流行的Linux发行版中。

https://gitee.com/byxlk/docker-gerrit

创建一个应用的配置文件

mkdir -p /data/devops-compose/ldap/var
mkdir -p /data/devops-compose/ldap/etc
chmod 777 -R /data/devops-compose/ldap/

创建一个应用的配置文件

version: '3'

services:
  ldap:
    image: osixia/openldap
    ports:
      - "389:389"
      - "636:636"
    environment:
      - LDAP_ADMIN_PASSWORD=secret
    volumes:
      - /data/devops-compose/ldap/var:/var/lib/ldap
      - /data/devops-compose/ldap/etc:/etc/ldap/slapd.d

  ldap-admin:
    image: osixia/phpldapadmin
    ports:
      - "6443:443"
    environment:
      - PHPLDAPADMIN_LDAP_HOSTS=ldap

启动容器应用

cd /root/devops-d/ldap
docker-compose -f ldap.yml up -d

检查是否启动

[root@linux-bkce-node21 ldap]# docker-compose -f ldap.yml ps
      Name                Command         State                     Ports                   
--------------------------------------------------------------------------------------------
ldap_ldap-admin_1   /container/tool/run   Up      0.0.0.0:6443->443/tcp, 80/tcp             
ldap_ldap_1         /container/tool/run   Up      0.0.0.0:389->389/tcp, 0.0.0.0:636->636/tcp

访问web应用 https://192.168.1.21:6443/

帐户:cn=admin,dc=example,dc=org 密码:secret

image-20220421113051041

Devops编排-gerrit

https://gitee.com/byxlk/docker-gerrit

创建数据存放目录

docker rm -f gerrit_gerrit_1 gerrit_postgres_1
rm -fr /data/devops-compose/gerrit

mkdir -p /data/devops-compose/gerrit/etc
mkdir -p /data/devops-compose/gerrit/git
mkdir -p /data/devops-compose/gerrit/index
mkdir -p /data/devops-compose/gerrit/cache
mkdir -p /data/devops-compose/gerrit/postgres
chmod 777 -R /data/devops-compose/gerrit/

编辑配置文件

cat >/data/devops-compose/gerrit/etc/gerrit.config<<\EOF

[gerrit]
  basePath = git
  canonicalWebUrl = http://localhost

[database]
  type = postgresql
  hostname = postgres
  database = reviewdb
  username = gerrit

[index]
  type = LUCENE

[auth]
  type = ldap
  gitBasicAuth = true

[ldap]
  server = ldap://192.168.1.21
  username=cn=admin,dc=example,dc=org
  accountBase = dc=example,dc=org
  accountPattern = (&(objectClass=person)(uid=${username}))
  accountFullName = displayName
  accountEmailAddress = mail

[sendemail]
  smtpServer = localhost

[sshd]
  listenAddress = *:29418

[httpd]
  listenUrl = http://*:8080/

[cache]
  directory = cache

[container]
  user = root
EOF

配置密码文件

cat >/data/devops-compose/gerrit/etc/secure.config<<\EOF
[database]
  password = secret

[ldap]
  password = secret
EOF

创建一个应用的配置文件

version: '3'

services:
  gerrit:
    image: gerritcodereview/gerrit
    ports:
      - "29418:29418"
      - "8088:8080"
    links:
      - postgres
    depends_on:
      - postgres
    volumes:
     - /data/devops-compose/gerrit/etc:/var/gerrit/etc
     - /data/devops-compose/gerrit/git:/var/gerrit/git
     - /data/devops-compose/gerrit/index:/var/gerrit/index
     - /data/devops-compose/gerrit/cache:/var/gerrit/cache
#    entrypoint: java -jar /var/gerrit/bin/gerrit.war init -d /var/gerrit

  postgres:
    image: postgres:9.6
    environment:
      - POSTGRES_USER=gerrit
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=reviewdb
    volumes:
      - /data/devops-compose/gerrit/postgres:/var/lib/postgresql/data

启动容器应用

cd /root/devops-d/gerrit/
docker-compose -f gerrit.yml up -d

检查是否启动

# docker-compose -f gerrit.yml ps
      Name                     Command              State                        Ports                      
------------------------------------------------------------------------------------------------------------
gerrit_gerrit_1     /entrypoint.sh                  Up      0.0.0.0:29418->29418/tcp, 0.0.0.0:8088->8080/tcp
gerrit_postgres_1   docker-entrypoint.sh postgres   Up      5432/tcp   

Registering users in OpenLDAP with PhpLdapAdmin

The sample docker compose project includes a node with PhpLdapAdmin connected to OpenLDAP and exposed via Web UX at https://localhost:6443.

The first user that logs in Gerrit is considered the initial administrator, it is important that you configure it on LDAP to login and having the ability to administer your Gerrit setup.

Define the Gerrit administrator in OpenLDAP

Login to PhpLdapAdmin using cn=admin,dc=example,dc=org as username and secret as password and then create a new child node of type "Courier Mail Account" for the Gerrit Administrator

Example:

  • Given Name: Gerrit
  • Last Name: Admin
  • Common Name: Gerrit Admin
  • User ID: gerritadmin
  • Email: gerritadmin@localdomain
  • Password: secret

Verify that your data is correct and then commit the changes to LDAP.

Login to Gerrit as Administrator

Login to Gerrit on http://localhost using the new Gerrit Admin credentials created on LDAP.

Example:

  • Login: gerritadmin
  • Password: secret

访问web应用 http://192.168.1.21:8088

image-20220421120624773

Devops编排-gitlab

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。安装方法是参考GitLab在GitHub上的Wiki页面。

创建数据存放目录

mkdir -p /data/devops-compose/gitlab/config
mkdir -p /data/devops-compose/gitlab/logs
mkdir -p /data/devops-compose/gitlab/data

创建一个应用的配置文件

version: "3"
services:
  gitlab:
    image: gitlab/gitlab-ce
    container_name: gitlab
    restart: always
    hostname: 'gitlab.ares5k.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.ares5k.com:80'
        gitlab_rails['gitlab_shell_ssh_port'] = 23
        #gitlab_rails['smtp_enable'] = true
        #gitlab_rails['smtp_address'] = "smtp.qq.com"
        #gitlab_rails['smtp_port'] = 465
        #gitlab_rails['smtp_user_name'] = "16891544@qq.com"
        #gitlab_rails['smtp_password'] = "填写自己的授权码"
        #gitlab_rails['smtp_authentication'] = "login"
        #gitlab_rails['smtp_enable_starttls_auto'] = true
        #gitlab_rails['smtp_tls'] = true
        #gitlab_rails['gitlab_email_from'] = '16891544@qq.com'
    ports:
      - '80:80'
      - '23:22'
    volumes:
      - '/data/devops-compose/gitlab/config:/etc/gitlab'
      - '/data/devops-compose/gitlab/logs:/var/log/gitlab'
      - '/data/devops-compose/gitlab/data:/var/opt/gitlab'

启动容器应用

cd /root/devops-d/gitlab/
docker-compose -f gitlab.yml up -d

检查是否启动

# docker-compose -f gitlab.yml ps
 Name        Command               State                                Ports                     
--------------------------------------------------------------------------------------------------
gitlab   /assets/wrapper   Up (health: starting)   0.0.0.0:23->22/tcp, 443/tcp, 0.0.0.0:80->80/tcp

访问web应用 http://192.168.1.21:80

服务启动需要一段时间,请耐心等待:

image-20220420200829560第一次使用gitlab登陆网页没有提示更改密码

[root@linux-bkce-node21 gitlab]# docker exec -it gitlab /bin/bash
jenkins@c162d594e8bd:/$ gitlab-rails console -e production   # 进入 GitLab 控制台
执行命令:user = User.where(id: 1).first          # 此 user 则表示 root 用户
执行命令:user.password = '12345678'               # 修改密码, 
执行命令:user.password_confirmation = '12345678'  # 确认密码
执行命令: user.save!
执行命令: exit

image-20220421093225913

Devops编排-svn

创建数据存放目录

mkdir -p /data/devops-compose/svn/
chmod 777 /data/devops-compose/svn/

创建一个应用的配置文件

version: "3"
services:
  svn:
    image: garethflowers/svn-server
    container_name: svn
    restart: always
    ports:
      - 3690:3690
    volumes:
      - /data/devops-compose/svn/:/var/opt/svn

启动容器应用

cd /root/devops-d/svn/
docker-compose -f svn.yml up -d

检查是否启动

# docker-compose -f svn.yml ps
Name              Command                       State                   Ports         
--------------------------------------------------------------------------------------
svn    /usr/bin/svnserve --daemon ...   Up (health: starting)   0.0.0.0:3690->3690/tcp

创建版本库

svnadmin create /var/opt/svn/demo

Devops编排-jenkins

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成 [1]

创建数据存放目录

mkdir -p /data/devops-compose/jenkins
chmod 777 /data/devops-compose/jenkins

创建一个应用的配置文件

version: "3"
services:
  jenkins:
    image: jenkins/jenkins
    container_name: jenkins
    restart: always
    ports:
      - '8080:8080'
      - '50000:50000'
    volumes:
      - /data/devops-compose/jenkins:/var/jenkins_home:z

启动容器应用

cd /root/devops-d/jenkins/
docker-compose -f jenkins.yml up -d

检查是否启动

# docker-compose -f jenkins.yml ps
 Name                Command               State                        Ports                      
---------------------------------------------------------------------------------------------------
jenkins   /sbin/tini -- /usr/local/b ...   Up      0.0.0.0:50000->50000/tcp, 0.0.0.0:8080->8080/tcp

访问web应用 http://192.168.1.21:8080/

服务启动需要一段时间,请耐心等待:

image-20220421092253316

解锁jenkins密码获取方式:

[root@linux-bkce-node21 ~]# cat /usr/local/src/jenkins/secrets/initialAdminPassword 
22f6d483640842459d111234acb932c5

选择暂时不安装任何插件

image-20220421092400738

设置jenkins帐户密码 admin/admin

image-20220421092444399

最终登录jenkins

image-20220421092507273

Devops编排-nexus

Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用Nexus你可以只在一个地方就能够完全控制访问 和部署在你所维护仓库中的每个Artifact。Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。Nexus 使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过m2eclipse与Eclipse集成使用。Nexus支持WebDAV与LDAP安全身份认证

创建数据存放目录

mkdir -p /data/devops-compose/nexus/nexus-data
chmod 777 /data/devops-compose/nexus/nexus-data

创建一个应用的配置文件

version: "3"
services:
  nexus:
    image: sonatype/nexus3
    container_name: nexus3
    restart: always
    ports:
      - 8081:8081
    volumes:
      - /data/devops-compose/nexus/nexus-data:/nexus-data

启动容器应用

cd /root/devops-d/nexus/
docker-compose -f nexus.yml up -d

检查是否启动

# docker-compose -f nexus.yml ps
 Name               Command               State           Ports         
------------------------------------------------------------------------
nexus3   sh -c ${SONATYPE_DIR}/star ...   Up      0.0.0.0:8081->8081/tcp

访问web应用 http://192.168.1.21:8081

服务启动需要一段时间,请耐心等待:

image-20220420200847288

获取登录密码

# cat /data/devops-compose/nexus/nexus-data/admin.password 
628a6294-caa3-42f5-b7c8-dcfba383a4f9

登陆后需要修改密码: 628a6294-caa3-42f5-b7c8-dcfba383a4f9123456

Devops编排-sonarqube

Sonar(SonarQube)是一个开源平台,用于管理源代码的质量。Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。支持的语言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex 等。

https://gitee.com/uncordon/sonarqube-docker-compose/blob/master/docker-compose.yaml

Linux在启动时报错显示max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

分析:报错原因是因为虚拟内存太低,所以我们的解决办法是增加虚拟内存。

解决办法: 使用命令打开修改虚拟内存的文件

vi /etc/sysctl.conf
在打开的文件中设置虚拟内存(后面的数可以设置的更大点)
vm.max_map_count=262144

使设置的虚拟内存生效

 sysctl -p

创建数据存放目录

mkdir -p /data/devops-compose/sonarqube/data
mkdir -p /data/devops-compose/sonarqube/logs
mkdir -p /data/devops-compose/sonarqube/extensions
mkdir -p /data/devops-compose/sonarqube/postgresql/data
chmod 777 -R /data/devops-compose/sonarqube

创建一个应用的配置文件

version: "3"
services:
  sonar:
    image: sonarqube:lts-community
    depends_on:
      - db
    restart: always
    ports:
      - "9000:9000"
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
      - /data/devops-compose/sonarqube/data:/opt/sonarqube/data
      - /data/devops-compose/sonarqube/logs:/opt/sonarqube/logs
      - /data/devops-compose/sonarqube/extensions:/opt/sonarqube/extensions
      - /etc/localtime:/etc/localtime:ro
    networks:
      - sonar-network

  db:
    image: postgres:12
    restart: always
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
    volumes:
      - /data/devops-compose/sonarqube/postgresql:/var/lib/postgresql
      - /data/devops-compose/sonarqube/postgresql/data:/var/lib/postgresql/data
    networks:
      - sonar-network

networks:
  sonar-network:

volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:
  postgresql:
  postgresql_data:

启动容器应用

cd /root/devops-d/sonarqube/
docker-compose -f sonarqube.yml up -d

检查是否启动

# docker-compose -f sonarqube.yml ps
    Name                  Command              State           Ports         
-----------------------------------------------------------------------------
root_db_1      docker-entrypoint.sh postgres   Up      5432/tcp              
root_sonar_1   bin/run.sh bin/sonar.sh         Up      0.0.0.0:9000->9000/tcp

访问web应用 http://192.168.1.21:9000/

现在先要用 admin/admin 登录,刚进入的时候会提示修改密码,我们修改为 123456即可

image-20220420213157459

Devops编排-zentao

禅道 项目管理软件 是国产的开源项目管理软件,专注研发项目管理,内置需求管理、任务管理、bug管理、缺陷管理、用例管理、计划发布等功能,实现了软件的完整生命周期管理。

创建数据存放目录

mkdir -p /data/devops-compose/zentao/opms
mkdir -p /data/devops-compose/zentao/mysql
chmod 777 /data/devops-compose/zentao

创建一个应用的配置文件

version: "3"
services:
  zentao:
    image: easysoft/zentao
    container_name: zentao
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    ports:
      - 9001:80
    volumes:
      - /data/devops-compose/zentao/opms:/www/zentaopms
      - /data/devops-compose/zentao/mysql:/var/lib/mysql

启动容器应用

cd /root/devops-d/zentao/
docker-compose -f zentao.yml up -d

检查是否启动

# docker-compose -f zentao.yml ps
 Name        Command        State          Ports        
--------------------------------------------------------
zentao   /.docker_init.sh   Up      0.0.0.0:9001->80/tcp

访问web应用 http://192.168.1.21:9001/ 会提示修改密码,修改为 a1! a1! a1! a1! a1!

image-20220421110643228

Devops编排-redmine

Redmine 是一个开源的、基于Web的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及进度可视化显示。同时它又支持多项目管理。Redmine是一个自由开放 源码软件解决方案,它提供集成的项目管理功能,问题跟踪,并为多个版本控制选项的支持。

https://gitee.com/mirrors_sameersbn/docker-redmine/tree/master

https://gitee.com/mirrors_sameersbn/docker-redmine/blob/master/docker-compose.yml

创建数据存放目录

mkdir -p /data/devops-compose/redmine/data
mkdir -p /data/devops-compose/redmine/redmine-logs
mkdir -p /data/devops-compose/redmine/postgresql
chmod 777 -R /data/devops-compose/redmine

创建一个应用的配置文件

version: '2'

services:
  postgresql:
    image: sameersbn/postgresql:9.6-4
    environment:
    - DB_USER=redmine
    - DB_PASS=password
    - DB_NAME=redmine_production
    volumes:
    - /data/devops-compose/redmine/postgresql:/var/lib/postgresql

  redmine:
#    build: ./
    image: sameersbn/redmine
    depends_on:
    - postgresql
    environment:
    - TZ=Asia/Kolkata

    - DB_ADAPTER=postgresql
    - DB_HOST=postgresql
    - DB_PORT=5432
    - DB_USER=redmine
    - DB_PASS=password
    - DB_NAME=redmine_production
    - DB_SSL_MODE=prefer

    - REDMINE_PORT=10083
    - REDMINE_HTTPS=false
    - REDMINE_RELATIVE_URL_ROOT=
    - REDMINE_SECRET_TOKEN=

    - REDMINE_SUDO_MODE_ENABLED=false
    - REDMINE_SUDO_MODE_TIMEOUT=15

    - REDMINE_CONCURRENT_UPLOADS=2

    - REDMINE_BACKUP_SCHEDULE=
    - REDMINE_BACKUP_EXPIRY=
    - REDMINE_BACKUP_TIME=

    - SMTP_ENABLED=false
    - SMTP_METHOD=smtp
    - SMTP_DOMAIN=www.example.com
    - SMTP_HOST=smtp.gmail.com
    - SMTP_PORT=587
    - SMTP_USER=mailer@example.com
    - SMTP_PASS=password
    - SMTP_STARTTLS=true
    - SMTP_AUTHENTICATION=:login

    - IMAP_ENABLED=false
    - IMAP_HOST=imap.gmail.com
    - IMAP_PORT=993
    - IMAP_USER=mailer@example.com
    - IMAP_PASS=password
    - IMAP_SSL=true
    - IMAP_INTERVAL=30

    ports:
    - "3000:80"
    volumes:
    - /data/devops-compose/redmine/data:/home/redmine/data
    - /data/devops-compose/redmine/redmine-logs:/var/log/redmine

启动容器应用

cd /root/devops-d/redmine/
docker-compose -f redmine.yml up -d

检查是否启动

# docker-compose -f redmine.yml  ps
           Name                          Command              State               Ports             
----------------------------------------------------------------------------------------------------
docker-redmine_postgresql_1   /sbin/entrypoint.sh             Up      5432/tcp                      
docker-redmine_redmine_1      /sbin/entrypoint.sh app:start   Up      443/tcp, 0.0.0.0:10083->80/tcp

访问web应用 http://192.168.1.21:3000/

默认账号和密码 admin admin ,修改后的密码 12345678

image-20220420214712514