docker安装常用软件
1.安装软件说明
框架图
总体步骤:
- 搜索镜像
- 拉去镜像
- 查看镜像
- 启动镜像 - 服务端口映射
- 停止容器
- 移除容器
1.安装tomcat
-
docker hub上查找tomcat镜像
-
从docker hub上拉取tomcat镜像到本地
-
docker images查看是否有拉取到的tomcat
-
使用tomcat镜像创建容器实例(也叫运行镜像)
命令:
docker run -it -p 8080:8080 --name t1 tomcat
-p小写,主机端口:docker容器端口
-P大写,随机分配端口
i:交互
t:终端
d:后台大写P的例子
docker run it -P tomcat -
访问tomcat首页
问题:
解决:Ⅰ.可能没有映射端口或者关闭防火墙Ⅱ.把webapps.list目录换成webapps- 删除webapps,并将webapps.dict改成webapps
- 查看当前目录
- 再次访问首页
-
免修改本说明
命令:
docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
2.安装mysql
-
docker hub上面查找mysql镜像
-
从docker hub上(阿里云加速器)拉取mysql镜像到本地标签为5.7
容器命令出处
2.1简单版
-
使用mysql镜像
命令:
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
问题:可能在使用docker之前,linux已经安装mysql,那此时3306端口就已经被占用了
解决:在使用启动docker命令前用命令ps -ef|grep mysql
观察3306端口是否被占用
观察是否启动成功
-
建库建表插入数据
-
外部Win11连接运行在docker上的mysql容器实例服务
-
问题
问题1:插入中文数据会报错,为什么会报错?docker上默认字符集没有修正
解决办法: docker里面的mysql容器查看,内容如下
命令:SHOW VARIABLES LIKE 'character%';
不要在连接工具里面看,工具会将有些字段自动转换成utf8的格式
在mysql中直接执行该语句会发现全是latin格式
问题2:删除容器后,mysql里面的数据怎么办?
解决办法:实战版本
-
2.2实战版本
-
新建mysql容器实例
命令如下:
docker run -d -p 3306:3306 --privileged=true -v /asule/mysql/log:/var/log/mysql -v /asule/mysql/data:/var/lib/mysql -v /asule/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
//不要粘贴这个只是为了看起来整洁,linux中回车会导致执行 docker run -d -p 3306:3306 --privileged=true -v /asule/mysql/log:/var/log/mysql -v /asule/mysql/data:/var/lib/mysql -v /asule/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
-
新建my.cnf
通过容器卷同步给mysql容器实例
在上述配置的conf文件夹下创建my.cnf并配置如下内容
[client] default-character-set=utf8 [mysqld] collation-server=utf8_general_ci character-set-server=utf8
-
重新启动mysql容器实例再重新进入并查看字符编码
重启mysql服务
查看字符编码
-
再新建库新建表再插入中文测试
从mysql看
从连接工具看(发现中文乱码已经解决)
-
总结
- 之前的DB是无效的
- 修改字符集操作和重启mysql实例之后的DB有效,需要新建
- docker安装完Mysql并run出容器后,建议修改完字符集编码后再新建mysql库-表-插入数据
- 假如将当前容器实例删除,再重新来一次,之前建的db01实例还有吗?
- 假如有人把该容器实例删除了
- 再启动mysql,发现db01还是存在的
- 结论:容器卷是一定要挂载的,就算把容器实例删除了,只要保存在对应的宿主机上,重新启动容器后依旧能把数据拿回来,才能保证数据的不丢失
3.安装redis
-
从docker hub上(阿里云加速器)拉取redis镜像到本地标签为6.0.8
命令:
docker run -d -p 6379:6379 redis:6.0.8
-
入门命令
-
命令挺行:容器卷记得假如–privileged=true
-
在CentOS宿主机下新建目录/app/redis
命令:
mkdir -p /app/redis
-
将一个redis.conf文件模板拷贝到/app/redis目录下
-
/app/redis目录下修改redis.conf文件
-
开启redis验证 (可选)
-
允许redis外地连接,必须注释掉# bind 127.0.0.1
-
将daemonizeyes注释起来或者设置成daemonizeno,因为该配置和docker run 中-d参数冲突会导致容器一直启动失败
如果daemonizeyes,即linux下的redis会在后台运行,此时redis将一直运行,除非手动kill该进程,所以会和docker中的redis启动的端口产生冲突
-
开启redis数据持久化appendonly yes(可选)
-
-
使用redis6.0.8镜像创建容器(也叫运行镜像)
这里用6.0.8一直启动不了换成默认版本就能启动了
docker run -d -p 6379:6379 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data --name myredis redis:latest redis-server /etc/redis/redis.conf
//不要粘贴这个只是为了看起来整洁,linux中回车会导致执行 docker run -d -p 6379:6379 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data --name myredis redis:6.0.8 redis-server /etc/redis/redis.conf
启动成功
-
测试redis-cli连接
-
请证明docker启动使用了我们自己指定的配置文件
-
默认的配置文件的redis库是16个
-
修改我们指定配置文件redis库的个数
-
修改之前可以访问0~15的库
-
访问redis15的库,发现访问不了则是自己的配置文件启动的redis
-