前言

大致说来,docker的作用如下

绝大部分应用,开发者都可以通过docker build创建镜像,通过docker push上传镜像,用户通过docker pull下载镜像,用docker run运行应用。用户不需要再去关心如何搭建环境,如何安装,如何解决不同发行版的库冲突——而且通常不会需要消耗更多的硬件资源,不会明显降低性能。也就是实现了标准化、集装箱


docker 中部署mysql数据库自动被删除 docker部署mysql的好处_docker 安装mysql


应用安装

  1. mysql
  2. tomcat
  3. gogs
  4. jira
  5. clickhouse
  6. redis
  7. zookeeper
  8. kafka
  9. 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

安装界面

首先是

数据库设置


docker 中部署mysql数据库自动被删除 docker部署mysql的好处_jetbrain下载mysql驱动慢_02


直接看到数据库名称

我们需要有一个可以外部访问的数据库连接,并且有一个数据库,就用例子的名称->gogs,我们需要在数据库连接中新建一个叫gogs的数据库


如果您使用 MySQL,请使用 INNODB 引擎以及 utf8_general_ci 字符集


需要修改数据库主机ip,127.0.0.1改为数据库暴露的ip

填写数据库的用户密码


docker 中部署mysql数据库自动被删除 docker部署mysql的好处_jetbrain下载mysql驱动慢_03


接下来是应用基本设置


docker 中部署mysql数据库自动被删除 docker部署mysql的好处_jetbrain下载mysql驱动慢_04


修改域名为我们刚才的安装gogs的机器的ip


docker 中部署mysql数据库自动被删除 docker部署mysql的好处_mysql case默认_05


接下来修改url


docker 中部署mysql数据库自动被删除 docker部署mysql的好处_jetbrain下载mysql驱动慢_06


修改应用url的localhost为安装gogs机器的ip

注意,如果这里使用了docker做了端口映射,将3000改为映射的端口


docker 中部署mysql数据库自动被删除 docker部署mysql的好处_jetbrain下载mysql驱动慢_07


接下来就是可选设置部分

邮件服务设置不管

点开服务器和其他服务设置


docker 中部署mysql数据库自动被删除 docker部署mysql的好处_jetbrain下载mysql驱动慢_08


取消勾选 启用验证码服务

勾选 禁止用户自主注册 启动登录访问限制


docker 中部署mysql数据库自动被删除 docker部署mysql的好处_jetbrain下载mysql驱动慢_09


取消用户自主注册,那么一定意为着,我们需要一个超级用户,由超级用户创建帐号并分发

点开管理员帐号设置


docker 中部署mysql数据库自动被删除 docker部署mysql的好处_mysql case默认_10


输入基本信息,邮箱可以随便输入


docker 中部署mysql数据库自动被删除 docker部署mysql的好处_docker 安装mysql_11


大功告成,点击立即安装


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


正在更新中...