前言
大致说来,docker的作用如下
绝大部分应用,开发者都可以通过docker build创建镜像,通过docker push上传镜像,用户通过docker pull下载镜像,用docker run运行应用。用户不需要再去关心如何搭建环境,如何安装,如何解决不同发行版的库冲突——而且通常不会需要消耗更多的硬件资源,不会明显降低性能。也就是实现了标准化、集装箱
应用安装
- mysql
- tomcat
- gogs
- jira
- clickhouse
- redis
- zookeeper
- kafka
- dubbo-admin
1. mysql
确定好安装哪一个mysql版本,5版本和8版本的驱动名称不同
1.1 默认配置安装
1. 下载镜像
docker pull mysql:版本号
版本号: 一般是5.6或者8
2. 创建应用容器 docker run --name some-mysql -d -t -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:版本号
'my-secret-pw'是你设置的mysql的root用户的密码
1.2 自定义配置安装
如果需要配置mysql的一些运行参数,可以参考下面的两种方式.
1. [推荐]带着配置参数创建应用容器
docker run --name some-mysql -d -t -p 3306:3306 -e 参数名称1=参数名称1的值 -e 参数名称2=参数名称2的值 mysql:版本号 --character-set-server=utf8mb4
例: docker run --name some-secret-mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.6 --default_storage_engine=InnoDB --lower_case_table_names=1 --max_allowed_packet=50M --character-set-server=utf8mb4
常见参数 - 强制参数
将mysql的root用户密码设置为root
- 可选参数
- MYSQL_DATABASE=mydb 在mysql容器创建之后,在mysql中新建一个名称为mydb的database
- MYSQL_USER=selton MYSQL_PASSWORD=seltonpassword 创建一个名为selton的mysql用户,并设置他的密码为seltonpassword,这个用户对所有由MYSQL_DATABASE参数创建出来的database具有管理员权限
- --character-set-server=utf8mb4 相当于我们在mysql的cnf配置文件中的一些键值对的配置,这里就是将character-set-server,也就是mysql创建默认字符集选为utf8mb4,如果使用navicat连接工具创建数据库,没有选择创建的数据库字符类型,将采用上面设置的utf8mb4字符类型
- 如果想要查看完整的可配置参数,运行如下命令,记得将tag替换成你下载的mysql版本
docker run -it --rm mysql:tag --verbose --help
2. 将本地的配置文件映射到应用容器中
docker run --name some-mysql
-p 3306:3306-v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
在容器的宿主机中新建这样一个配置文件my.cnf(名字就用这个),然后将/my/custom
替换成这个宿主机中的my.cnf配置文件所在的文件夹的绝对路径,这样mysql容器在创建的时候就会使用my.cnf中的所有配置来创建mysql,同样,这些在my.cnf中的配置,都可以使用-e 参数1=参数1的值
的方式来配置
附: mysql常见配置
port = 3306 #默认
pid-file = /data/mysql/mysql.pid
basedir = /usr/local/mysql/ #程序安装目录
symbolic-link = 0 #多客户访问同一数据库,该选项默认开启
tmpdir = /usr/local/mysql/tmp/ #此目录被 MySQL用来保存临时文件
open_files_limit = 65535 #打开时,和max_connections对比,取大数
datadir = /var/lib/mysql #数据库目录
log-error = /var/lib/mysql/error.log
slow_query_log=on #开启慢查询日志相关
long_query_time=2 #默认10秒
slow_query_log_file = /var/log/mysql/slow_query.log #慢查询日志路径
log-queries-not-using-indexes = 1 #记录没有使用索引的sql
socket=/var/lib/mysql/mysql.sock #该条配置需在[client]段同时配置
default_storage_engine=InnoDB
innodb_file_per_table = on #InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间
innodb_buffer_pool_size=4G #生产中要改,建议为操作系统内存的70%-80%,需重启服务生效
skip_name_resolve = on #忽略主机名解析,提高访问速度(注意配置文件中使用主机名将不能解析)
lower_case_table_names = 1 #忽略表单大小写
character-set-server=utf8mb4 #设定默认字符为utf8mb4
2. tomcat
应用(java)服务器
2.1 安装
1.下载镜像 docker pull tomcat:版本号
7,8,9版本现在较为常用
2.创建应用容器
如果你想测试一下,运行如下命令,访问ip:8080,你会访问到tomcat的首页
docker run --name some-tomcat -p 8080:8080 -d -t tomcat:版本号
不过,一般tomcat都是用来发布一个webapp的,所以,如果你想发布一个webapp,如下
如果你得到的是war,请解压为文件夹,然后将文件夹重命名为ROOT
docker run --name some-tomcat -p 8080:8080 -d -t -v /root/selton/mywebapp:/usr/local/tomcat/webapps tomcat:版本号
/root/selton/mywebapp, 这个文件夹里面有你的ROOT文件夹
自定义配置
如果你需要修改tomcat的conf目录的一些配置文件,需要将一份tomcat原本含有的
3. gogs
git私服
新建文件docker-compose.yml
输入内容
version: '2' services: Mysql: image: gogs/gogs:0.11.79 container_name: gogs ports: - "9876:22" - "9092:3000"
然后docker-compose up -d启动
访问本机ip:8080
这个设置
ports:
- "8070:22"
- "8080:3000"
将容器中的22,3000端口分别映射为了宿主机器的8070和8080端口
也就是,我们需要保证宿主机器,也就是本机,生成docker-compose.yml的机器的端口 8070和8080没有被占用
gogs采用的是在网页端配置 -- 值得借鉴
将3000端口用docker映射为80端口有风险问题 具体就是重启的时候报错 无法启动 bind 80 permission denied
此时ini配置文件里面的port其实应该是3000 然后docker将宿主机80映射到这个3000 而内部不应该是80
gogs docker版 配置文件路径 /data/gogs/conf/app.ini
https://github.com/gogs/gogs/issues/3503
安装界面
首先是
数据库设置
直接看到数据库名称
我们需要有一个可以外部访问的数据库连接,并且有一个数据库,就用例子的名称->gogs,我们需要在数据库连接中新建一个叫gogs的数据库
如果您使用 MySQL,请使用 INNODB 引擎以及 utf8_general_ci 字符集
需要修改数据库主机ip,127.0.0.1改为数据库暴露的ip
填写数据库的用户密码
接下来是应用基本设置
修改域名为我们刚才的安装gogs的机器的ip
接下来修改url
修改应用url的localhost为安装gogs机器的ip
注意,如果这里使用了docker做了端口映射,将3000改为映射的端口
接下来就是可选设置部分
邮件服务设置不管
点开服务器和其他服务设置
取消勾选 启用验证码服务
勾选 禁止用户自主注册 启动登录访问限制
取消用户自主注册,那么一定意为着,我们需要一个超级用户,由超级用户创建帐号并分发
点开管理员帐号设置
输入基本信息,邮箱可以随便输入
大功告成,点击立即安装
version: '2'
services:
Mysql:
image: mysql:5.6
container_name: gogsMysql5.6
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
volumes:
- /root/gogs/mysqlConf:/etc/mysql/conf.d
- /root/gogs/createSh:/docker-entrypoint-initdb.d
Gogs:
depends_on:
- Mysql
image: gogs/gogs:0.11.79
container_name: gogs
ports:
- "8070:22"
- "8080:3000"
volumes:
- /var/gogs:/data
4. jira
从日志 2019-12-09 10:25:49,214 JIRA-Bootstrap INFO [c.a.j.config.database.SystemDatabaseConfigurationLoader] Reading database configuration from /var/jira/dbconfig.xml
可以看到jira启动会从这个配置中读取数据库配置
在宿主机中新建配置文件
<?xml version="1.0" encoding="UTF-8"?>
<jira-database-config>
<name>defaultDS</name>
<delegator-name>default</delegator-name>
<database-type>mysql</database-type>
<jdbc-datasource>
<url>jdbc:mysql://10.2.132.13:3306/jira?useUnicode=true&characterEncoding=UTF8&sessionVariables=storage_engine=InnoDB
</url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<username>root</username>
<password>root</password>
<!--以下参数可以不用配置 -->
<pool-min-size>20</pool-min-size>
<pool-max-size>20</pool-max-size>
<pool-max-wait>30000</pool-max-wait>
<validation-query>select 1</validation-query>
<min-evictable-idle-time-millis>60000</min-evictable-idle-time-millis>
<time-between-eviction-runs-millis>300000
</time-between-eviction-runs-millis>
<pool-max-idle>20</pool-max-idle>
<pool-remove-abandoned>true</pool-remove-abandoned>
<pool-remove-abandoned-timeout>300</pool-remove-abandoned-timeout>
<pool-test-while-idle>true</pool-test-while-idle>
<validation-query-timeout>3</validation-query-timeout>
</jdbc-datasource>
</jira-database-config>
修改相关数据库配置
docker run -p 10909:8080 --name some-jira -d -e TZ='Asia/Shanghai' -v /my/conf: haxqer/jira
5. clickhouse
clickhouse在dockerhub的官网
docker run -d --name some-clickhouse --ulimit nofile=262144:262144 -p 0.0.0.0:8123:8123 -p 0.0.0.0:9000:9000 yandex/clickhouse-server
6. redis
在Reids 4.x之后,Redis新增了模块功能特性,通过外部拓展,可以实现新的Redis命令,通过写c语言并编译出.so文件,可实 现代码执行漏洞。
针对未 授权或弱口令的Redis服务,攻击者通过构造特定请求,成功利用漏洞可在目标服务器上执行任意命令,风险极大。攻击者常常使用这个漏洞将用户的服务器变为"肉鸡","矿机"
修复的方式有很多种, 最有效的方式是redis仅在内网环境中使用,最简单的方式是redis连接的时候指定密码
下面是docker创建redis容器并指定密码
尽管现在已经有了6.x版本,但是它是redis有史以来最大的一个版本,所以即使它是稳定的,也要小心,在投入生产之前测试工作负载
docker pull redis
docker run --name some-redis -d -it -p 6379:6379 redis --requirepass "u}J#D=>MryWf"
7. zookeeper
docker pull zookeeper
docker run --name some-zookeeper -d -it -p 2181:2181 zookeeper
8. kafka
docker run --name some-kafka -d -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=selton.cn:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://selton.cn:9092 -e KAFKA_HEAP_OPTS="-Xmx256M -Xms128M" -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka
9. dubbo-admin
docker run --name some-dubbo-admin -p 8080:8080 -d -it -e admin.registry.address=zookeeper://selton.cn:2181 -e admin.config-center=zookeeper://selton.cn:2181 -e admin.metadata-report.address=zookeeper://selton.cn:2181 apache/dubbo-admin
正在更新中...