部署MySQL
部署
拉取mysql鏡像
docker pull mysql:5.7.33
準(zhǔn)備數(shù)據(jù)卷目錄
mkdir -p /usr/local/ProgramEnvir/mysql/docker_volume
cd /usr/local/ProgramEnvir/mysql/docker_volume
(可選)清空數(shù)據(jù)卷目錄:如果是刪除并創(chuàng)建新的mysql容器,需要?jiǎng)h除數(shù)據(jù)卷目錄的所以文件,因?yàn)橹暗拿艽a會(huì)被保留!
cd /usr/local/ProgramEnvir/mysql/docker_volume
rm -rf *
創(chuàng)建容器,設(shè)置端口映射、目錄映射
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(后)端口映射到宿主機(jī)的 3306(前)端口。
- -v $PWD/conf:/etc/mysql/conf.d:將宿主機(jī)當(dāng)前目錄下的conf/my.cnf(前)掛載到容器的配置目錄 /etc/mysql/my.cnf(后)
- -v $PWD/logs:/logs:將宿主機(jī)當(dāng)前目錄下的logs(前)目錄掛載到容器的日志目錄/logs(后)
- -v $PWD/data:/var/lib/mysql :將宿主機(jī)當(dāng)前目錄下的data(前)目錄掛載到容器的數(shù)據(jù)目錄/var/lib/mysql (后)
- -e MYSQL_ROOT_PASSWORD=root:初始化root用戶的密碼。
進(jìn)入容器,操作mysql
docker exec -it c_mysql /bin/bash
退出mysql容器,但容器繼續(xù)運(yùn)行
exit
測(cè)試:
修改配置
直接在conf目錄創(chuàng)建my.cnf文件
cd /usr/local/ProgramEnvir/mysql/docker_volume/conf
vim my.cnf
編輯如下內(nèi)容
[mysqld]
# 最大連接數(shù)
max_connections = 1000
保存后重啟mysql容器
docker restart c_mysql
報(bào)錯(cuò)解決1
以下報(bào)錯(cuò):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
這個(gè)錯(cuò)誤發(fā)生在mysql 5.7 版本及以上版本會(huì)出現(xiàn)的問題:mysql 5.7版本默認(rèn)的sql配置是sql_mode="ONLY_FULL_GROUP_BY"
,這個(gè)配置嚴(yán)格執(zhí)行了"SQL92標(biāo)準(zhǔn)"。簡單來說就是輸出的結(jié)果是叫target list,就是select后面跟著的字段,還有一個(gè)地方group by column,就是group by后面跟著的字段。由于開啟了ONLY_FULL_GROUP_BY的設(shè)置,所以如果一個(gè)字段沒有在target list 和group by字段中同時(shí)出現(xiàn),或者是聚合函數(shù)的值的話,那么這條sql查詢是被mysql認(rèn)為非法的,會(huì)報(bào)錯(cuò)誤。
解決:編輯配置文件my.cnf
cd /usr/local/ProgramEnvir/mysql/docker_volume/conf
vim my.cnf
添加如下配置項(xiàng):
# 解決報(bào)錯(cuò):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
設(shè)置端口映射、目錄映射
mkdir -p /usr/local/ProgramEnvir/tomcat/docker_volume
cd /usr/local/ProgramEnvir/tomcat/docker_volume
創(chuàng)建容器并運(yùn)行
docker run -d \
--name c_tomcat \
-p 8080:8080 \
-v $PWD/webapps:/usr/local/tomcat/webapps \
tomcat:8
- **-p 8080:8080:**將容器的8080端口(后)映射到宿主機(jī)的8080端口(前)
- **-v $PWD:/usr/local/tomcat/webapps:**將宿主機(jī)中當(dāng)前目錄(前)掛載到容器的webapps(后)
測(cè)試:瀏覽器訪問 http://192.168.124.128:8080
部署Nginx
拉取nginx鏡像
docker pull nginx:1.14.2
準(zhǔn)備數(shù)據(jù)卷目錄
mkdir -p /usr/local/ProgramEnvir/nginx/docker_volume
cd /usr/local/ProgramEnvir/nginx/docker_volume
初始化配置:
mkdir conf
vim conf/nginx.conf
在nginx.conf中粘貼下面內(nèi)容
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;
}
創(chuàng)建容器
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端口(后)映射到宿主機(jī)的80端口(前)
- -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:將主機(jī)當(dāng)前目錄下的/conf/nginx.conf(前)掛載到容器的配置目錄/etc/nginx/nginx.conf(后)
- -v $PWD/logs:/var/log/nginx:將主機(jī)當(dāng)前目錄下的logs(前)目錄掛載到容器的日志目錄/var/log/nginx(后)
測(cè)試:瀏覽器訪問 http://192.168.124.128:80
部署Redis
拉取redis鏡像
docker pull redis:6.2.6
創(chuàng)建容器并運(yùn)行:
docker run -d \
--name c_redis \
-p 6379:6379 \
redis:6.2.6 \
--requirepass root
-
--requirepass
要放在最后,用于指定redis密碼 -
修改現(xiàn)有redis容器的密碼:
# 進(jìn)入容器 docker exec -it c_redis /bin/bash # 進(jìn)入redis目錄 cd /usr/local/bin # 啟動(dòng)客戶端 ./redis-cli # 驗(yàn)證身份(如果之前設(shè)置過密碼) auth root # 修改密碼 config set requirepass 123abc # 查看是否修改成功 config get requirepass
測(cè)試
./redis-cli -h 192.168.149.135 -p 6379
部署MongoDB
拉取鏡像
docker pull mongo:5.0.5
準(zhǔn)備數(shù)據(jù)卷容器
mkdir -p /usr/local/ProgramEnvir/mongodb/docker_volume
cd /usr/local/ProgramEnvir/mongodb/docker_volume
創(chuàng)建容器并運(yùn)行
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
進(jìn)入容器
docker exec -it c_mongodb /bin/bash
設(shè)置認(rèn)證賬號(hào)
# 進(jìn)入admin數(shù)據(jù)庫
mongo
> use admin
# 添加管理員,其擁有管理用戶和角色的權(quán)限
> db.createUser({user: 'root', pwd: 'root', roles: [{role: "root", db: "admin"}]})
> exit
# 退出后進(jìn)行認(rèn)證
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
# 通過該用戶登錄進(jìn)行測(cè)試
mongo -u lzc -p root --authenticationDatabase admin
部署RabbitMQ
拉取鏡像
docker pull rabbitmq:3-management
(可選)也可以從本地加載mq鏡像:
docker load -i mq.tar
準(zhǔn)備數(shù)據(jù)卷目錄
mkdir -p /usr/local/ProgramEnvir/rabbitmq/docker_volume
cd /usr/local/ProgramEnvir/rabbitmq/docker_volume
創(chuàng)建容器并運(yùn)行
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
測(cè)試:瀏覽器訪問 http://192.168.124.128:15672
部署ElasticSearch
部署ES
創(chuàng)建網(wǎng)絡(luò):因?yàn)檫€需要部署kibana容器,因此需要讓es和kibana容器互聯(lián)。這里先創(chuàng)建一個(gè)網(wǎng)絡(luò):
docker network create es-net
加載鏡像:采用elasticsearch的7.12.1版本的鏡像,這個(gè)鏡像體積非常大,接近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 ./
將其上傳到虛擬機(jī)中,執(zhí)行命令加載鏡像壓縮包
docker load -i es.tar
創(chuàng)建容器并運(yùn)行:
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"
:設(shè)置集群名稱 -
-e "http.host=0.0.0.0"
:監(jiān)聽的地址,可以外網(wǎng)訪問 -
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
:內(nèi)存大小 -
-e "discovery.type=single-node"
:非集群模式 -
-v es-data:/usr/share/elasticsearch/data
:掛載邏輯卷,綁定es的數(shù)據(jù)目錄 -
-v es-logs:/usr/share/elasticsearch/logs
:掛載邏輯卷,綁定es的日志目錄 -
-v es-plugins:/usr/share/elasticsearch/plugins
:掛載邏輯卷,綁定es的插件目錄 -
--privileged
:授予邏輯卷訪問權(quán) -
--network es-net
:加入一個(gè)名為es-net的網(wǎng)絡(luò)中 -
-p 9200:9200
:端口映射配置
測(cè)試:在瀏覽器中輸入:http://192.168.124.128:9200 即可看到elasticsearch的響應(yīng)結(jié)果:
部署Kibana
將其上傳到虛擬機(jī)中,執(zhí)行命令加載鏡像壓縮包
docker load -i kibana.tar
創(chuàng)建容器并運(yùn)行
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
:加入一個(gè)名為es-net的網(wǎng)絡(luò)中,與elasticsearch在同一個(gè)網(wǎng)絡(luò)中 -
-e ELASTICSEARCH_HOSTS=http://c_es:9200"
:設(shè)置elasticsearch的地址,因?yàn)閗ibana已經(jīng)與elasticsearch在一個(gè)網(wǎng)絡(luò),因此可以用容器名c_es直接訪問elasticsearch -
-p 5601:5601
:端口映射配置
kibana啟動(dòng)一般比較慢,需要多等待一會(huì),可以通過命令docker logs -f kibana
查看運(yùn)行日志,當(dāng)查看到下面的日志,說明成功。此時(shí)在瀏覽器輸入地址訪問 http://192.168.124.128:5601,看到如下效果
安裝ik分詞器
在線安裝
# 進(jìn)入容器內(nèi)部
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
離線安裝
-
查看數(shù)據(jù)卷目錄:安裝插件需要知道elasticsearch的plugins目錄位置,而我們用了數(shù)據(jù)卷掛載,因此需要查看elasticsearch的數(shù)據(jù)卷目錄,通過下面命令查看:
docker volume inspect es-plugins
顯示結(jié)果如下,說明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容器的插件數(shù)據(jù)卷:
然后解壓,重命名為ok:
cd /var/lib/docker/volumes/es-plugins/_data unzip ik.zip
-
重啟容器
# 重啟容器 docker restart c_es # 查看es日志 docker logs -f c_es
-
測(cè)試:IK分詞器包含兩種模式,
-
ik_smart
:最少切分 -
ik_max_word
:最細(xì)切分
GET /_analyze { "analyzer": "ik_max_word", "text": "黑馬程序員學(xué)習(xí)java太棒了" }
-
部署nacos
拉取鏡像
docker pull nacos/nacos-server:1.4.0
創(chuàng)建容器并運(yùn)行文章來源:http://www.zghlxwxcb.cn/news/detail-831919.html
docker run -d \
--name c_nacos \
-p 8848:8848 \
-e MODE=standalone \
nacos/nacos-server:1.4.0
測(cè)試:瀏覽器訪問 http://192.168.124.128:8848/nacos,賬號(hào)密碼都是nacos文章來源地址http://www.zghlxwxcb.cn/news/detail-831919.html
到了這里,關(guān)于docker—常用應(yīng)用部署的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!