docker

 

 以前一直试错最根本缘由是,from这个参数,没有理解它的内部逻辑,若是是须要用到一个完整的项目,有redis,有mysql,有mongodb等等这些,都是须要像在服务器部署环境同样,在dockerfile文件中经过命令一一去实现的,那么,基础镜像就应该是centos或者是Ubuntu这样的打底镜像,而后再装python,以及后面这些软件,都是经过dockerfile文件来实现,路径也是同样,这样才能理通整个逻辑,因此,下面提到的cmd参数是一方面缘由,还有from这个打底镜像也是一方面缘由。从这两个方面入手就能解决问题了。另外Google上搜到那些博客上写的示例都是最简单的单个文件应用的配置方法,在starkoverflow上面有比较复杂的dockerfile配置。html

https://yeasy.gitbooks.io/docker_practice/image/dockerfile/cmd.htmljava

docker的add和copy命令区别在这里,还有就是若是要执行shell脚本文件,centos和Ubuntu是不同的,Ubuntu执行cmd的时候内置是执行了/bin/bash,而这就是shell文件内置的地址路径,python

可是centos不必定是这个结构,还有就是我以前试的都是python做为基础镜像,因此这里都是差别的根源,果真仍是不能钻牛角尖,否则的话,这些问题都会被情绪所忽视掉。mysql

 

docker挂载本地项目地址到docker服务上的命令以下nginx

docker run -d -p 80:5000 -v Users/nolan/Documents/my-app:/opt/my-app --name my-app



-d是后台运行 -v就是--volunm Users/nolan/Documents/my-app是服务器项目地址 /opt/my-app是dockerfile文件生成的docker虚拟地址 --name是给容器命名,若是不用这个参数命名,那么容器就会自动生成一个uuid做为容器名。

 

 
 
 
 
我的理解:(docker下载安装就很少赘述了,网上大把方法,基本上没什么错误,推荐菜鸟教程)
docker自己就是一个微型的虚拟机,有一个打底的镜像(例如centos),而后在这个打底镜像上用打底镜像的内置命令(例如yum)来下载安装一些软件,好比python/java环境,或者是mysql/mongodb/gunicorn/nginx
等等,而后根据他们彼此的联系,参考服务器配置,把他们彼此的关系绑定好,全部这些都是在服务器上指定项目根目录下创建的一个dockerfile文件,都是依赖于这个文件,把这个文件里面的配置参数写好以后就能够用docker
的命令来运行你写好的服务。当你执行一个docker run的命令的时候就是开启了一个容器,容器跟镜像是绑定关系。
这里有官网quick start方法流程
这样虽然是启动了,可是仅仅是一个进程的方式,这个进程还占用了一个窗口,若是这个窗口被ctrl + C,那么这个服务就中断了,很显然这太初级了,并且很不方便,这个时候重点就来了。咱们的不少插件都是启动的时候
仅仅做为一个进程,关闭窗口就杀掉了进程,因此就会把进程放到一个服务里面,在后台运行,例如mongodb或者是mysql之类的,docker也有这个考虑。它更高级一些,它有本身的仓库,就是相似于GitHub的仓库,
这个仓库用于存储咱们生成的镜像,把镜像存储到这个仓库里面以后,咱们再来编写docker-compose.yml文件,它做为docker服务的启动基础,把对应的参数都配置到里面便可启动服务。
这里有官网quick start生成服务流程官网给出的示例很明晰,若是是刚刚开始接触的话就按照这个简单的示例开始测试便可走通这整个流程。这里就再也不另外copy了。可是到真正使用中仍是须要填不少坑的,具体的各个插件之间如何绑定,以及两个配置文件中分别各自的参数是如何匹配的,这些都是须要本身去试错的,目前还在填坑中,后续会把在官网基础上更加复杂的示例贴到这里,供往后参考。目前在写的小demo是flask+mongodb+gunicorn+nginx,把这些都放到docker里面,才能最终跑通。
相关文章
相关标签/搜索