最近一直在忙着公司项目,学习服务器开发时间不长,希望可以记录点东西,如果写的错误,不好的请指正

    项目中用python+swagger 基本完成了后台服务器的接口开发,但是需要将程序部署到其他服务器上,因此用到了docker

简介

        Web应用随时可能被攻击者利用来夺取整个主机的权限,这是很常见也是很恐怖的一件事。为了更高的安全性,就需要将不同应用之间进行隔离(尤其是在这些应用属于不同的用户的情况下),然而这种隔离的实现一直是个挑战。到目前为止,隔离性的实现方法已经有了很多,然而它们要么太过昂贵(时间的层面以及资源的层面),要么太过复杂(无论对开发者还是对管理员)。

本文将讨论如何让“容器化”的Python Web应用跑在安全的沙箱里,严格的坚守在其各自的环境中(当然,除非你指定它们与其他应用进行“连接”)。我将一步一步的介绍如何创建一个Docker容器,如何用这个容器来跑我们的Python Web应用,以及如何用一个Dockerfile来描述整个构建过程以实现完整的自动化

 

        关于Docker简介:https://www.cnblogs.com/SzeCheng/p/6822905.html

        个人感觉上面对于基础的docker介绍的不错,那个快照不错


Docker安装(Ubuntu 14.04)

1.更新apt源,并保证https和ca证书成功安装

    1.$ sudo apt-get update

2.$ sudo apt-get install apt-transport-https ca-certificates

2.添加新的GPG密钥

1.	$ sudo apt-key adv \  
2.	               --keyserver hkp://ha.pool.sks-keyservers.net:80 \  
3.	               --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

3.通过lsb_release -a命令查看系统的版本,Ubuntu14.04

1.	Trusty 14.04 (LTS)  deb https://apt.dockerproject.org/repo ubuntu-trusty main

4.设置源

1.	$ echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list
5.更新APT
1.	$ sudo apt-get update
6.确认APT已经更新,正常会输出结果
1.	$ apt-cache policy docker-engine  
2.	  
3.	  docker-engine:  
4.	    Installed: 1.12.2-0~trusty  
5.	    Candidate: 1.12.2-0~trusty  
6.	    Version table:  
7.	   *** 1.12.2-0~trusty 0  
8.	          500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages  
9.	          100 /var/lib/dpkg/status  
10.	       1.12.1-0~trusty 0  
11.	          500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages  
12.	       1.12.0-0~trusty 0  
13.	          500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages 

7. 再次更新源

1.	$ sudo apt-get update

8.安装增强包

1.	$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
9.再次更新源
1.	$ sudo apt-get update
10.安装Docker
1.	$ sudo apt-get install docker-engine
11.启动Docker守护进程
1.	$ sudo service docker start

12.验证Docker是否安装成功(查看docker版本)

1.	$ docker -v

截图:


参考:

    https://docs.docker.com/engine/installation/linux/ubuntulinux/

    docker需要3.10或者更高版本的内核支持,通过uname -r查看内核版本

部署调试

    1. requirements.txt文件生成       

        安装#pip install pipreqs

        进入项目目录下执行# pipreqs ./  自动在当前目录下生成requirements.txt文件

    2. 将程序放到部署环境中,在Dockerfile文件目录下

        docker  build -t  myimage .    (建立镜像)

        docker run -d  --name mycontainer -p 80:80 myimage     (创建容器,容器是运行在镜像里面的)

       这里的80:80  说明一下,前面的80是Docker暴露的端口,冒号后面的80指镜像里面的虚拟端口,在运行镜像后,docker 会监听端口80(暴露端口),外面程序调用访问端口80,docker链接到里面的虚拟端口80(docker里面的程序需要访问虚拟端口80)

        建立镜像成功后的截图:

    

    运行容器失败截图:


可以打印docker的日志信息,查看报错信息:

    docker logs  container_id

    如上图所示,ConfigParser  没有__getitem__这个方法,最后查到原因是python版本不同(2.7 和3)ConfigParser模块里面的方法改变,这里修改python相关代码,容器运行成功! 接口调用成功

    


相关问题

    1.     文件结尾包含^M

            解决办法:$dos2unix filename 

    2.     在python程序中的import导入模块时, 有时会报错

            解决办法: 需要在requirements.txt文件中添加此模块,运行前进行安装

相关命令

    通过当前目录生成需要的requirements.txt文件,命令如下:

    $ pip install pipreqs 

    $  pipreqs/path/to/project


    查看docker里面的image

    docker images

 

    删除image

    docker rmi -f  image-id


    查看docker里面的容器

    docker ps -a

 

    删除docker容器

    docker rm /mycontainer (容器名)

 

    停止容器

    docker stop  690b648a23dafe1ddc689c0651c3a148f8017e33326b992f84a1a94927b6  (container_id)

 

    查看日志信息

    docker logs  690b648a23dafe1ddc689c0651c3a148f8017e33326b992f84a1a94927b6    (container_id)


    注意:删除容器时,需要先停止容器,再去移除


最后给几个参考链接:

    https://hub.docker.com/r/tiangolo/uwsgi-nginx-flask/

    http://blog.csdn.net/daiyudong2020/article/details/53353064

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐