docker小白第七天
tomcat安装
docker hub上面查找tomcat镜像
点进tomcat,可以看到下载镜像的命令。但是因为文件太大,并且是国外下载镜像很慢,所以我们从前期配置好的阿里云镜像仓库下载。
docker search tomcat
docker pull tomcat
docker启动tomcat容器
然后下载完成后,查看是否已拉取到本地
docker images tomcat
启动tomcat镜像,新建一个容器实例。
docker run -d -p 8080:8080 --name tomcat1 tomcat
-p小写代表 主机端口:docker容器端口
-P大写代表 随机分配端口
i:交互
t:终端
d:后台
然后docker ps
查看是否启动容器成功。
然后访问猫的首页,localhost:8080,可能会出现访问不到的问题,以下是解决方案。
通过交互式命令行再次进tomcat容器查看信息
docker exec -it tomcat1 /bin/bash
ls -l
cd进webapps查看,发现里边什么也没有
rm -r webapps
新版的tomcat已经不用webapps作为访问的初始页面了,需要把这个删掉,用webapps.dist代替
mv webapps.dist webapps
对webapps.dist改名
重启虚机,然后输入关闭防火墙命令
systemctl stop firewalld
测试完成后,记得在开启防火墙
systemctl start firewalld
在宿主机windows上,输入虚拟机ip地址:8080,即可访问。
tomcat访问webapps免修改版
docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
替换为老板的tomcat进行启动
mysql安装
拉取mysql镜像
docker search mysql
docker pull mysql:5.7
下载5.7版本
docker images mysql:5.7
查看镜像是否下载成功
创建容器
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
如果linux上装过mysql,且已经运行了,则不能使用docker启动mysql容器,占用3306端口。
然后输入docker ps
查看已经启动的容器
docker exec -it 398a3f377d60 /bin/bash
以交互式命令行进入docker容器界面
mysql -uroot -p
然后输入前边配置的root账户的密码
然后就可以执行一些数据库命令了
show databases;
create database db01;
use db01;
create table t1(id int, name varchar(20));
insert into t1 values(1,'z3');
select * from t1;
记得加英文的冒号
windows宿主机通过工具访问容器数据库
在虚拟机上新建了一个linux系统,然后起了一个容器数据库,端口是3306,尝试在宿主机windows系统上通过数据库图形化管理工具进行连接查看。
注意:记得关闭虚拟机的防火墙
systemctl stop firewalld
在数据库管理工具上测试,输入虚机ip,和端口,点测试连接。
然后连接数据库,设置刚刚新建的db01为默认库,执行命令查看里边的表t1数据。
注意问题一,数据库插入中文字符报错,可以通过以下命令到linux服务器内的数据库查看
show variables like 'character%';
查看编码解码的设置
可以看到client客户端的编码方式是latin1,不是utf-8.
注意问题二,删除容器后,里边的mysql数据可能会丢失,记得挂载容器卷。
mysql容器实战避雷
插入中文字符报错解决
前文提到两个问题,需要注意避雷,通过实践案例演示一遍。先停掉并删除之前的数据库容器实例。
docker stop 容器id
docker rm -f 容器id
然后重头开始新建mysql容器
docker run -d -p 3306:3306 --privileged=true -v /cz/mysql/log:/var/log/mysql -v /cz/mysql/data:/var/lib/mysql -v /cz/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
–privileged=true是开启容器卷的全部权限
同时多个-v,表示一次挂载多个容器卷,若新建不成功,记得开启刚刚关闭的防火墙或者杀死刚刚还存在的3306端口。如下图所示 可以看到已经新建成功。
cd /cz/mysql/conf
vim my.cnf
然后编辑my.cnf
[client]
default_character_set = utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
然后保存退出
docker restart mysql
改完配置后重启mysql容器
docker exec -it mysql bash
进入mysql容器的命令行
mysql -uroot -p
进入数据库
show variables like 'character%';
再次查看编码解码的设置
然后在数据库执行如下命令
create database db01;
use db01;
create table t1(id int, name varchar(20));
在windows的mysql管理工具,执行插入中文字符不报错了。
误删除docker容器mysql后的数据处理
1、当误删除mysql容器实例时,若创建该容器时有挂载容器卷,则再次创建一个新容器时,容器卷的挂载位置相同,则启动容器后,会发现数据还在。
2、宿主机的卷若被删除,则无法恢复。这是注意点。