Docker常用服务安装
1. 安装mysql
到docker hub上搜索mysql镜像,查看镜像的信息
拉取mysql镜像到本地
docker pull mysql:tag (tag不加默认最新版本)
运行mysql服务
在启动mysql的时候,不能直接使用run直接启动
1
2
3
4
5
6
7
8
9
10
11
12
13[root@localhost ~]# docker run -d --name mysql -p 3307:3306 mysql:5.7.33
78edf58974fa8ff51d495e47a2b4fe74c06927d99a6df3d191a9d6491529561a
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78edf58974fa mysql:5.7.33 "docker-entrypoint.s…" 30 seconds ago Exited (1) 29 seconds ago mysql
[root@localhost ~]# docker logs -f 78edf58974fa
2021-02-10 15:50:55+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.33-1debian10 started.
2021-02-10 15:50:55+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2021-02-10 15:50:55+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.33-1debian10 started.
2021-02-10 15:50:55+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
没有暴露外部端口外部不能连接:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:tag
- -e MYSQL_ROOT_PASSWORD=root 代表给root用户指定密码
没有暴露外部端口:
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:tag
1
2
3
4
5[root@localhost ~]# docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:5.7.33
969cafcd737bdafd3d59d9a55db71757d4a1dec32915aac7c1d2f756585c3bb0
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
969cafcd737b mysql:5.7.33 "docker-entrypoint.s…" 3 seconds ago Up 3 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql这时我们看到,mysql服务已经成功启动了,这时我们使用mysql连接工具连接便可以使用mysql了
进入mysql容器
docker exec -it 容器名称|容器id bash
外部查看mysql日志
docker logs 容器名称|容器id
使用自定义配置参数
docker run -d --name mysql -v /root/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root mysql:tag
/etc/mysql/conf.d
or/etc/mysql/mysql.conf.d
容器中mysql自定义配置文件存放,需要进入容器确认是具体哪个文件-v
定义数据卷配置与容器中配置文件映射
1
2
3
4
5
6
7
8
9
10[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d27fbf87ce4 mysql:5.7.33 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
[root@localhost ~]# docker exec -it 2d27fbf87ce4 bash
root@2d27fbf87ce4:/# ls
bin dev entrypoint.sh home lib64 mnt proc run srv tmp var
boot docker-entrypoint-initdb.d etc lib media opt root sbin sys usr
root@2d27fbf87ce4:/# cd /etc/mysql/
root@2d27fbf87ce4:/etc/mysql# ls
conf.d my.cnf my.cnf.fallback mysql.cnf mysql.conf.d
将容器数据位置与宿主机位置挂载保证数据安全
docker run -d --name mysql -v /root/mysql/data:/var/lib/mysql -v /root/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:tag
-v /root/mysql/data
将宿主机的绝对路径挂载到容器内存放数据目录/var/lib/mysql
docker run -d --name mysql -v mysqldata:/var/lib/mysql -v mysqlconfig:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:tag
-v mysqldata
自动创建名为mysqldata数据卷并挂载容器内存放数据目录/var/lib/mysql-v mysqlconfig
自动创建名为mysqlconfig数据卷并挂载容器内配置文件目录/etc/mysql(该目录下全部内容)
- 注意:在docker hub查看mysql描述信息得知mysql存储数据文件目录放置在容器这个目录/var/lib/mysql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24[root@localhost ~]# docker run -d --name mysql -v mysqldata:/var/lib/mysql -v mysqlconfig:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:5.7.33
91bc99c6586a4bbf393780d74f50ef2efdca56cbf471053bab6347b91b7d2386
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local info
local mysqlconfig
local mysqldata
# 查看数据卷详情,查看挂载宿主机的配置目录地址
[root@localhost ~]# docker volume inspect mysqlconfig
[
{
"CreatedAt": "2021-02-11T00:52:09+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/mysqlconfig/_data",
"Name": "mysqlconfig",
"Options": null,
"Scope": "local"
}
]
# 进入目录查看配置文件,我们修改该目录的配置文件即可
[root@localhost ~]# cd /var/lib/docker/volumes/mysqlconfig/_data
[root@localhost _data]# ls
conf.d my.cnf my.cnf.fallback mysql.cnf mysql.conf.d
将mysql数据库备份为sql文件
- 导出全部数据:
docker exec mysql|容器id sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql
- 导出指定库数据:
docker exec mysql sh -c 'exec mysqldump --databases 库表 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql
- 导出指定库数据不要数据:
docker exec mysql sh -c 'exec mysqldump --no-data --databases 库表 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql
- 导出全部数据:
执行sql文件到mysql中
docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /root/xxx.sql
2. 安装Redis服务
在docker search搜索redis镜像
docker search redis
拉取redis镜像到本地
docker pull redis
启动redis服务运行容器
- 没有暴露外部端口:
docker run --name redis -d redis:tag
- 暴露外部宿主机端口为6379进行连接:
docker run --name redis -p 6379:6379 -d redis:tag
1
2
3
4
5
6
7[root@localhost ~]# docker run --name redis -p 6379:6379 -d redis:latest
89cd4e83cdcea1a09d1787b69c45ddd5b77416c0bba0290bb92095c9b1e49465
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89cd4e83cdce redis:latest "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 0.0.0.0:6379->6379/tcp redis
12674e8ddf28 tomcat "catalina.sh run" 2 hours ago Up 2 hours 0.0.0.0:8080->8080/tcp tomcat
91bc99c6586a mysql:5.7.33 "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql我们已经看到redis已经启动成功了,我们这是可以用工具连接一下:
- 没有暴露外部端口:
查看启动日志
docker logs -t -f 容器id|容器名称
进入容器内部查看
docker exec -it 容器id|容器名称 bash
1
2
3
4
5
6[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89cd4e83cdce redis:latest "docker-entrypoint.s…" 21 minutes ago Up 21 minutes 0.0.0.0:6379->6379/tcp redis
[root@localhost ~]# docker exec -it 89cd4e83cdce bash
root@89cd4e83cdce:/data# ls
root@89cd4e83cdce:/data#进入容器后,只有一个空的data目录
开启redis持久化
docker run --name redis -d -p 6379:6379 -v redisdata:/data redis:latest redis-server --appendonly yes
- 注意:一旦开启持久化之后,持久化生成aof文件会被放入容器中/data目录中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[root@localhost ~]# docker run --name redis -d -p 6379:6379 -v redisdata:/data redis:latest redis-server --appendonly yes
8a90b7c4bab8ebce8ec39f8f70a23d288f7f4991f661ef9e1fa47b084afae8e6
[root@localhost ~]# docker volume inspect redisdata
[
{
"CreatedAt": "2021-02-11T03:07:35+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/redisdata/_data",
"Name": "redisdata",
"Options": null,
"Scope": "local"
}
]
[root@localhost ~]# cd /var/lib/docker/volumes/redisdata/_data
[root@localhost _data]# ls
appendonly.aof
加载外部自定义配置启动redis容器
- 默认情况下redis官方镜像中没有redis.conf配置文件 需要去官网下载指定版本的配置文件Redis官网
- wget https://download.redis.io/releases/redis-6.0.10.tar.gz 下载官方安装包
- 将官方安装包中配置文件进行复制到宿主机指定目录中如 /root/redis/redis.conf文件
- 修改需要自定义的配置
- bind 0.0.0.0 开启远程权限 – 搜索/bind
- appenonly yes 开启aof持久化
- 加载配置启动
docker run --name redis -v /root/redis:/usr/local/etc/redis -p 6379:6379 -d redis:latest redis-server /usr/local/etc/redis/redis.conf
- 注意:当前/root/redis目录中存在redis.conf文件的
- 默认情况下redis官方镜像中没有redis.conf配置文件 需要去官网下载指定版本的配置文件Redis官网
将数据目录挂在到本地保证数据安全
docker run --name redis -v /root/redis/data:/data -v /root/redis/redis.conf:/usr/local/etc/redis/redis.conf -p 6379:6379 -d redis redis-server /usr/local/etc/redis/redis.conf
3. 安装Nginx
在docker search搜索nginx
docker search nginx
拉取nginx镜像到本地
docker pull nginx
启动nginx容器
docker -d run -p 80:80 --name nginx nginx
进入nginx容器
docker exec -it nginx /bin/bash
- 查找目录: whereis nginx
- 配置文件: /etc/nginx/nginx.conf
1
2
3
4
5
6
7
8[root@localhost ~]# docker run -d --name nginx -p 80:80 nginx
7d39100c58ac38e7509c7dfe855ae0d1b10d4a469d4e2eaa83222b8f79fb9603
[root@localhost ~]# docker exec -it nginx bash
root@7d39100c58ac:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@7d39100c58ac:/# cd /etc/nginx
root@7d39100c58ac:/etc/nginx# ls
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
复制配置文件到宿主机
docker cp nginx(容器id|容器名称):/etc/nginx/nginx.conf 宿主机目录
1
2
3
4
5
6[root@localhost ~]# docker cp nginx:/etc/nginx/nginx.conf /root/nginx/
[root@localhost ~]# cd nginx/
[root@localhost nginx]# pwd
/root/nginx
[root@localhost nginx]# ls
nginx.conf
挂在nginx配置以及html到宿主机外部
docker run -d --name nginx -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/html:/usr/share/nginx/html -p 80:80 nginx
4. 安装Tomcat
- 在docker search搜索tomcat
docker search tomcat
- 下载tomcat镜像
docker pull tomcat:tag (tag不加默认最新版本)
- 运行tomcat镜像
docker run -d -p 8080:8080 --name tomcat tomcat
- 进入tomcat容器
docker exec -it tomcat /bin/bash
- 将webapps目录挂载在宿主机
docker run -d -p 8080:8080 -v webapps:/usr/local/tomcat/webapps --name tomcat tomcat
-v webapps
将部署应用目录通过数据卷挂载宿主机系统- 注意:部署web应用在容器中目录为/usr/local/tomcat/webapps,配置文件/usr/local/tomcat/conf
- 修改配置文件,并将应用目录通过数据卷挂载到宿主机
docker run -d -p 8080:8080 --name tomcat -v webapps:/usr/local/tomcat/webapps -v confs:/usr/local/tomcat/conf tomcat
1 | [root@localhost ~]# docker search tomcat |
5. 安装MongoDB数据库
docker search mongo搜索mongo镜像
下载并运行mongo
- 无需权限:
docker run -d -p 27017:27017 --name mongo mongo
- 常见具有的权限:
docker run -d -p 27017:27017 --name mongo mongo --auth
- 无需权限:
进入容器配置用户名密码
docker exec -it mongo /bin/bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44[root@localhost ~]# docker exec -it mongo bash
root@2134279b5c49:/# mongo
MongoDB shell version v4.4.3
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("8878de79-9548-42f6-8fd8-2dec9608fdd9") }
MongoDB server version: 4.4.3
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
https://community.mongodb.com
---
The server generated these startup warnings when booting:
2021-02-10T22:31:51.760+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2021-02-10T22:31:51.760+00:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
2021-02-10T22:31:51.760+00:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'
---
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
> use admin
switched to db admin
> db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]})
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
> exit
bye
root@2134279b5c49:/#use admin
选择admin库db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]})
创建用户,此用户创建成功,则后续操作都需要用户认证
将mongoDB中数据目录映射到宿主机中
docker run -d -p 27017:27017 -v mongodata:/data/db --name mongo mongo
6. 安装ElasticSearch
elasticsearch
- docker hub搜索镜像,选择6.8.13的版本安装
- 下载elasticsearch 6.8.13的镜像
docker pull elasticsearch:tag
- 运行elasticsearch的镜像
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
注意:elasticsearch在启动后,查看日志,会看到如下的警告
解决方案:
在centos虚拟机中,修改配置sysctl.conf
vim /etc/sysctl.conf
加入如下配置
vm.max_map_count=262144
启用配置
sysctl -p
1
2[root@localhost ~]# sysctl -p
vm.max_map_count = 262144之后重新启动es容器,再次查看日志就不会报错了,这是我们可以访问一下http://ip:9200 elasticsearch web页面
注意:这一步是为了防止启动容器时,报出如下错误:
bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
es中持久化方案
注意:es所有数据都在容器中的目录/usr/share/elasticsearch/data,配置信息都在容器中的目录/usr/share/elasticsearch/config
启动es,将数据信息和配置信息都挂载到宿主机中
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -v esdata:/usr/share/elasticsearch/data -v esconfig:/usr/share/elasticsearch/config elasticsearch:tag
安装IK分词器
现在对应版本的ik分词器
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.13/elasticsearch-analysis-ik-6.8.13.zip
es容器中插件目录/usr/share/elasticsearch/plugins,启动容器是挂载处理,并在挂载目录plugins中,解压elasticsearch-analysis-ik-6.8.13.zip
挂载plugins启动es:
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -v esdata:/usr/share/elasticsearch/data -v esconfig:/usr/share/elasticsearch/config -v esplugins:/usr/share/elasticsearch/plugins elasticsearch:tag
查看数据卷详细信息,找到挂载宿主机的目录:
docker volume inspectesplugins
将ik分词器,移动到挂载宿主机目录中,并解压
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20[root@localhost ~]# docker volume inspect esplugins
[
{
"CreatedAt": "2021-02-11T05:43:43+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/esplugins/_data",
"Name": "esplugins",
"Options": null,
"Scope": "local"
}
]
[root@localhost ~]# cd /var/lib/docker/volumes/esplugins/_data
[root@localhost _data]# mv /root/elasticsearch-analysis-ik-6.8.13.zip .
[root@localhost _data]# ls
elasticsearch-analysis-ik-6.8.13.zip
[root@localhost _data]# yum install unzip
[root@localhost _data]# mkdir ik
[root@localhost _data]# mv elasticsearch-analysis-ik-6.8.13.zip ik/
[root@localhost ik]# unzip elasticsearch-analysis-ik-6.8.13.zip
解压完成后,再次重启elasticsearch,查看日志
docker restart 容器id|容器名
docker logs -f 容器id|容器名
已经加载了插件ik分词器
自定义扩展词和停用词
修改ik配置文件,添加自定义扩展词和停用词
进入的配置文件:
1
2cd /var/lib/docker/volumes/esplugins/_data/ik/config
vim IKAnalyzer.cfg.xml
- 修改内容如下:
1
2
3
4
5
6
7
8
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">ext_dict.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">ext_stopwords.dic</entry>
</properties>
在ik分词器目录下config目录中创建ext_dict.dic文件 编码一定要为UTF-8才能生效
vim ext_dict.dic 加入扩展词即可
1
2
3
4
5
6
7
3. 在ik分词器目录下config目录中创建ext_stopword.dic文件
- ```bash
vim ext_stopwords.dic 加入停用词即可
重启容器生效
docker restart 容器id
将此容器提交成为一个新的镜像
docker commit -a="lvjing" -m="es with IKAnalyzer" 容器id lvjing/elasticsearch:tag
es的启动
注意:es是非常耗内存的,在启动es后,在Linux下输入命令反应就非常慢,则我们在启动es的时候,需要指定jvm内存大小启动
1 | [root@localhost ~]# docker stats |
kibana
docker hub搜索kibana镜像,要与elasticsearch版本一致
下载kibana镜像
docker pull kibana:tag
启动kibana,并连接es服务
docker run -d --name kibana -e ELASTICSEARCH_URL=http://ip:9200 -p 5601:5601 kibana:tag
启动kibana,加载配置文件
docker run -d --name kibana -e ELASTICSEARCH_URL=http://ip:9200 -p 5601:5601 -v kibanaconfig:/usr/share/kibana/config kibana:tag
- 注意:可以在kibanaconf数据卷所在的宿主机目录中加入kibana文件修改配置文件信息,则就不需要在启动命令指定连接的es服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31[root@localhost ~]# docker run -d --name kibana -p 5601:5601 -v kibanaconfig:/usr/share/kibana/config kibana:6.8.13
6af4b0da7090c347907240dbd124f69bdad6385e993bd67ef739d6a9ae1cb819
[root@localhost ~]# docker volume inspect kibanaconfig
[
{
"CreatedAt": "2021-02-11T06:22:43+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/kibanaconfig/_data",
"Name": "kibanaconfig",
"Options": null,
"Scope": "local"
}
]
[root@localhost ~]# cd /var/lib/docker/volumes/kibanaconfig/_data
[root@localhost _data]# ls
kibana.yml
[root@localhost _data]# vim kibana.yml
[root@localhost _data]# cat kibana.yml
#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.name: kibana
# 0 表示所有服务都可连
server.host: "0"
# 修改指定连接的es服务
elasticsearch.hosts: [ "http://192.168.1.115:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
[root@localhost ~]# docker restart 6af4b0da7090
启动成功后,浏览器访问http://ip:5601查看kibana页面