docker 安装mysql_使用docker安装mysql等各类服务

前言

大致说来,docker的作用如下

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

如果想要简单使用,可以看答主的这一片文章:

番茄番茄我是西瓜:Docker入门​zhuanlan.zhihu.com
e3b51cd473e194620ec4f774fdde1e13.png

应用安装

  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

常见参数 - 强制参数 1. MYSQL_ROOT_PASSWORD=root

将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

安装界面

首先是

数据库设置

e65d781cb64f3b0a55e34ae9cf7559ce.png

直接看到数据库名称

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

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

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

填写数据库的用户密码

9fa8d0abc2caad83c12161851693f57a.png

接下来是应用基本设置

7a56c3e0994b412bf66637fcd63ab03b.png

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

5577396e2f15fddd25b592eac2fb919a.png

接下来修改url

d081e7bea977fe5a2c818129d686c373.png

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

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

c28132764d9399b66a46c020f2845ae4.png

接下来就是可选设置部分

邮件服务设置不管

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

3388eb1f1fa1ab00b72ee9623cb61fc8.png

取消勾选 启用验证码服务

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

e150912badb27072664ade3ed15d2d92.png

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

点开管理员帐号设置

507893764d77b60e7b161d4bf30a3ccd.png

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

e617b9941881b9b3c918e0cee593027e.png

大功告成,点击立即安装

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&amp;characterEncoding=UTF8&amp;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 

正在更新中...

制作不易

eecd957f034fcc457ee02488fbb61d28.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值