docker app 打包笔记

本文详细介绍如何使用Docker为Python Django应用创建可移植的执行环境。从制作基础镜像开始,逐步完成应用代码的集成及依赖安装,最终将整个容器导出为文件,方便在其他机器上部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker介绍

https://www.docker.io/

我的需求

此次希望将要发布的app和执行环境进行打包, app使用python django开发。

这次我打算打包的步骤为:

  • 自己制作docker的base image
  • 配置app执行环境
  • 将制作好的容器导出成文件,用于其他机器的导入

开始执行

制作base image

首先我们先提取一个最小的rootfs, 我现在使用的系统是ubuntu12.04, 我想制作一个12.04的也就是precise的rootfs:

sudo debootstrap precise ubuntu

#precise 为 /usr/share/debootstrap/scripts 下存在的debootstrap script
#ubuntu 就是当前目录下的一个目录

制作过程比较长,制作完成后我们来把它导入到docker中成为一个image:

tar -C ubuntu -c . | sudo docker import - ubuntu

完成后我们就制作好了一个docker的base image, 我们可以同做下面这个命令来查看:

sudo docker images

配置app环境

首先我要把app代码拷进容器中,这个是可以通过dockerfile 中的ADD来做的,不过我还没有仔细看dockerfile,就先手动通过qiniu上传在下载到运行中的容器中的.

首先我们要用docker使用我们前面制作好的image跑起一个shell

sudo docker run -i -t ubuntu bash
=>
root@210ae349a593:/# 

然后我们就可以在这个启动中的bash中来执行我们的常用操作了,我把上传的代码wget下来到/docker_app, 对我把它放在了启动的容器的根目录下的docker_app,现在我要安装我app的依赖。

我先手动wget下来python的setuptools和pip,手动安装好.因为依赖中有MySQL-python,如果要用pip来安装的话要编译,编译的话需要安装mysql的一些lib,会使image变大,所以直接用apt-get安装了二进制的,并在requirments.txt中删掉了MySQL-python. 因为依赖中还有一个Pillow需要编译,所以忍痛装上的gcc和python-dev.

然后在docker_app目录下

pip install -r requirments.txt -i http://pypi.douban.com/simple

修改app配置文件中的数据库的地址,我们要查看我们本机docker0虚拟网卡的ip, 我机器的显示是:

ifconfig

=>

docker0   Link encap:Ethernet  HWaddr 76:71:61:ca:84:1b  
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::c10:64ff:fe74:c0c6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:617463 errors:0 dropped:0 overruns:0 frame:0
          TX packets:678907 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:56062519 (56.0 MB)  TX bytes:267105247 (267.1 MB)

所以我就把数据库ip改成 172.17.42.1, ok,环境配置好的,我们保持这个shell session,然后打开另一个shell session执行以下命令查看现在运行的这个容器的id:

sudo docker ps

=>

CONTAINER ID        IMAGE             .... 
210ae349a593        ubuntu:latest     ....

然后我们将这个容器commit 成 docker_app:

sudo docker commit 210ae349a593 docker_app

我们再次执行 sudo docker images, 就会发现我们生成的 docker_app 的image

下面我们 exit 刚才我们配置环境的那个 shell, 来测试一下我们配置的环境的image.

sudo docker run -i -t -d -p 8000:8000 docker_app python /docker_app/manage.py runserver 0.0.0.0:8000

这样我们就把本地8000端口和任务容器的8000端口做了映射,接下来我们就可以在本地浏览器上访问我们 http://127.0.0.1:8000 来访问我们的应用了, 我们还可以查看容器的输出日志, 容器id 为我们sudo docker ps 出来的 CONTAINER ID:

sudo docker logs -f <容器id>

=>

Validating models...

0 errors found
March 27, 2014 - 14:14:10
Django version 1.6.1, using settings 'app.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

导出我们制作好的image

docker 本身是有push 来上传的 index.docker.io 的,使用是用pull来拉取,但是由于在天朝,网络不给力。所以就导出成文件吧,docker官方也有给出自建image server的方案,貌似项目还不太成熟,以后再研究.

现在我们 docker ps 出刚才运行的那个容器的 id, 将它导出

sudo docker export <容器id>  >  docker_app.tar

完成后我们刚才制作的容器就导出成了 docker_app.tar 文件, 以后在其他机器部署的时候执行导入

cat docker_app.tar | sudo docker import - docker_app

管道后面的 docker_app 为导入后image命名,自己指定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值