部署MySQL
部署
拉取mysql镜像
docker pull mysql:5.7.33
准备数据卷目录
mkdir -p /usr/local/ProgramEnvir/mysql/docker_volume
cd /usr/local/ProgramEnvir/mysql/docker_volume
(可选)清空数据卷目录:如果是删除并创建新的mysql容器,需要删除数据卷目录的所以文件,因为之前的密码会被保留!
cd /usr/local/ProgramEnvir/mysql/docker_volume
rm -rf *
创建容器,设置端口映射、目录映射
docker run -d \
--name c_mysql \
-p 3306:3306 \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7.33
- -p 3306:3306:将容器的3306(后)端口映射到宿主机的 3306(前)端口。
- -v $PWD/conf:/etc/mysql/conf.d:将宿主机当前目录下的conf/my.cnf(前)挂载到容器的配置目录 /etc/mysql/my.cnf(后)
- -v $PWD/logs:/logs:将宿主机当前目录下的logs(前)目录挂载到容器的日志目录/logs(后)
- -v $PWD/data:/var/lib/mysql :将宿主机当前目录下的data(前)目录挂载到容器的数据目录/var/lib/mysql (后)
- -e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码。
进入容器,操作mysql
docker exec -it c_mysql /bin/bash
退出mysql容器,但容器继续运行
exit
测试:
修改配置
直接在conf目录创建my.cnf文件
cd /usr/local/ProgramEnvir/mysql/docker_volume/conf
vim my.cnf
编辑如下内容
[mysqld]
# 最大连接数
max_connections = 1000
保存后重启mysql容器
docker restart c_mysql
报错解决1
以下报错:Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘bcdsystem.cities.city’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
这个错误发生在mysql 5.7 版本及以上版本会出现的问题:mysql 5.7版本默认的sql配置是sql_mode="ONLY_FULL_GROUP_BY"
,这个配置严格执行了"SQL92标准"。简单来说就是输出的结果是叫target list,就是select后面跟着的字段,还有一个地方group by column,就是group by后面跟着的字段。由于开启了ONLY_FULL_GROUP_BY的设置,所以如果一个字段没有在target list 和group by字段中同时出现,或者是聚合函数的值的话,那么这条sql查询是被mysql认为非法的,会报错误。
解决:编辑配置文件my.cnf
cd /usr/local/ProgramEnvir/mysql/docker_volume/conf
vim my.cnf
添加如下配置项:
# 解决报错:this is incompatible with sql_mode=only_full_group_by
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
重启mysql容器
docker restart c_mysql
部署Tomcat
拉取tomcat镜像
docker pull tomcat:8
设置端口映射、目录映射
mkdir -p /usr/local/ProgramEnvir/tomcat/docker_volume
cd /usr/local/ProgramEnvir/tomcat/docker_volume
创建容器并运行
docker run -d \
--name c_tomcat \
-p 8080:8080 \
-v $PWD/webapps:/usr/local/tomcat/webapps \
tomcat:8
- **-p 8080:8080:**将容器的8080端口(后)映射到宿主机的8080端口(前)
- **-v $PWD:/usr/local/tomcat/webapps:**将宿主机中当前目录(前)挂载到容器的webapps(后)
测试:浏览器访问 http://192.168.124.128:8080
部署Nginx
拉取nginx镜像
docker pull nginx:1.14.2
准备数据卷目录
mkdir -p /usr/local/ProgramEnvir/nginx/docker_volume
cd /usr/local/ProgramEnvir/nginx/docker_volume
初始化配置:
mkdir conf
vim conf/nginx.conf
在nginx.conf中粘贴下面内容
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
# tcp_nopush on;
keepalive_timeout 65;
# gzip on;
include /etc/nginx/conf.d/*.conf;
}
创建容器
docker run -d \
--name c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx:1.14.2
- -p 80:80:将容器的80端口(后)映射到宿主机的80端口(前)
- -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机当前目录下的/conf/nginx.conf(前)挂载到容器的配置目录/etc/nginx/nginx.conf(后)
- -v $PWD/logs:/var/log/nginx:将主机当前目录下的logs(前)目录挂载到容器的日志目录/var/log/nginx(后)
测试:浏览器访问 http://192.168.124.128:80
部署Redis
拉取redis镜像
docker pull redis:6.2.6
创建容器并运行:
docker run -d \
--name c_redis \
-p 6379:6379 \
redis:6.2.6 \
--requirepass root
-
--requirepass
要放在最后,用于指定redis密码 -
修改现有redis容器的密码:
# 进入容器 docker exec -it c_redis /bin/bash # 进入redis目录 cd /usr/local/bin # 启动客户端 ./redis-cli # 验证身份(如果之前设置过密码) auth root # 修改密码 config set requirepass 123abc # 查看是否修改成功 config get requirepass
测试
./redis-cli -h 192.168.149.135 -p 6379
部署MongoDB
拉取镜像
docker pull mongo:5.0.5
准备数据卷容器
mkdir -p /usr/local/ProgramEnvir/mongodb/docker_volume
cd /usr/local/ProgramEnvir/mongodb/docker_volume
创建容器并运行
docker run -d \
--name c_mongodb \
-p 27017:27017 \
-v $PWD/data:/data/db \
-v $PWD/logs:/var/log/mongodb \
-v $PWD/mongod.conf:/etc/mongod.conf \
mongo:5.0.5 \
--auth
进入容器
docker exec -it c_mongodb /bin/bash
设置认证账号
# 进入admin数据库
mongo
> use admin
# 添加管理员,其拥有管理用户和角色的权限
> db.createUser({user: 'root', pwd: 'root', roles: [{role: "root", db: "admin"}]})
> exit
# 退出后进行认证
mongo -u root -p root --authenticationDatabase admin
(可选)添加普通用户
mongo -u root -p root --authenticationDatabase admin
# 通过admin添加普通用户
> use admin
> db.createUser({user: 'lzc', pwd: 'root', roles: [{role: "readWrite", db: "articledb"}]});
> exit
# 通过该用户登录进行测试
mongo -u lzc -p root --authenticationDatabase admin
部署RabbitMQ
拉取镜像
docker pull rabbitmq:3-management
(可选)也可以从本地加载mq镜像:
docker load -i mq.tar
准备数据卷目录
mkdir -p /usr/local/ProgramEnvir/rabbitmq/docker_volume
cd /usr/local/ProgramEnvir/rabbitmq/docker_volume
创建容器并运行
docker run -d \
--name c_mq \
--hostname mq1 \
-p 15672:15672 \
-p 5672:5672 \
-v mq-plugins:/plugins \
-e RABBITMQ_DEFAULT_USER=root \
-e RABBITMQ_DEFAULT_PASS=root \
rabbitmq:3-management
测试:浏览器访问 http://192.168.124.128:15672
部署ElasticSearch
部署ES
创建网络:因为还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络:
docker network create es-net
加载镜像:采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大,接近1G。不建议自己pull。课前资料提供了镜像的tar包:
mkdir -p /usr/local/ProgramEnvir/elasticsearch
cd /usr/local/ProgramEnvir/elasticsearch
mv /home/lzc/ftpdir/es.tar ./
mv /home/lzc/ftpdir/kibana.tar ./
mv /home/lzc/ftpdir/ik.zip ./
将其上传到虚拟机中,执行命令加载镜像压缩包
docker load -i es.tar
创建容器并运行:
docker run -d \
--name c_es \
--privileged \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
elasticsearch:7.12.1
-
-e "cluster.name=es-docker-cluster"
:设置集群名称 -
-e "http.host=0.0.0.0"
:监听的地址,可以外网访问 -
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
:内存大小 -
-e "discovery.type=single-node"
:非集群模式 -
-v es-data:/usr/share/elasticsearch/data
:挂载逻辑卷,绑定es的数据目录 -
-v es-logs:/usr/share/elasticsearch/logs
:挂载逻辑卷,绑定es的日志目录 -
-v es-plugins:/usr/share/elasticsearch/plugins
:挂载逻辑卷,绑定es的插件目录 -
--privileged
:授予逻辑卷访问权 -
--network es-net
:加入一个名为es-net的网络中 -
-p 9200:9200
:端口映射配置
测试:在浏览器中输入:http://192.168.124.128:9200 即可看到elasticsearch的响应结果:
部署Kibana
将其上传到虚拟机中,执行命令加载镜像压缩包
docker load -i kibana.tar
创建容器并运行
docker run -d \
--name c_kibana \
--network=es-net \
-p 5601:5601 \
-e ELASTICSEARCH_HOSTS=http://c_es:9200 \
kibana:7.12.1
-
--network es-net
:加入一个名为es-net的网络中,与elasticsearch在同一个网络中 -
-e ELASTICSEARCH_HOSTS=http://c_es:9200"
:设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名c_es直接访问elasticsearch -
-p 5601:5601
:端口映射配置
kibana启动一般比较慢,需要多等待一会,可以通过命令docker logs -f kibana
查看运行日志,当查看到下面的日志,说明成功。此时在浏览器输入地址访问 http://192.168.124.128:5601,看到如下效果
安装ik分词器
在线安装
# 进入容器内部
docker exec -it elasticsearch /bin/bash
# 在线下载并安装
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
#退出
exit
#重启容器
docker restart elasticsearch
离线安装
-
查看数据卷目录:安装插件需要知道elasticsearch的plugins目录位置,而我们用了数据卷挂载,因此需要查看elasticsearch的数据卷目录,通过下面命令查看:
docker volume inspect es-plugins
显示结果如下,说明plugins目录被挂载到了
/var/lib/docker/volumes/es-plugins/_data
[ { "CreatedAt": "2022-05-06T10:06:34+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/es-plugins/_data", "Name": "es-plugins", "Options": null, "Scope": "local" } ]
-
解压缩分词器安装包:把课前资料中的ik分词器解压缩,并上传到es容器的插件数据卷:
然后解压,重命名为ok:
cd /var/lib/docker/volumes/es-plugins/_data unzip ik.zip
-
重启容器
# 重启容器 docker restart c_es # 查看es日志 docker logs -f c_es
-
测试:IK分词器包含两种模式,
-
ik_smart
:最少切分 -
ik_max_word
:最细切分
GET /_analyze { "analyzer": "ik_max_word", "text": "黑马程序员学习java太棒了" }
-
部署nacos
拉取镜像
docker pull nacos/nacos-server:1.4.0
创建容器并运行文章来源:https://www.toymoban.com/news/detail-831919.html
docker run -d \
--name c_nacos \
-p 8848:8848 \
-e MODE=standalone \
nacos/nacos-server:1.4.0
测试:浏览器访问 http://192.168.124.128:8848/nacos,账号密码都是nacos文章来源地址https://www.toymoban.com/news/detail-831919.html
到了这里,关于docker—常用应用部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!