一、总体步骤
1、搜索镜像
2、拉取镜像
3、查看镜像
4、启动镜像 -> 服务端口映射
5、停止容器
6、移除容器
二、安装tomcat
1、docker hub上面查找tomcat镜像
docker search tomcat
2、从docker hub上拉取tomcat镜像到本地
docker pull tomcat
docker images查看是否
docker images tomcat
4、使用tomcat镜像创建容器实例(也叫运行镜像)
docker run -it -p 8080:8080 tomcat
-p 小写,主机端口:docker容器端口
-P大写:随机分配端口
i:交互
t:终端
d:后台
5、访问猫首页
5.1、出现问题
![](https://i-blog.csdnimg.cn/blog_migrate/aa22f76f6afd29e4fff0c2962c6c94a7.png)
5.2、解决办法
5.2.1、可能没有映射端口或者没有关闭防火墙
![](https://i-blog.csdnimg.cn/blog_migrate/3ec5de9c95bc4431da82405b71b0c6b1.png)
5.2.2、把webapps.dist目录换成webapps
先成功启动tomcat
![](https://i-blog.csdnimg.cn/blog_migrate/946ab508a8cca5f5f1cb41310c4f51ca.png)
查看webapps文件夹查看为空
![](https://i-blog.csdnimg.cn/blog_migrate/18dd0c0e324ae446b3db0de5510a1919.png)
免修改版说明
docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
![](https://i-blog.csdnimg.cn/blog_migrate/bf64245adb3c536f4008ba50ced66495.png)
三、安装MySQL
1、docker hub 上面查找MySQL镜像
![](https://i-blog.csdnimg.cn/blog_migrate/a9ce7f2f41e27b167cda0dfe404a47e9.png)
2、从docker hub上(阿里云加速器)拉取MySQL镜像到本地标签为5.7
![](https://i-blog.csdnimg.cn/blog_migrate/3547bbf64f3641f7eb7939061c5c575b.png)
3、使用MySQL537镜像创建容器(也叫运行镜像)
3.1、命令出处,哪里来?
![](https://i-blog.csdnimg.cn/blog_migrate/ad3046d95e8e217b6950e3a594135da5.png)
3.2、简单版
3.2.1、使用MySQL镜像
# 启动MySQL容器
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
# 查看是否启动成功
docker ps
# 进入MySQL容器
docker exec -it 容器ID /bin/bash
# 进入数据库
mysql -uroot -p
![](https://i-blog.csdnimg.cn/blog_migrate/acd77ac4940b9c4e7ab743b7d630d878.png)
3.2.2、建表建库插入数据
![](https://i-blog.csdnimg.cn/blog_migrate/9c015e34e2e4b91740168de2231a19cf.png)
3.2.3、外部Win10也来连接运行在docker上的MySQL
![](https://i-blog.csdnimg.cn/blog_migrate/64496130a4954175808059491b75330a.png)
3.2.4、问题
插入中文数据试试
为什么报错?
docker上默认字符集编码隐患
![](https://i-blog.csdnimg.cn/blog_migrate/31ce7be67fed6da0cf6f35648348db9d.png)
删除容器后,里面的MySQL数据如何处理?
容器实例删除,你话可以查看什么?删容器到跑路?
3.3、实战版
3.3.1、新建MySQL容器实例
docker run -d -p 3306:3306 --privileged=true \
-v /data/mysql/log:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql mysql:5.7
![](https://i-blog.csdnimg.cn/blog_migrate/d4d7b2c6239f474d9b1335cd310852fe.png)
3.3.2、新建my.cof
通过容器卷同步给MySQL容器实例
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
![](https://i-blog.csdnimg.cn/blog_migrate/ac873d9512a9ad7ce95ce117c912a1d1.png)
3.3.3、重新启动MySQL容器实例再重新进入并查看字符编码
![](https://i-blog.csdnimg.cn/blog_migrate/7b9d2fa1a0db87b1703a5c2d32bd8a96.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8c9ced0bda287fed34552fbced9a1943.png)
3.3.4、再新建库新建表再插入中文测试
![](https://i-blog.csdnimg.cn/blog_migrate/2ddcf62eebeffe82385df3cfd0b24f1d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dca54b3623da76a80f63d672e6bfb173.png)
3.3.5、结论
之前的DB 无效
修改字符集操作+重启mysql容器实例
之后的DB 有效,需要新建
结论:docker安装完MySQL并run出容器后,建议请先修改完字符集编码后再新建mysql库-表-插数据
![](https://i-blog.csdnimg.cn/blog_migrate/2dc323e42a095a6af8a70d438dff8410.png)
3.3.6、假如将当前容器实例删除,再重新来一次,之前建的db01实例还有吗?
四、安装Redis
1、从docker hub上(阿里云加速器)拉取redis镜像到本地标签为6.0.8
![](https://i-blog.csdnimg.cn/blog_migrate/d18e0e31cc11ea3b0a0457b76d268016.png)
2、入门命令
![](https://i-blog.csdnimg.cn/blog_migrate/bca2562fe71d61c5a3172d036260dde2.png)
3、命令提醒:容器卷记得 加入 --privileged=true
Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
4、在CentOS宿主机下新建目录/app/redis
mkdir -p /app/redis
![](https://i-blog.csdnimg.cn/blog_migrate/40b32d5db11b24f81fa0abfce7111c4a.png)
mkdir -p /app/redis
5、将一个redis.conf文件模板拷贝进/app/redis目录下
![](https://i-blog.csdnimg.cn/blog_migrate/63fa8e06a7ed6a71edbb10aaafb302c1.png)
拷贝配置文件:将准备好的redis.conf文件放进/app/redis目录下
6、/app/redis目录下修改redis.conf文件
开启redis验证 可选
requirepass 123
允许redis外地连接 必须
![](https://i-blog.csdnimg.cn/blog_migrate/1e17bc93e76afa281dd56adb130dc073.png)
daemonize no
将daemonize yes注释起来或者 daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败
![](https://i-blog.csdnimg.cn/blog_migrate/7a1f4786d7bc5f72a0dc75c9dfc9d359.png)
开启redis数据持久化 appendonly yes 可选
默认出厂的原始redis.conf
使用redis6.0.8镜像创建容器(也叫运行镜像)
docker run -p 6379:6379 \
--name myr3 --privileged=true \
-v /data/redis/redis.conf:/etc/redis/redis.conf \
-v /data/redis/data:/data \
-d redis:6.0.8 redis-server /etc/redis/redis.conf
![](https://i-blog.csdnimg.cn/blog_migrate/679363b0052f2200138543d676cf997b.png)
8、测试redis-cli连接上来
docker exec -it 运行着Rediis服务的容器ID redis-cli
![](https://i-blog.csdnimg.cn/blog_migrate/f7f7a3914ed1b0e81d0113f2a213196f.png)
9、请证明docker启动使用了我们自己指定的配置文件
9.1、修改前
我们用的配置文件,数据库默认是16个
![](https://i-blog.csdnimg.cn/blog_migrate/3d1b6e49de588ca9c9f50691b8ff0291.png)
9.2、修改后
宿主机的修改会同步给docker容器里面的配置。
![](https://i-blog.csdnimg.cn/blog_migrate/0a261a06a499f824a2df2bb48811f591.png)
注意:记得重启服务
10、测试redis-cli连接上来第2次
![](https://i-blog.csdnimg.cn/blog_migrate/c2b76f67f1278b5c98e2afc0d0fd537f.png)