大致说来,docker的作用如下
绝大部分应用,开发者都可以通过docker build创建镜像,通过docker push上传镜像,用户通过docker pull下载镜像,用docker run运行应用。
用户不需要再去关心如何搭建环境,如何安装,如何解决不同发行版的库冲突——而且通常不会需要消耗更多的硬件资源,不会明显降低性能。也就是实现了标准化、集装箱
文章比较长,想要搜寻特定的服务的docker安装,善用左侧目录
如果想要简单使用,可以看答主的这一片文章:
Docker入门_docker 用户组_繁星-赵老师的博客-CSDN博客
持续更新中 ...
笔墨不易,赠人玫瑰,手留余香
确定好安装哪一个mysql版本,5版本和8版本的驱动名称不同
1. 下载镜像
docker pull mysql:版本号
版本号: 一般是5.7或者8
5版本的安装比较简单, 不用手动即可远程访问
2. 创建应用容器docker run --name some-mysql -d -t -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:版本号
'my-secret-pw'是你设置的mysql的root用户的密码
如果需要配置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.7 --default_storage_engine=InnoDB --lower_case_table_names=1 --max_allowed_packet=50M --character-set-server=utf8mb4 --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
常见参数 - 强制参数 1. MYSQL_ROOT_PASSWORD=root
将mysql的root用户密码设置为root
mysql8版本的docker安装==========
docker pull mysql:8.0.18
docker run -di --name=mysql8 -p 3306:3306 -v /usr/local/tmp:/etc/mysql/tmp --privileged=true -e MYSQL_ROOT_PASSWORD=xxx mysql:8.0.18
docker exec -it mysql8 /bin/bash
mysql -uroot -pxxx
use mysql;
select host,user from user; 让root能远程连接,host修改为"%",如果是的就不用修改了
navicate for mysql 远程连接
use mysql;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
修改密码为用不过期
ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
修改密码并指定加密规则为 mysql_native_password
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
刷新权限
FLUSH PRIVILEGES;
这样就可以远程连接数据库了;
可选参数
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字符类型
--sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 在5.7版本默认有一个sql_mode里带有only_full_group_by的配置,这个配置强制要求在带有groupby的查询语句中,select的列必须在groupby的结果列之内,否则会失败,这个条件太严格,一般情况下不加,所以一般情况下是需要加上上面这个配置的.
如果想要查看完整的可配置参数,运行如下命令,记得将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
注意: 如果使用了数据卷映射数据文件, 此时mysql的大部分配置包括密码都是跟着数据文件走的,docker创建的命令不再起作用
应用(java)服务器
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原本含有的
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
从日志 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启动会从这个配置中读取数据库配置
在宿主机中新建配置文件
defaultDS
default
mysql
jdbc:mysql://10.2.132.13:3306/jira?useUnicode=true&characterEncoding=UTF8&sessionVariables=storage_engine=InnoDB
com.mysql.jdbc.Driver
root
root
20
20
30000
select 1
60000
300000
20
true
300
true
3
修改相关数据库配置
docker run -p 10909:8080 --name some-jira -d -e TZ='Asia/Shanghai' -v /my/conf: haxqer/jira
clickhouse在dockerhub的官网
docker run -dit --name some-clickhouse -e CLICKHOUSE_DB=test1 -e CLICKHOUSE_USER=root -e CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 -e CLICKHOUSE_PASSWORD=hexin -p 9000:9000 -p 8123:8123 clickhouse/clickhouse-server
用户名root,密码hexin,连接端口8123
在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 16379:6379 redis --requirepass "u}J#D=>MryWf" --appendonly yes
如果想要持久化redis中的数据,添加数据卷映射
docker run --name some-redis -d -it -v /your/host/want/store/redisdata/path:/data -p 16379:6379 redis --requirepass "u}J#D=>MryWf" --appendonly yes
docker pull zookeeper
docker network create app-bridge --driver bridge
docker run --name some-zookeeper --network app-bridge -e ALLOW_ANONYMOUS_LOGIN=yes -d -it -p 2181:2181 bitnami/zookeeper
注意: 此kafka的安装依赖与zookeeper的安装
#节点1
docker run -d --name=kafka2 \
-p 9092:9092 \
-e ALLOW_PLAINTEXT_LISTENER=yes \
-e KAFKA_CFG_ZOOKEEPER_CONNECT=110.42.246.145:2181 \
-e KAFKA_BROKER_ID=2 \
-e KAFKA_NODE_ID=2 \
-e KAFKA_ENABLE_KRAFT=false \
-e KAFKA_HEAP_OPTS="-Xmx180m -Xms180m" \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://110.42.246.145:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
bitnami/kafka
# 节点2
docker run -d --name=kafka3 \
-p 9093:9092 \
-e ALLOW_PLAINTEXT_LISTENER=yes \
-e KAFKA_CFG_ZOOKEEPER_CONNECT=81.70.199.213:2181 \
-e KAFKA_BROKER_ID=3 \
-e KAFKA_NODE_ID=3 \
-e KAFKA_ENABLE_KRAFT=false \
-e KAFKA_HEAP_OPTS="-Xmx180m -Xms180m" \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://81.70.199.213:9093 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
bitnami/kafka
ALLOW_PLAINTEXT_LISTENER=yes:允许使用PLAINTEXT侦听器
KAFKA_CFG_ZOOKEEPER_CONNECT:zookeeper集群地址,多节点,分割
KAFKA_BROKER_ID:节点id,用来指定 Kafka 集群中 broker 的唯一标识,默认值为 -1。如果没有设置,那么 Kafka会自动生成一个
KAFKA_ADVERTISED_LISTENERS:绑定公网 IP 供外部客户端使用
KAFKA_LISTENERS:绑定私网 IP 地址供 broker 间通信使用
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
docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube
注意: 保持服务器剩余内存足够,默认情况下,sonarqube大约占用1.5G内存
打开http://yourhost:900/,点击"Log in"
登录账号:admin 密码:admin
docker-compose.yml
version: "2.2"
services:
jobmanager:
image: flink:latest
ports:
- "18001:8081"
command: jobmanager
environment:
- |
FLINK_PROPERTIES=
jobmanager.rpc.address: jobmanager
taskmanager:
image: flink:latest
depends_on:
- jobmanager
command: taskmanager
scale: 1
environment:
- |
FLINK_PROPERTIES=
jobmanager.rpc.address: jobmanager
taskmanager.numberOfTaskSlots: 8
docker run --name some-postgres -p 5432:5432 -e POSTGRES_PASSWORD=postgres -d postgres
docker pull delron/fastdfs
docker run -d --network=host --name some-tracker -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker
#注意: 需要暴露22122端口 23000 否则下面的创建会有问题 8888端口也需要暴露 将来通过这个端口访问图片
#selton.cn替换成你的公网host或者局域网host
docker run -d --network=host --name some-storage -e TRACKER_SERVER=selton.cn:22122 -v /var/fdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage
在宿主机中执行如下命令
mkdir solrdata
sudo chmod 777 solrdata
docker run --name mall-solr -d -p 8983:8983 -v "$PWD/solrdata:/var/solr" solr:8
// 参数详解
run 运行容器
-d 后台运行
-p 容器端口和宿机端口映射
– name 容器名称
创建一个名为mall_core的核心
docker exec -it mall-solr bin/solr create_core -c mall_core
这个命令是在宿主机上执行的, 会让宿主机向容器发送一条指令
bin/solr create_core -c mall_core
这个指令,是使用solr的脚本, 创建一个名称为mall_core的核心
出现 Created new core ‘' 即创建
docker exec --user=root -it mall-solr bash
cp /opt/solr-8.10.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-8.10.1.jar /opt/solr-8.10.1/server/solr-webapp/webapp/WEB-INF/lib
在宿主机的solrdata中
vi /data/mall_core/conf/managed-schema
重启docker