当前位置:首页 » 编程语言 » python部署docker

python部署docker

发布时间: 2022-06-28 15:15:48

1. 如何运用docker配合python开发环境实例

由于开发一个Python程序时需要依赖大量的三方库包,且python2和3本身就有互不兼容的地方,我们往往需要一个隔离的环境,来避免版本影响造成的bug。

传统的做法大多数人可能会选择virtualenv来隔离,但是它有很多明显的缺点:

  • 无法提供完全的隔离

  • 如果不想在正式环境中使用,它就会造成差异

  • 而随着容器技术的日渐成熟和普及,Docker无疑成为解决这个问题的最优解

    本文将主要介绍docker和flask的配合开发

    步骤:

    1.安装Docker(这里不详细介绍)

  • # 参考命令

  • sudo wget -qO- httpr.com/ | sh

  • 2.应用目录结构

  • ├──fanxiangce

  • _docker

  • ├── Dockerfile

  • ├── Readme.md

  • └─fanxiangce

  • └──app

  • ├── manage.py

  • └── requirements

  • ├── common.txt

  • 3.编写Dockerfile(详细命令解释可以参考hocker.com/engine/reference/builder/#environment-replacement)

  • ##########################################################

  • # 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


  • 4. build镜像

  • # 在Dockerfile同级目录下

  • sudo docker build -t jason/webdemo .

  • 成功后显示Successfully,同时返回镜像ID,如图:

    8.后续

    如果容器关闭后需要再次进入,可以用如下命令

  • # 查看当前容器

  • sudo docker ps -a

  • # 启动容器

  • docker start webdemo

  • # 进入容器

  • docker attach webdemo

  • 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

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文件

  • 创建项目

  • 拉起项目

  • 1. 创建Dockerfile文件

    对Python开发环境而言,最好再创建pip.conf和requirements.txt文件,以便方便安装项目必须的Python依赖,其他语言的开发环境就具体情况而定。

    以Python为例,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"]

  • 2. 构建镜像

  • docker build -t gevin/django-example:0.1 .

  • 3. 创建docker-compose文件

    docker-compose文件内容如下:

  • 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

  • 4. 创建项目

  • docker-compose run django-example django-admin startproject dj_project .

  • 果然需要migrate数据库,创建超级用户等,可以在这里一并创建,也可以在后面的开发中再创建:

  • docker-compose run django-example python manage.py migrate


  • docker-compose run django-example python manage.py createsuperuser

  • 5. 拉起项目

  • docker-compose up

  • 四、其他

    Gevin认为,虽然基于docker可以构建开发环境,但还是vagrant用起来更舒服,docker更加适合做CI,测试和部署。

    实际工作中如何使用docker,就仁者见仁,智者见智了。



  • 作者:Gevin

  • 链接:http://www.jianshu.com/p/29c422ae7c58

  • 来源:简书

  • 着作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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,无需根用户权限。

热点内容
疫情防控健康码预警机制演练脚本 发布:2025-02-04 23:58:46 浏览:36
分治算法java 发布:2025-02-04 23:41:15 浏览:592
安卓app点进去就闪退怎么回事 发布:2025-02-04 23:36:56 浏览:779
宏按键编程 发布:2025-02-04 23:05:11 浏览:904
微信隐形密码在哪里设置 发布:2025-02-04 23:05:01 浏览:866
android的补间动画 发布:2025-02-04 23:03:42 浏览:416
焦虑解压方式 发布:2025-02-04 23:01:18 浏览:210
php保存txt 发布:2025-02-04 22:55:20 浏览:287
安卓哪个国家免费用 发布:2025-02-04 22:39:54 浏览:64
电脑配置低但想玩小偷模拟器怎么办 发布:2025-02-04 22:39:03 浏览:238