一、mysql镜像管理
1、线上考试系统的数据 虚拟化部署
1. 部署前端服务器
(1)将资源上传到服务器
scp -r /dist/ root@xxx:…..
(2)创建基础容器 在服务器上
[root@docker ~]# systemctl start docker
[root@docker ~]# docker pull centos[root@docker ~]# docker run -it --name c0 centos:latest /bin/bash
[root@015996a52240 /]# cat /etc/redhat-release
CentOS Linux release 8.4.2105
(3)在容器中修改yum源
[root@015996a52240 /]# rm -rf /etc/yum.repos.d/*
[root@015996a52240 /]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo[root@015996a52240 /]# yum clean all && yum makecache
(4)在容器中安装epel
[root@015996a52240 /]# yum -y install epel-release
(5)在容器中安装nginx
[root@015996a52240 /]# yum -y install nginx
(6)ctrl+p+q
(7)导出tar包
[root@docker ~]# docker export -o centos_nginx c0
[root@docker ~]# ls
(8)引入tar包,称为镜像
[root@docker ~]# docker import -m "哈哈哈哈" centos_nginx centos:nginx
(9)查看镜像
[root@docker ~]# docker images
(10)停用c0容器,删除c0容器
[root@docker ~]# docker stop c0
c0
[root@docker ~]# docker rm c0
c0
(11)创建新的centos nginx容器,在创建的同时指定端口,以及挂载目录
[root@docker ~]# docker run -it --name c0 -p80:80/tcp -v /opt/:/usr/share/nginx/html/ centos:nginx /bin/bash
(12)在容器内部启动nginx服务
[root@5d4af8a878b3 /]# nginx
[root@5d4af8a878b3 /]# ls /usr/share/nginx/html/
containerd
(13)crrl+p+q 在宿主机上把dist目录中的文件复制到opt目录下
[root@docker ~]# cp -r dist/* /opt/
(14)浏览器
2、数据库
[root@docker ~]# docker run -d --name m0 -e MYSQL_ROOT_PASSWORD=root -p3306:3306 mysql:latest
[root@docker ~]# docker ps
[root@docker ~]# docker exec -it m0 mysql -uroot -proot
连接navicat连接数据库,运行sql文件
mysql> show databases; +---------------------+ | Database | +---------------------+ | information_schema | | mysql | | performance_schema | | project_exam_system | | sys | +---------------------+ 5 rows in set (0.00 sec) mysql> use project_exam_system; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables;
3、让容器共享宿主机的/etc/localtime 让容器和宿主机时间一致
[root@docker ~]# docker run -it --name c3 centos:latest /bin/bash
[root@cf854b0b53ab /]# date
Mon Aug 26 06:38:23 UTC 2024[root@docker ~]# docker run -it --name c4 -v /etc/localtime:/etc/localtime centos:latest /bin/bash
[root@b65bfea5d08c /]# date
Mon Aug 26 14:41:56 CST 2024
[root@docker ~]# docker exec c4 ls / //免交互式
4、容器ip地址不稳定 --link
1. docker容器ip地址不固定,如果要作为服务器使用,就必须能够直接访问服务,不能直接使用ip,为容器设置域名,做端口映射也能保证,但是一旦停用之后端口被占用,就无法再次启动
2. docker run --link 容器名称或者id:自定义域名
3. 被link的容器必须处于启动状态,否则当前容器无法启动
[root@docker ~]# docker run -d --name m1 -e MYSQL_ROOT_PASSWORD=root mysql:latest
92f2987abebaa7a47e148a6bb78684c3f55d2c58807aeea06883cf84440c010d
[root@docker ~]# docker inspect m1IPADDRESS:172.17.0.3
[root@docker ~]# docker run -it --name c0 --link m1:mysqldb centos:latest /bin/bash
[root@55901973e1fc /]# ping mysqldb
[root@55901973e1fc /]# cat /etc/hosts
[root@docker ~]# docker stop m1
m1
[root@docker ~]# docker run -it --name c1 centos:latest /bin/bash
地址改变 docker 域名对应ip会自动变[root@docker ~]# docker start c0
Error response from daemon: Cannot link to a non running container: /m1 AS /c0/mysqldb
Error: failed to start containers: c0
[root@docker ~]# docker start m1
m1
[root@docker ~]# docker start c0
c0
1. docker client向dcoker daemon 发送创建容器的请求 docker run
2. docker daemon查找有无客户端需要的镜像
3. 如果没有,就到容器的镜像仓库下载需要的镜像 pull
4. 拿到容器镜像后,启动容器
[root@docker ~]# cd /var/lib/docker/
[root@docker docker]# ls
buildkit engine-id network plugins swarm volumes
containers image overlay2 runtimes tmp
[root@docker docker]# cd overlay2/
[root@docker overlay2]# ls
[root@docker ~]# rm -rf /var/lib/docker/ //删除docker目录[root@docker ~]# ls /var/lib/docker/overlay2/
[root@docker ~]# ls /var/lib/docker/overlay2/ad171615facf703f1d9dbfe343a8a2521d54339185816052438f715cbcf3c7bd
[root@docker ~]# docker exec c0 dd if=/dev/zero of=/ahswdw.txt bs=10M count=100
[root@docker ~]# ls /var/lib/docker/overlay2/ad171615facf703f1d9dbfe343a8a2521d54339185816052438f715cbcf3c7bd/merged/
1. 在docker daemo初始状态(没有镜像的时候)/var/lib/docker不存在
2. 当docker daemon服务器启动,会自动创建dock目录
3. 在没有镜像的情况下。查看overlay2这个目录是只有两个文件,管道文件,目录(管理镜像和容器
的软连接的目录)
4. 当我们pull一个镜像之后/va r/lib/docker/overlay2下就有一个新的目录,这个目录就是cenonos的
基础目录,这个新的目录就是镜像,就是不可读的层
5.当我们使用这个镜像创建一个容器,在overlay2会添加2个目录,一个是init目录,另外一个目录就
是容器的可写层,用户对系统的修改都在可写层中进行
[root@docker ~]# tar --numeric-owner --exclude=/proc --excluede=/sys -cvf haha.tar /