Python Web App

注:

这个例子环境是假设你已经运行了docker进程,更多详细信息请查看运行例子,如果你不喜欢sudo,你可以用户授权命令和docker组

这个例子目的是展示如何用父镜像创建自己的镜像,修改和保存一个新的镜像,我们会通过一个简单的web镜像做hello沙箱测试

步骤

  1. sudo docker pull shykes/pybuilder

我们要下载shykes/pybuilder的docker镜像

  1. URL=http://github.com/shykes/helloflask/archive/master.tar.gz

我们通过设置URl来指向一个简单的helloflask web的简单应用

  1. BUILD_JOB=$(sudo docker run -d -t shykes/pybuilder:latest /usr/local/bin/buildapp $URL)

在shykes/pybuilder镜像内部有一个叫buildapp的命令,通过URL的值运行后创建一个新的容器,其中BUILD_JOB就是容器返回的id

  1. sudo docker attach -sig-proxy=false $BUILD_JOB

当容器运行时,我们可以连接容器来查看,参数-sig-proxy设置fasle允许我们连接和断开(CTRL -c)这个容器

  1. sudo docker ps -a

列出所有docker容器,如果容器运行完成,它就会出现在这里

  1. BUILD_IMG=$(sudo docker commit $BUILD_JOB _/builds/github.com/shykes/helloflask/master)

保存镜像的更改,并且新建镜像的名称是 _/builds/github.com/shykes/helloflask/master

  1. WEB_WORKER=$(sudo docker run -d -p 5000 $BUILD_IMG /usr/local/bin/runapp)
  • docker run -d 创建一个新的容器,通过-d参数让他作为一个后台进程运行
  • -p 5000 这个web应用运行时候的端口,所以这个端口必须从镜像映射到主机上
  • $BUILD_IMG 我们要运行的容器
  • /usr/local/bin/runapp是启动web应用的命令

用新创建的容器并且这个容器开放了5000端口,会返回容器id,并且存储了WEB_WORKER变量

  1. sudo docker logs $WEB_WORKER
  2. * Running on http://0.0.0.0:5000/

查看日志上新容器使用WEB_WORKER变量,如果一切按计划工作你应该看到在http://0.0.0.0:5000上运行的日志中输出。

  1. WEB_PORT=$(sudo docker port $WEB_WORKER 5000 | awk -F: '{ print $2 }')

查找私有端口内存储的web端口值来查看转发到主机的上的公共端口

  1. # install curl if necessary, then ...
  2. curl http://127.0.0.1:$WEB_PORT
  3. Hello world!

通过curl命令来访问,如果正常工作你就会在你的控制台看到hello word