docker—常用应用部署

部署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

离线安装

  1. 查看数据卷目录:安装插件需要知道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"
        }
    ]
    
  2. 解压缩分词器安装包:把课前资料中的ik分词器解压缩,并上传到es容器的插件数据卷:

    在这里插入图片描述

    然后解压,重命名为ok:

    cd /var/lib/docker/volumes/es-plugins/_data
    unzip ik.zip
    
  3. 重启容器

    # 重启容器
    docker restart c_es
    # 查看es日志
    docker logs -f c_es
    
  4. 测试:IK分词器包含两种模式,

    • ik_smart:最少切分

    • ik_max_word:最细切分

    GET /_analyze
    {
        "analyzer": "ik_max_word",
        "text": "黑马程序员学习java太棒了"
    }
    

部署nacos

拉取镜像

docker pull nacos/nacos-server:1.4.0

创建容器并运行

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

  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值