背景

项目集成docker开发,学习docker、docker compose,并使用docker compose运行demo

问题

1、machine未安装,修改创建虚拟机的位置
在Windows的系统环境添加MACHINE_STORAGE_PATH ,指向虚拟机的位置,启动Docker QuickStart直接安装
2、machine已安装,修改虚拟机的位置
a.停止Docker的虚拟机。
b.打开VirtualBox,选择“管理”菜单下的“虚拟介质管理”,
c.选中docker创建的“disk”,然后点击菜单中的“复制”命令,根据向导,把当前的disk复制到另一个盘上面去。
d.回到VirtualBox主界面,右键“default”这个虚拟机,选择“设置”命令,在弹出的窗口中选择“存储”选项。
e.把disk从“控制器SATA”中删除,然后重新添加我们刚才复制到另外一个磁盘上的那个文件。

3、docker machine重启后,/qiuem数据丢失
原因
/qiuem目录下的数据存储在tmpfs(temp filesystem),tmpfs是基于内存的临时文件系统,machine关闭后,数据不回保存
解决方法
a、想要保存数据,需要将数据存到设备文件/dev/sda1中。可以通过建立软链接的方式,将/qiuem下的文件保存到/mnt/sda1, 但是软链接文件是存在/qiuem的,也就是重启后软链接文件会消失,还需要重新建立。
b、直接将/qiuem对应的设备文件修改为/dev/sda1. 由于同一个设备文件不能同时挂载两个文件目录, 但是可以通过mount --bind的方式将当前挂载目录下的某个目录 绑定 到其他目录。
参考:https://itworld520.com/2019/09/16/docker-machine重启后数据丢失问题/

4、更改docker命令默认操作的机器,默认操作default,执行docker命令时都是针对默认机器,如何更改默认机器?如何临时更改机器?
修改环境变量DOCKER_MACHINE_NAME,调整默认操作机器
docker-machine ssh连接指定机器

5、docker-machine重启后,ip是否会改变?
机器重启后ip不会改变,docker-machine启动可以通过docker-machine ip命令查看ip
容器运行在指定机器后,会将容器端口映射到主机端口,通过主机ip+主机映射端口来访问容器内程序,与docker-machine无关系

6、重启主机或machine,容器是否还在?
主机或machine重启后,容器依然存在,但是容器状态为exited

7、运行docker,在主机上会创建默认机器default,运行容器时,端口也是映射到docker machine的端口上,如何映射到主机端口上?
形如 运行容器tomcat -p 8081:8080 在容器内可以访问8080端口,在docker machine可以访问8081端口,访问方式curl localhost:8081
如何直接在使用主机ip访问tomcat?
使用代理(如nignx)转发到machine端口或者直接使用防火墙做转发

8、Dockerfile 中的 VOLUME 挂载与 docker -v 命令挂载区别
Dockerfile-VOLUME :定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
格式:
VOLUME [“<路径1>”, “<路径2>”…]
VOLUME <路径>
路径1:容器内目录所在路径,在容器创建过程中会在容器中创建该目录,宿主机上的挂载目录名是随机生成的

docker -v 宿主机目录(绝对路径):容器内目录所在路径