Docker 入门 分别安装 Mysql Mongodb Redis Tomcat Nginx
2019-12-05
阅读 {{counts.readCount}}
评论 {{counts.commentCount}}
## 前言
上一篇入门以后,发现诸多问题
决定补补基础部分,从头再来一遍
先不用套餐了,一个一个单独啃
## 正文
### 先附上一些后面会用到的常用命令
#### docker 常用命令
```shell
# docker 容器运行进程和端口
docker ps -a
# docker 状态
docker stats
# 执行一个docker 镜像
docker run [imageId]
# 后台运行一个docker 镜像
docker run -d [imageId]
# 指定端口运行一个docker镜像(前面是宿主机端口,后面是容器端口)
docker run -p 13306:3306 [imageId]
# 限制内存 100M 禁止内存溢出时杀死进程 允许且不限制使用交换区
docker run -m 100M --oom-kill-disable --memory-swap=-1 [imageId]
```
#### docker 容器的开机自启动
其中最后一个参数,对应的是container中的name
```shell
docker update --restart=always redis
docker update --restart=always mysql
docker update --restart=always mongo
```
#### docker images 镜像
```shell
docker images
# 如果存在的话 清除之,id用前三位
docker rmi a12
```
#### docker container 容器
```shell
# 查看容器列表
docker container ls -a
# 停止容器运行
docker container stop [containerId]
# 删除容器
docker container rm [containerId]
# 查看容器运行日志
docker logs [containerId]
```
#### docker volume
```shell
# 清理数据卷(无关联container的volume)
docker volume rm $(docker volume ls -qf dangling=true)
```
## mysql 5.7
先从折腾一个mysql开始。
```shell
# 先拉一个官方版本的mysql5.7
docker pull mysql:5.7
```
这时候是直接启动不了的,因为没给mysql设置默认的root的密码。
启动会报
`error: 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_PASSWORD1`
意思就是必须先设置个账号密码
参考:
https://www.runoob.com/docker/docker-install-mysql.html
https://blog.csdn.net/weixin_40461281/article/details/92610876
```shell
# 命令和说明
# 1. 密码改成你自己的
# 2. 端口避免已占用
# 3. 事先新建好conf logs data文件夹
# 4. 这里顺便附带了限制内存最大200M的部分,不需要可以去除
docker run -d -p 3306:3306 --name mysql -v /home/zzzmh/docker/mysql57/conf:/etc/mysql/conf.d -v /home/zzzmh/docker/mysql57/logs:/logs -v /home/zzzmh/docker/mysql57/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='root' -m 200M --oom-kill-disable --memory-swap=-1 mysql:5.7
# 返回
21cb89213c93d805c5bacf1028a0da7b5c5852761ba81327e6b99bb3ea89930e
runoob@runoob:~/mysql$
```
意思是
- -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 用户的密码。
检查是否成功
```shell
# 命令
docker ps -a
# 返回
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cd7d8d5e4c98 mysql:5.7 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp mymysql
```
基本完成安装mysql
可以使用navicat连接进行操作
![](/api/file/getImage?fileId=5da182d216199b0467000239)
## mongodb 3.4.20 && redis
同mysql mongodb流程也是差不多
```shell
# 先看下有没有
docker search mongo
# 拉个镜像
docker pull mongo:3.4.20
# 启动镜像
docker run -d -p 27017:27017 -m 100M --oom-kill-disable --memory-swap=-1 --name mongo mongo:3.4.20
```
redis基本和mongo一样
```shell
docker pull redis
docker run -d -p 6379:6379 -m 100M --oom-kill-disable --memory-swap=-1 --name redis redis
```
## tomcat && nginx
### 准备部分
说明:这两个和之前的区别在于,需要有文件和文件夹是映射到宿主机上的
其中-v 对应的本地的文件夹,需要提前创建
例子:
```shell
# 要把tomcat3个关键的配置文件挂载出来,就必须是先运行一个纯容器不挂载的tomcat
# 例如
docker run -d -p 8080:8080 --name tomcat tomcat
# 进入这个tomcat,通过ls pwd cd等命令,找到容器中的配置文件绝对路径
# 之后就可以用以下命令,把这三个配置文件的默认内容给复制到准备好的空文件夹里
docker cp tomcat:/usr/local/tomcat/bin/catalina.sh /home/zzzmh/docker/tomcat/conf/
docker cp tomcat:/usr/local/tomcat/conf/server.xml /home/zzzmh/docker/tomcat/conf/
docker cp tomcat:/usr/local/tomcat/conf/web.xml /home/zzzmh/docker/tomcat/conf/
# 最后安装的时候才可以正常的以文件对文件的方式,实现挂载
# 补充下 如果是文件夹对文件夹的方式挂载,除非是是可以为空的文件夹,否则也要这样先准备好这个文件夹里的所有的文件
# 正式docker run之前,建议清理掉这个测试的run
docker container stop tomcat
docker container rm tomcat
# nginx也是同理,需要 nginx.conf 和 default.conf
# 命令:略~
```
### 安装部分
```shell
# tomcat
docker pull tomcat
docker run -d -p 8080:8080\
-v /home/zzzmh/docker/tomcat/logs:/usr/local/tomcat/logs\
-v /home/zzzmh/docker/tomcat/webapps:/usr/local/tomcat/webapps\
-v /home/zzzmh/docker/tomcat/conf/web.xml:/usr/local/tomcat/conf/web.xml\
-v /home/zzzmh/docker/tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml\
-v /home/zzzmh/docker/tomcat/conf/catalina.sh:/usr/local/tomcat/bin/catalina.sh\
-m 500M --oom-kill-disable --memory-swap=-1\
--name tomcat\
tomcat
# nginx
docker pull nginx
docker run -d -p 80:80\
-v /home/zzzmh/docker/nginx/logs:/var/log/nginx\
-v /home/zzzmh/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf\
-v /home/zzzmh/docker/nginx/conf/conf.d/:/etc/nginx/conf.d\
-v /home/zzzmh/docker/nginx/html:/usr/share/nginx/html\
-m 100M --oom-kill-disable --memory-swap=-1\
--name nginx\
nginx
```
### 操作部分
#### nginx 简单操作
在之前的`/home/zzzmh/docker/nginx/html`下
新建一个文件
`index.html`
```html
<html><body><h1>Docker YES !!!</h1><body><html>
```
访问:
http://localhost
效果:
![](/api/file/getImage?fileId=5da4254016199b046700055c)
#### tomcat 简单操作
在之前的`/home/zzzmh/docker/tomcat/webapps`下
新建一个文件夹 `test`
文件夹中新建一个文件
`index.jsp`
```jsp
<html><body><h1><%out.println("Docker NB !!!");%></h1></body></html>
```
访问:
http://localhost:8080/test/
效果:
![](/api/file/getImage?fileId=5da4271e16199b046700055e)