最近两天需要把一个完整的项目布置到docker内,制作一个完整的镜像。项目主算法,前后端都有涉及,布置中遇到了不少问题。
(1)一堆基础的docker命令,记录下。其中参数还有很多其它的,就记录这次用到的
1
2
3
4
5
6
7
docker images # 查看imagges ,--no-trunc来显示详细
docker ps # 查看运行中的容器,可以加上参数-a列出全部,-n +数字m列出最近m个
docker run -itd --name XXXX(容器名) -p 88(主机):88(容器) # 参数还有很多
docker cp /xxxx/ 123(容器id):/xxx/ #容器id部分可以用容器名其实
docker attach 123(容器id)
docker exec -it 123 /bin/bash # 容器id部分可以用容器名其实
docker commit xxx(容器) xxxx(镜像)
(2)过程中需要暴露新端口,来检测容器里服务有没有正常配置运行,参考了文末链接1。值得一提的是,文中两种方法,经实验只有第一种生效了,即commit再run
(3)项目使用了图数据库,结果我们发现,不改初始密码,无法连接。但是网上给的教程均不可用,并且有的方案在容器外可用,容器内不可用(容器和宿主机是同一版本linux系统,很诡异)最终在官网找到了解决方案。参见链接2,同时想要后端正常使用,还得修改conf里的配置,参见链接3
(4)中途出现了一个比较逗的事记录下,多机一起操作的,有同学误触触控板,在容器还在跑的情况下,把容器文件移走了。已经进入的依旧可以正常运行。这儿我尝试查阅资料,来理解原因。但是目前只能给出一些猜测。docker容器以及利用exec进行进程间通信,已经建立的通信,在文件被误移动后继续保持了。而用exec建立新的通信时,由于文件已经被移走,按照默认配置去搜索信息就失败了,所以导致的。但是这只是我的想法,未必对,以后有契机再研究了或者遇到更懂的大神请教吧。