使用Docker 部署一个用 Python 编写的 Web 应用
查看现有的目录,首先要cd develop ,将对develop做改变。进入到develop中,在其中创建一个项目 mkdir tiger
然后 cd tiger 去改变tiger,
使用touch app.py来创建app.py这个文件
同样的操作,使用touch requirements 、dockerfile来创建这两个文件
上图已经分别创建好空文件夹,接下来就是往里面填充东西。
使用ls命令,可以看到在tiger下面已经有了这个三个文件
使用cat app.py 来查看app.py的内容,可以看到里面是空白的,需要我们去填充
使用vim 命令进入编辑器,使用’i’进入输入模式,然后分别把相应的代码填充进去。
填充好后,使用:w,:q
完成文件填充后,
使用CMD来启动app.py
docker build -t hello word来构造镜像
构造后在下面的docker images中就可以查询到hello word 了
docker run -p 4000:80 helloworld 运行这个镜像
然后就可以在本地看到这个程度了
docker ps ,查看当前的程序的状态
通过下面的命令,可以查看到容器的进程号是2354
docker exec的原理:一个进程,可以选择加入到某个进程已有的 Namespace 当中,从而达到“进入”这个进程所在容器的目的,这正是 docker exec 的实现原理
volume 数据卷
之前学习过,容器技术使用了 rootfs 机制和 Mount Namespace,构建出了一个同宿主机完全隔离开的文件系统环境。
考虑两个问题:
- 容器里进程新建的文件,怎么才能让宿主机获取到?
- 宿主机上的文件和目录,怎么才能让容器里的进程访问?
Volume 机制:
允许你将宿主机上指定的目录或者文件,挂载到容器里面进行读取和修改操作。通过volume机制,可以在容器里面访问宿主机的文件,也可以在宿主机上访问容器里面的文件。
下面的-v就是执行volume操作,可以把宿主机目录挂载进容器的 /test 目录当中
$ docker run -v /test …
$ docker run -v /home:/test …
而这两种声明方式的本质,实际上是相同的:都是把一个宿主机的目录挂载进了容器的 /test 目录。只不过,在第一种情况下,由于你并没有显示声明宿主机目录,那么 Docker 就会默认在宿主机上创建一个临时目录 /var/lib/docker/volumes/[VOLUME_ID]/_data,然后把它挂载到容器的 /test 目录上。而在第二种情况下,Docker 就直接把宿主机的 /home 目录挂载到容器的 /test 目录上。
挂载技术
它的主要作用就是,允许你将一个目录或者文件,而不是整个设备,挂载到一个指定的目录上。并且,这时你在该挂载点上进行的任何操作,只是发生在被挂载的目录或者文件上,而原挂载点的内容则会被隐藏起来且不受影响。
绑定挂载实际上是一个 inode 替换的过程。在 Linux 操作系统中,inode 可以理解为存放文件内容的“对象”,而 dentry,也叫目录项,就是访问这个 inode 所使用的“指针”。
docker 容器的全景图
周六早上学习,棒棒的