python部署docker
1. 如何运用docker配合python开发环境实例
由于开发一个Python程序时需要依赖大量的三方库包,且python2和3本身就有互不兼容的地方,我们往往需要一个隔离的环境,来避免版本影响造成的bug。
传统的做法大多数人可能会选择virtualenv来隔离,但是它有很多明显的缺点:
无法提供完全的隔离
如果不想在正式环境中使用,它就会造成差异
- # 参考命令
- sudo wget -qO- httpr.com/ | sh
- ├──fanxiangce
- _docker
- ├── Dockerfile
- ├── Readme.md
- └─fanxiangce
- └──app
- ├── manage.py
- └── requirements
- ├── common.txt
- ##########################################################
- # Dockerfile to run a flask-based web application# Based on an centos:7 image
- ##########################################################
- # Set the base image to use to centos
- FROM centos:7
- # Set the file maintainer
- MAINTAINER jasonwang,[email protected]
- # Set env varibles used in this Dockerfile (add a unique prefix, such as DOCKYARD)
- # Local directory with project source
- ENV DOCKYARD_SRC=fanxiangce
- # Directory in Container for all project files
- ENV DOCKYARD_SRCHOME=/opt
- # Directory in container for project source files
- ENV DOCKYARD_SRCPROJ=/opt/fanxiangce
- # Update the defualt application repository source list
- RUN yum -y install epel-release
- RUN yum -y install python-pip
- RUN yum clean all
- # Copy application source code to SRCDIR
- COPY $DOCKYARD_SRC $DOCKYARD_SRCPROJ
- # Create application subdirectories
- WORKDIR $DOCKYARD_SRCPROJ
- RUN mkdir log
- VOLUME ['$DOCKYARD_SRCPROJ/log/']
- # Install Python dependencies
- RUN pip install --upgrade pip
- RUN pip install -r $DOCKYARD_SRCPROJ/requirements/common.txt
- # Port to expose
- EXPOSE 8000
- # Copy entrypoint script into the image
- WORKDIR $DOCKYARD_SRCPROJ
- # 在Dockerfile同级目录下
- sudo docker build -t jason/webdemo .
- # 查看当前容器
- sudo docker ps -a
- # 启动容器
- docker start webdemo
- # 进入容器
- docker attach webdemo
而随着容器技术的日渐成熟和普及,Docker无疑成为解决这个问题的最优解
本文将主要介绍docker和flask的配合开发
步骤:
1.安装Docker(这里不详细介绍)
2.应用目录结构
3.编写Dockerfile(详细命令解释可以参考hocker.com/engine/reference/builder/#environment-replacement)
4. build镜像
成功后显示Successfully,同时返回镜像ID,如图:
8.后续
如果容器关闭后需要再次进入,可以用如下命令
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
2. 写python的至今没搞懂的微服务是啥,请大佬们不吝赐教!
将模块功能拆分成多个项目,独立运行,分流数据压力,宕机危险,但是每个项目之间又可以通信,比如用户项目可以查询订单项目中的数据。大概就是这么意思,然后用docker把环境支起来大项目会用多个服务器多个docker进行部署
3. 怎样在Python中操作Docker容器
Docker容器运行后,如何进入容器进行操作呢?起初我是用SSH。如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可。当我启动了五个容器后,每个容器默认是没有配置SSH Server的,安装配置SSHD,映射容器SSH端口,实在是麻烦。 我发现很多Docker镜像都是没有安装SSHD服务的,难道有其他方法进入Docker容器? 有很多种方法,包括使用 docker attach 命令或 nsenter 工具等。 使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。 nsenter 可以访问另一个进程的名字空间。 为了连接到容器,你还需要找到容器的第一个进程的 PID,可以通过下面的命令获取。 PID=$(docker inspect –format “{{ .State.Pid }}” <container>) //将<container>换成你的容器id 通过这个 PID,就可以连接到这个容器: $ nsenter –target $PID –mount –uts –ipc –net –pid 更简单的,建议大家下载 .bashrc_docker,并将内容放到 .bashrc 中。
4. 如何在Python中使用ZeroMQ和Docker构建微服务架构
当想让一个容器做两件事情,或者使一个Docker镜像包含来自两个不同镜像的依赖库时,就需要知道每个镜像的Dockerfile。本文介绍了如何通过docker history命令来对Docker镜像进行反向工程,得到它们的Dockerfile,并组织到一个Dockerfile里然后build,从而实现想做的事情。
常言道,“不要重复发明轮子!”
在使用Docker时,构建自己的镜像之前,最好在Docker Hub寻找一些可以直接使用的镜像做练习。把软件架构分布到一系列容器中,每一个容器只做一件事情,这样的效果非常好。构建分布式应用的最好的基石是使用来自Docker Hub的官方镜像,因为可以信任它们的质量。
在某些情况下,可能想让一个容器做两件不同的事情。而在另外一些情况下,可能想让一个Docker镜像包含来自两个不同镜像的依赖库。如果有每个镜像的Dockerfile,这是非常简单的。将它们组织到一个Dockerfile里然后build就行。
然而,大多数时间都在使用Docker Hub上准备好的镜像,不会有它们的源Dockerfile。我花时间找一个可以合并(或flatten)两个不同Docker镜像的工具,当然没有它们的Dockerfile。也就是说在找一个能做下面这件事的东西:
image 1 --
\
---> merged_image_12
/
image 2 --
此前在GitHub上有两个相关的讨论(1、2),尽管它们都被关闭了。
这可能吗?
那么,是否存在工具能够像这样做吗:docker merge image2 image2 merged_image?
没有!
你甚至不可以用下面的方式来构建Dockerfile:
FROM image1
FROM image2
简而言之,在一个Dockerfile里不能有多个基础镜像。
但是我需要这个功能!
唯一的解决办法是取得这些镜像的Dockerfile,然后把它们组织到一个文件中,再进行构建。那么,我能在Docker Hub上获得一个镜像的Dockerfile吗? 幸运的是可以。它不能离线获取(译注:原文是online,但显然online时对于来自GitHub的自动构建镜像是可以直接获取的),但是你可以使用docker history命令,通过反向工程获取。
怎么来使用?
在你的机器上使用docker pull从Docker Hub下载镜像。
docker pull image1
docker pull image2
然后使用docker history来取得构建这两个容器时运行的命令。
docker history --no-trunc=true image > image1-dockerfile
docker history --no-trunc=true image2 > image2-dockerfile
接下来打开这两个文件,你可以看到每个镜像的命令堆栈。这是因为Docker镜像通过层(阅读更多)的方式来构建。即你在Dockerfile中键入的每一个命令所构建的新镜像,都是在之前的命令产生的镜像之上。所以你可以对镜像进行逆向工程。
限制
不能对镜像进行反向工程的唯一场景,是镜像的维护者在他的Dockerfile中使用了ADD或COPY命令。你会看到这样一行:
ADD file:1ac56373f7983caf22
或 ADD dir:cf6fe659e9d21535844
这是因为不知道维护者在他自己的机器上,包括镜像里使用了什么本地文件。
5. 如何在python脚本里调docker命令
在搭建开发环境时,我们都希望搭建过程能够简单,并且一劳永逸,其他的同事可以复用已经搭建好的开发环境以节省开发时间。而在搭建开发环境时,我们经常会被复杂的配置以及重复的下载安装所困扰。在Docker技术未出现之前,我们可以使用Pupet、Chef、Ansible等配置管理工具把复杂的配置管理起来,这样的管理配置技术仍然是目前比较流行的方式之一。配置管理工具使用的都是自己的DSL语法定义,考虑到环境的复杂性,配置一套通用的开发环境需要针对各个系统定制,对于大部分开发环境这种维护成本仍然是很高的。Docker技术出现之后,系统的依赖问题得到了彻底的解决,我们可以通过镜像的方式简化环境的安装。结合Docker的开发部署工具Fig,我们可以使用fig.yml文件来定义所有的环境,一次定义,多处使用,简单而且高效。
6. 如何制作 Python 的 Docker 镜像
作基础镜像
选择 Ubuntu 官方的 14.04 版本为我们依赖的系统镜像。
FROM ubuntu:trusty
因所有官方镜像均位于境外服务器,为了确保所有示例能正常运行,可以使用与官方镜像保持同步的 DaoCloud 境内镜像:
dockerfile
FROM cloud.io/ubuntu:trusty
设置镜像的维护者,相当于镜像的作者或发行方。
MAINTAINER Captain Dao <[email protected]>
用 RUN 命令调用 apt-get 包管理器安装 Python 环境所依赖的程序包。
安装依赖包相对比较固定,因此该动作应该尽量提前,这样做有助于提高镜像层的复用率。
安装完依赖后打扫卫生可以显着的减少镜像大小。
RUN apt-get update && \
apt-get install -y python \
python-dev \
python-pip && \
rm -rf /var/lib/apt/lists/*
7. 如何构建基于docker的开发环境
一、基本思路
1. 创建一个用于开发Django App的目录
mkdir django-example && cd django-example
2. 构建基本开发环境
touch Dockerfile
touch pip.conf requirements.txt
pip.conf文件填入以下内容,以便一会用pip安装Python 模块时使用阿里云镜像加速:
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
requirements.txt文件中填入要安装的Python 模块:
django
编写构建开发环境的Dockerfile文件,填入以下内容:
# MAINTAINER Gevin <[email protected]>
# DOCKER-VERSION 1.12.0
#
# Dockerizing Python: Dockerfile for building python applications
FROM python:2.7.12
MAINTAINER Gevin <[email protected]>
WORKDIR /usr/src/app
# 使用阿里云的pip镜像
COPY pip.conf /root/.pip/pip.conf
COPY requirements.txt /usr/src/app/requirements.txt
RUN pip install -r /usr/src/app/requirements.txt
EXPOSE 8000
CMD ["bash"]
然后执行下面命令构建镜像:
docker build -t gevin/django-example:0.1 .
构建成功后,执行docker images命令,可以查看到当前构建好的image
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gevin/django-example 0.1 1855fc3c8062 12 hours ago 698.9 MB
3. 使用构建的image拉起开发环境
执行下面命令,可以以前台形式拉起django-example镜像的一个container:
docker run -it --rm -v $(pwd):/usr/src/app gevin/django-example:0.1
上面命令使用了data volume,把当前目录挂载到container中的工作目录下,这样当前目录下的所有文件都会映射到container的工作目录下,在工作目录下的所有改动,也都会保存到宿主机的当前目录下。
4. 创建django项目
上一步的命令创建了一个安装了django的交互式的container,直接在该container中执行创建django项目的命令即可:
root@7c91f460599f:/usr/src/app# django-admin startproject dj_example
上述命令,在container中基于django的命令创建了一个django项目,由于上一步操作时把宿主机的当前目录挂载到container的工作目录下,因此,刚刚在container中创建的django项目,在宿主机上也能看到。
container:
root@7c91f460599f:/usr/src/app# lsDockerfile dj_example pip.conf requirements.txt
宿主机:
django-example ls
Dockerfile dj_example pip.conf requirements.txt
5. 启动django项目
docker run -it --rm -p 8000:8000 -v $(pwd):/usr/src/app gevin/django-example:0.1 python dj_example/manage.py runserver 0.0.0.0:8000
二、Docker-compose与Django环境的结合
每次使用上面章节中介绍的冗长命令来使用django环境非常麻烦,docker-compose可以简化操作。
首先在当前目录下创建docker-compose.yml文件:
➜ django-example touch docker-compose.yml
然后在该文件中写入如下内容:
version: '2'
services:
django-example:
image: gevin/django-example:0.1
volumes:
- ./dj_example:/usr/src/app
ports:
- 8000:8000
command: python manage.py runserver 0.0.0.0:8000
执行下面命令即可拉起django服务:
➜ django-example docker-compose up# Starting djangoexample_django-example_1# Attaching to djangoexample_django-example_1
在浏览器中访问http://localhost:8000,即可看到默认的django页面
注:
上面的docker-compose文件,把./dj_example目录挂载到/usr/src/app,免去执行django命令时,需要对应到下级目录的麻烦,但这样隐藏了原来container中的requirements.txt文件,需要注意。
基于docker-compose 执行django 命令
使用docker-compose 的 run命令,可以在容器内执行相应操作,如:
对django服务的数据库做migrate操作:
docker-compose run django-example python manage.py migrate
创建超级用户:
docker-compose run django-example python manage.py createsuperuser# Username (leave blank to use 'root'): gevin# Email address:# Password:# Password (again):# Superuser created successfully.
创建成功后,访问http://localhost:8000/admin,即可使用刚创建的用户(即gevin),登录数据库管理页面
由于使用了数据卷,保存在sqlite数据库中的数据会一直有效。
三、简化方案
上面方案已经成功构建了django 环境,并应用于开发。上面的方案主要是为了阐述实现思路,在实际操作起来至少有两个麻烦:(1)需要进入容器里面创建django项目;(2)由于django项目是建立在当前目录的子目录下,使用docker-compose 时为了命令简单通用,更换了数据卷。
在实践中,利用docker-compose的run命令,没必要进入容器创建django项目;只要把django项目建立在当前目录下,也没必要更换数据卷了。
因此,可以把上面的方案再理一下,按下面步骤构建开发环境,并应用到开发中去。
Outline:
创建Dockerfile文件
构建镜像
创建docker-compose文件
创建项目
拉起项目
- # MAINTAINER Gevin <[email protected]>
- # DOCKER-VERSION 1.12.0
- #
- # Dockerizing Python: Dockerfile for building python applications
- FROM python:2.7.12
- MAINTAINER Gevin <[email protected]>
- WORKDIR /usr/src/app
- # 使用阿里云的pip镜像
- COPY pip.conf /root/.pip/pip.conf
- COPY requirements.txt /usr/src/app/requirements.txt
- RUN pip install -r /usr/src/app/requirements.txt
- EXPOSE 8000
- CMD ["bash"]
- docker build -t gevin/django-example:0.1 .
- version: '2'
- services:
- django-example:
- image: gevin/django-example:0.1
- volumes:
- - .:/usr/src/app
- ports:
- - 8000:8000
- command: python manage.py runserver 0.0.0.0:8000
- docker-compose run django-example django-admin startproject dj_project .
- docker-compose run django-example python manage.py migrate
- docker-compose run django-example python manage.py createsuperuser
- docker-compose up
- 作者:Gevin
- 链接:http://www.jianshu.com/p/29c422ae7c58
- 来源:简书
- 着作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1. 创建Dockerfile文件
对Python开发环境而言,最好再创建pip.conf和requirements.txt文件,以便方便安装项目必须的Python依赖,其他语言的开发环境就具体情况而定。
以Python为例,Dockerfile 内容如下:
2. 构建镜像
3. 创建docker-compose文件
docker-compose文件内容如下:
4. 创建项目
果然需要migrate数据库,创建超级用户等,可以在这里一并创建,也可以在后面的开发中再创建:
5. 拉起项目
四、其他
Gevin认为,虽然基于docker可以构建开发环境,但还是vagrant用起来更舒服,docker更加适合做CI,测试和部署。
实际工作中如何使用docker,就仁者见仁,智者见智了。
8. 如何在docker上运行python工程
Docker容器运行后,如何进入容器进行操作呢?起初我是用SSH。如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可。当我启动了五个容器后,每个容器默认是没有配置SSH Server的,安装配置SSHD,映射容器SSH端口,...
9. 如何配置docker 部署到python
安装Docker 借助apt-get命令,安装Docker是件轻而易举的事。 $ sudo apt-get install docker.io 为了允许非根用户也可以运行Docker,将你自己添加到docker群组。下面这个命令会允许当前用户运行Docker,无需根用户权限。