10-Docker编排工具¶
编排工具说明¶
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
我们可以尝试打开浏览器访问应用
其他方式
[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
- 访问wordpress应用 http://192.168.1.21:8000/
5.访问首页
清理环境
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/
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
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
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
服务启动需要一段时间,请耐心等待:
第一次使用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
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/
服务启动需要一段时间,请耐心等待:
解锁jenkins密码获取方式:
[root@linux-bkce-node21 ~]# cat /usr/local/src/jenkins/secrets/initialAdminPassword
22f6d483640842459d111234acb932c5
选择暂时不安装任何插件
设置jenkins帐户密码 admin/admin
最终登录jenkins
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
服务启动需要一段时间,请耐心等待:
获取登录密码
# 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即可
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!
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