2024年10月dockerfile运行多个python子代码(如何运用docker配合python开发环境实例)

 更新时间:2024-10-12

  ⑴dockerfile运行多个python子代码(如何运用docker配合python开发环境实例

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

  ⑶创建一个用于开发DjangoApp的目录mkdirdjango-example&&cddjango-example.构建基本开发环境touchDockerfiletouchpip.confrequirements.txtpip.conf文件填入以下内容,以便一会用pip安装Python模块时使用阿里云镜像加速:index-url=trusted-host=mirrors.aliyun.requirements.txt文件中填入要安装的Python模块:django编写构建开发环境的Dockerfile文件,填入以下内容:#MAINTAINERGevin#DOCKER-VERSION..##DockerizingPython:DockerfileforbuildingpythonapplicationsFROMpython:..MAINTAINERGevinWORKDIR/usr/src/app#使用阿里云的pip镜像COPYpip.conf/root/.pip/pip.confCOPYrequirements.txt/usr/src/app/requirements.txtRUNpipinstall-r/usr/src/app/requirements.txtEXPOSECMD然后执行下面命令构建镜像:dockerbuild-tgevin/django-example:..构建成功后,执行dockerimages命令,可以查看到当前构建好的imagedockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEgevin/django-example.fhoursago.MB.使用构建的image拉起开发环境执行下面命令,可以以前台形式拉起django-example镜像的一个container:dockerrun-it--rm-v$(pwd):/usr/src/appgevin/django-example:.上面命令使用了datavolume,把当前目录挂载到container中的工作目录下,这样当前目录下的所有文件都会映射到container的工作目录下,在工作目录下的所有改动,也都会保存到宿主机的当前目录下。.创建django项目上一步的命令创建了一个安装了django的交互式的container,直接在该container中执行创建django项目的命令即可:rootcff:/usr/src/app#django-adminstartprojectdj_example上述命令,在container中基于django的命令创建了一个django项目,由于上一步操作时把宿主机的当前目录挂载到container的工作目录下,因此,刚刚在container中创建的django项目,在宿主机上也能看到。container:rootcff:/usr/src/app#lsDockerfiledj_examplepip.confrequirements.txt宿主机:django-examplelsDockerfiledj_examplepip.confrequirements.txt.启动django项目dockerrun-it--rm-p:-v$(pwd):/usr/src/appgevin/django-example:.pythondj_example/manage.pyrunserver...:

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

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

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

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

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

  ⑼安装Docker(这里不详细介绍sudowget-qO-

  ⑽详解Docker——你需要知道的Docker进阶知识五

  ⑾Dockerfile是一个文本文件,其中包含了构建Docker镜像需要执行的命令序列。使用dockerbuild命令从Dockerfile中读取指令来构建镜像。构建镜像时,该过程的第一件事是将Dockerfile文件所在目录下的所有内容发送给Docker守护进程。所以大多数情况下,最好创建一个新的目录,在其中保存Dockerfile,以及构建镜像所需的其它文件。Dockerfile文件所在目录也被称为构建上下文(context。使用FROM指令指定一个基础镜像,后续指令将在此镜像基础上运行:在Dockerfile中可以指定一个用户,后续的RUN,CMD以及ENTRYPOINT指令都会使用该用户身份去执行,该用户必须已存在。除了指定用户之外,还可以使用WORKDIR指定当前工作目录(CWD,RUN,CMD,COPY,ADD指令将在指定的工作目录中执行。RUN指令用于执行命令,该指令有两种形式:例如我们执行更新命令:CMD的使用方式跟RUN类似,不过在一个Dockerfile文件中只能有一个CMD指令,如果有多个,则只有最后一个会生效。该指令指定了启动容器时要执行的命令,例如:可以在dockerrun时指定命令来覆盖默认的CMD命令,比如dockerrunimageecho“helloshiyanlou“。CMD指令还有一种特殊用法。在Dockerfile中,如果使用ENTRYPOINT指令指定了入口命令,则CMD指令的内容会作为ENTRYPOINT指令的参数:ENTRYPOINT指令会覆盖CMD指令作为容器运行时的默认指令,并且该指令不会被dockerrun时指定的指令覆盖,如下示例:上述文件构建出来的镜像,使用dockerrunimage等同于dockerrunimagels-a-l。使用dockerrunimage-i-s等同于dockerrunimagels-a-i-s。即CMD指令的值会被当作ENTRYPOINT指令的参数附加到ENTRYPOINT指令的后面,只有CMD指令可以被覆盖。COPY和ADD都用于将构建上下文中的文件,目录等复制到镜像中。使用方式如下:``可以指定多个,但是其路径不能超出构建上下文范围,即必须在Dockerfile同级或子目录中。不需要预先存在,不存在时会自动创建,如果使用相对路径,则为相对于工作目录的路径。COPY和ADD的不同之处在于,ADD可以添加远程文件,并且``可以是gzip或tar等格式的压缩文件,添加时会自动进行解压。ENV指令用于设置环境变量:VOLUME指令指定要创建的挂载路径,在容器运行时,将为每个挂载路径创建一个匿名卷并挂载上去:上述指令将会在容器运行时,创建两个匿名卷,并分别挂载到容器中的/data和/data路径。学习了上面这些常见的Dockerfile指令之后,可以使用这些指令来构建一个镜像。如下所示,构建一个提供ssh服务的镜像:构建镜像查看镜像启动容器查看已经启动的容器测试远程登录pose是运行由多个容器组成的Docker应用的工具,使用pose可以一次启动一组有关联的服务,每个服务由来自同一镜像的单个或多个容器组成。在复杂应用中,应用一般由多个服务(service组成,例如一个网站后台通常包含Web服务、数据库服务、缓存服务、消息队列服务等。使用pose的步骤如下:目前有三种版本的pose文件格式:下载docker-pose-Linux-x_下载成功后,为了方便使用,可以将其添加到PATH路径下执行完成后,就能够在终端下直接使用docker-pose命令了:接下来我们将创建一个Web应用,该应用包含两个容器:项目目录结构如下:首先app/web/web.py文件,写入下面的内容:上述代码创建了一个简单的Web应用。该应用会连接redis服务,在访问/页面时,自动将变量number加。app/web/requirements.txt文件,输入如下内容:requirements.txt文件存放了Web应用依赖的第三方库包的名称和版本信息。app/web/Dockerfile文件,添加如下内容上述Dockerfile定义了Web应用镜像,该镜像基于python:.基础镜像,在其基础上安装了应用依赖的库包,并通过CMD指令指定了应用的启动命令。app/docker-pose.yml文件:该docker-pose.yml文件定义了两个服务,分别为web和redis服务,并且配置了web服务的端口映射和挂载目录。depends_on定义了依赖关系,被依赖的服会先启动。进入app目录,执行docker-poseup命令来启动应用:启动成功后,就可以打开网址...:来访问Web应用了。另外一些命令:

  ⑿超值一篇分享,Docker:从入门到实战过程全记录

  ⒀想要真正理解Docker,就不得不从虚拟化技术的发展历程说起。普遍认为虚拟化技术经历了物理机时代、虚拟机时代,目前已经进入到了容器化时代。可以说,Docker是虚拟化技术不断发展的必然结果。

  ⒁那么,什么是容器呢?容器和虚拟机有什么不同?Docker和容器又是什么关系呢?搞明白这几个问题,Docker的概念就清晰了。

  ⒂借助于VMWare等软件,可以在一台计算机上创建多个虚拟机,每个虚拟机都拥有独立的操作系统,可以各自独立的运行程序。这种分身术虽然隔离度高(操作系统级,使用方便(类似物理机,但占用存储资源多(GB级、启动速度慢(分钟级的缺点也是显而易见的。

  ⒃相较于虚拟机,容器(Container是一种轻量型的虚拟化技术,它虚拟的是最简运行环境(类似于沙盒而非操作系统,启动速度快(秒级、占用存储资源少(KB级或MB级,容器间隔离度为进程级。在一台计算机上可以运行上千个容器,这是容器技术对虚拟机的碾压式优势。

  ⒄容器、镜像和Docker

  ⒅Docker是一个开源的应用容器引擎,可以创建容器以及基于容器运行的程序。Docker可以让开发者打包他们的应用和依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。

  ⒆听起来很简单,但是在Docker和容器之间,还隐藏着一个镜像的概念,令初学者颇感困惑。本质上,Docker镜像是一个特殊的文件系统,它提供容器运行时所需的程序、库、资源、配置等文件。Docker镜像类似于一个py文件,它需要Docker的运行时(类似于Python解释器运行。镜像被运行时,即创建了一个镜像的实例,一个实例就是一个容器。

  ⒇作为容器引擎,Docker为容器化的应用程序提供了开放的标准,使得开发者可以用管理应用程序的方式来管理基础架构,实现快速交付、测试和部署代码。随着容器的大量使用,又产生了如何协调、调度和管理容器的问题,Docker的容器编排应运而生。

  ⒈ks是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理,是一个开源的,用于管理云平台中多个主机上的容器化的应用,ks的目标是让部署容器化的应用简单并且高效,ks提供了应用部署、规划、更新、维护的一种机制。

  ⒉Docker和ksr都是以containerd(容器化标准作为运行时,因此使用Docker创建的镜像完全可以在ks中无障碍的使用。

  ⒊在ubuntu中安装

  ⒋在linux系统中安装Docker非常简单,官方为我们提供了一键安装脚本。这个方法也适用于Debian或CentOS等发行版。

  ⒌安装过程如果出现超时,不要灰心,多试几次,总会成功的。安装完成后,Docker只能被root用户使用,可以使用下面的命令取消权限限制:

  ⒍然后,重启docker服务:

  ⒎最后,关闭当前的命令行,重新打开新的命令行就可以了。

  ⒏顺便提一下,如果在CentOS下安装,可能会出现一堆类似于下面的错误:

  ⒐这是由于docker和Podman冲突造成的,需要先卸载Podman:

  ⒑Docker的运行,依赖linux的环境,官方提供了DockerDesktopforWindows,但是它需要安装Hyper-V,Hyper-V是微软开发的虚拟机,类似于VMWare或VirtualBox,仅适用于Windows。这个虚拟机一旦启用,QEMU、VirtualBox或VMWareWorkstation及以下版本将无法使用!如果你必须在电脑上使用其他虚拟机(例如开发Android应用必须使用的模拟器,请不要使用Hyper-V!

  ⒒我的电脑是win家庭版,不能直接安装hyper-v,需要将下面的命令保存到cmd文件中:

  ⒓然后在cmd文件上点击右键,选择使用管理员运行。执行完毕后会重启,在重启的过程中进行安装。

  ⒔Helloworld

  ⒕docker服务启动的情况下,运行下面的命令:

  ⒖第一次运行时,因为本地没有ubuntu:.镜像,docker会自动从镜像服务器下载。下载过程可能需要多试几次,只要成功一次,以后执行就不再需要下载了。

  ⒗docker官方还提供了一个hello-world镜像,可以直接运行:

  ⒘此命令省略了镜像版本和运行参数,docker使用latest作为版本,即最新版本。

  ⒙从helloworld的例子中,也可以体验到,docker实例的运行是非常快的。

  ⒚docker官方的镜像库比较慢,在进行镜像操作之前,需要将镜像源设置为国内的站点。

  ⒛新建文件/etc/docker/daemon.json,输入如下内容:

  然后重启docker的服务:

  执行命令dockerimages可以查看

  当前我本地只有刚才安装的两个镜像。

  执行命令dockersearch镜像名称可以从docker镜像库中查找镜像。

  最好选择官方(OFFICIAL的镜像,这样的镜像最稳定一些。

  执行命令dockerpull镜像名称:版本号即可下载新的镜像。

  镜像下载后,就可以使用镜像来创建容器了。

  执行命令dockerrun即可启动容器,也就是创建某个镜像的实例。dockerrun命令非常复杂,可以先执行一个dockerrun--help来查看帮助:

  比如我们要执行python的shell,需要添加-it参数,即:dockerrun-itpython:.

  将宿主机的文件挂载到容器

  docker容器与宿主机是隔离的,要想让容器内的程序能访问宿主机上的文件,需要通过-v参数将宿主机的文件挂载到容器中。

  比如我们在宿主机上有一个hello.py,可以打印hello,想要在python容器中执行,就需要进行挂载。-v后还需要接两个参数,分别是宿主机的目录和容器内的目录,两者使用:分隔,路径必须都是绝对路径。

  我的hello.py保存在主目录的/docker_test目录中,将这个目录挂载到容器的/docker_test目录,然后在容器内执行python/docker_test/hello.py:

  我们修改一下hello.py,创建一个socket服务端,并监听端口,当有客户端连接时,打印客户端的地址,先客户端发送hello,然后关闭连接:

  接下来,尝试用tel命令连接,结果却是失败的。原因是,...是宿主机的ip地址,是容器的端口,这与我们的习惯稍微有些不同。事实上,docker的容器是非常轻量的,它并没有自己的网络,要想访问容器的端口,需要进行端口映射,将容器的某端口映射到宿主机的端口,客户端连接时,只要与宿主机的端口进行连接就可以了。

  需要注意的是,上面的代码创建的服务器,无论如何也不可能被客户端连接,因为代码中绑定了...的ip,在容器中运行时,需要绑定所有ip,即...。

  然后,再使用-p参数,-p还需要三个参数,即宿主机的ip地址、宿主机的端口、容器的端口,三者之间使用:分隔。一般的,可以将宿主机的ip地址省略,只写宿主机的端口:容器的端口即可。

  这样,就将容器的端口映射到了宿主机的端口,使用:

  即可与容器中的服务器进行连接。

  上面的服务运行之后,可以使用dockerps命令,查看运行中的容器:

  显示的内容有下面几列:

  要想结束容器,可以使用dockerkill容器ID命令。

  一般而言,当我们的程序开发完成后,会连同程序文件与运行环境一起制作成一个新的镜像。

  要制作镜像,需要编写Dockerfile。DockeFile由多个命令组成,常用的命令有:

  注意,Docker镜像中有一个层的概念,每执行一个RUN命令,就会创建一个层,层过多会导致镜像文件体积增大。尽量在RUN命令中使用&&连接多条shell命令,减少RUN命令的个数,可以有效减小镜像文件的体积。

  自制显示文本文件内容镜像

  编写cat.py,接收一个文件名,由python读取文件并显示文件的内容:

  这个例子比较简单,缩写Dockerfile如下:

  这个Dockerfile的含义是:

  需要说明的是,ENTRYPOINT有两种写法:

  这里采用第二种写法,是因为我们要在外部给容器传递参数。执行命令编译Docker镜像:

  这个命令中,-t的含义是目标,即生成的镜像名为hello,版本号为.,别忘了最后那个.,这叫到上下文路径,是指docker在构建镜像,有时候想要使用到本机的文件(比如复制,dockerbuild命令得知这个路径后,会将路径下的所有内容打包。

  这样,我们的第一个镜像就制作完成了,使用下面的命令执行它:

  即可看到~/docker_test/cat/files/test.txt的内容。

  自制web服务器镜像

  我们使用tornado开发一个网站,而python的官方镜像是没有tornado库的,这就需要在制作镜像时进行安装。

  测试的ws.py如下:

  编写Dockerfile文件如下:

  在此我们验证一下CMD与ENTRYPOINT的区别。在Dockerfile所在有目录下执行如下命令:

  执行完成后,再使用dockerimages使用就可以看到生成的镜像了,然后使用下面的命令运行:

  在浏览器中输入宿主机的ip和端口,就可以看到页面了。

  在这个例子中,我使用的运行命令是CMD,如果在dockerrun中指定的其他的命令,此命令就不会被执行,如:

  此时,容器中被执行的是python命令,而不是我们的服务。在更多情况下,我们希望在dockerrun命令中为我们的服务传参,而不是覆盖执行命令,那么,我们应该使用ENTRYPOINT而不是CMD:

  上面这种写法,是不支持传递参数的,ENTRYPOINT和CMD还支持另一种写法:

  使用这种写法,dockerrun命令中的参数才可以传递给hello.py:

  这个命令中,--port=被作为参数传递到hello.py中,因此容器内的端口就成了。

  在生产环境中运行时,不会使用-it选项,而是使用-d选项,让容器在后台运行:

  这种方式下,即使当前的控制台被关闭,该容器也不会停止。

  自制apscheduler服务镜像

  接下来,制作一个使用apscheduler编写的服务镜像,代码如下:

  Dockerfile也是信手拈来:

  应该可以运行了,文件复制需要两个目录,在运行时,可以使用两次-v来挂载不同的目录:

  前面用到的官方python镜像大小足足MB,在这个基础上,再安装用到的第三方库,添加项目需要的图片等资源,大小很容易就超过个G,这么大的镜像,网络传给客户非常的不方便,因此,减小镜像的体积是非常必要的工作。

  dockerhub上有个一python:.-alpine镜像,大小只有.MB。之所以小,是因为alpine是一个采用了busybox架构的操作系统,一般用于嵌入式应用。我尝试使用这个镜像,发现安装一般的库还好,但如果想安装numpy等就会困难重重,甚至网上都找不到解决方案。

  还是很回到基本的路线上来,主流的操作系统镜像,ubuntu的大小为.MB,centos的大小为MB——这也算是我更喜欢使用ubuntu的一个重要原因吧!使用ubuntu作为基础镜像,安装python后的大小为MB,再安装pip后的大小一下子上升到了MB,要是再安装点其他东西,很容易就赶上或超过python官方镜像的大小了。

  看来,寻常路线是很难压缩镜像文件体积了。幸好,还有一条曲线救国的路可走,这就是多阶段构建法。

  多阶段构建的思想其实很简单,先构建一个大而全的镜像,然后只把镜像中有用的部分拿出来,放在一个新的镜像里。在我们的场景下,pip只在构建镜像的过程中需要,而对运行我们的程序却一点用处也没有。我们只需要安装pip,再用pip安装第三方库,然后将第三方库从这个镜像中复制到一个只有python,没有pip的镜像中,这样,pip占用的MB空间就可以被节省出来了。

  在ubuntu镜像的基础上安装python:

  这样,就生成了python:.-ubuntu镜像。

  在python:.-ubuntu的基础上安装pip:

  这样,就生成了python:.-ubuntu-pip镜像。

  多阶段构建目标镜像:

  这个dockerfile需要解释一下了,因为它有两个FROM命令。

  第一个是以python:.-ubuntu-pip镜像为基础,安装numpy,当然,在实际应用中,把所有用到的第三方库出写在这里。

  第二个FROM是以FROMpython:.-ubuntu镜像为基础,将第三方库统统复制过来,COPY命令后的–from=的意思是从第阶段进行复制。实际应用中再从上下文中复制程序代码,添加需要的ENTRYPOINT等。

  这然,用于我们项目的镜像就做好了。比使用官方python镜像构建的版本,小了大约MB。

  到此,我们的镜像已经制作好了,可是,镜像文件在哪,如何在生产环境下运行呢?

  刚才使用dockerimages命令时,已经看到了生成的镜像:

  我们可以使用dockersave命令将镜像保存到指定的文件中,保存的文件是一个.tar格式的压缩文件:

  将hello.tar复制到生产环境的机器上,然后执行导入命令:

  如何基于docker构建和发布Python应用程序

  Docker是一个开源的容器平台,可以用于构建、发布和运行Python应用程序。下面是一个大致的构建和发布Python应用程序的步骤:

  这些步骤可以通过脚本自动化来完成,例如使用CI/CD工具(如Jenkins、TravisCI等。这样,每次代码提交时,可以自动构建、测试、发布和部署应用程序,从而实现快速和高效的交付。

  dockerfileCMD执行多条命令且需要支持环境变量

  运行时机不太一样。RUN是在Build时运行的,先于CMD和ENTRYPOINT。Build完成了,RUN也运行完成后,再运行CMD或者ENTRYPOINT。ENTRYPOINT和CMD的不同点在于执行dockerrun时参数传递方式,CMD指定的命令可以被dockerrun传递的命令覆盖,例如,如果用CMD指定:...CMD然后运行dockerrunCONTAINER_NAMEechofoo那么CMD里指定的echo会被新指定的echo覆盖,所以最终相当于运行echofoo,所以最终打印出的结果就是:foo而ENTRYPOINT会把容器名后面的所有内容都当成参数传递给其指定的命令(不会对命令覆盖,比如:...ENTRYPOINT然后运行dockerrunCONTAINER_NAMEechofoo则CONTAINER_NAME后面的echofoo都作为参数传递给ENTRYPOING里指定的echo命令了,所以相当于执行了echo“echofoo“最终打印出的结果就是:echofoo另外,在Dockerfile中,ENTRYPOINT指定的参数比运行dockerrun时指定的参数更靠前,比如:...ENTRYPOINT执行dockerrunCONTAINER_NAMEbar相当于执行了:echofoobar打印出的结果就是:foobarDockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最后一个有效。执行dockerrun命令时,也可以添加-entrypoint参数,会把指定的参数继续传递给ENTRYPOINT,例如:...ENTRYPOINT然后执行:dockerrunCONTAINER_NAMEbar#注意没有echo那么,就相当于执行了echofoobar,最终结果就是foobar

  在docker下运行python

  步骤一:首先你得安装了docker步骤二:找到你的项目路径在终端输入cd+项目路径步骤三:找到docker安装相关插件?到docker目录下执行命令:docker-poseupscrapyd创建项目爬虫环境及运行docker镜像第四步:进入docker命令:docker-poseexecscrapybash(执行bash程序第五步:找到要执行文件的目录命令:cd?spider(进入spider)?命令:scrapycrawl+文件名报错与升级:镜像需要升级:拓展:中止爬取快捷键:control+?选中即复制control+w删除一个单词(mac电脑,window请自行百度哈哈)

  docker-pose部署python项目

  docker-pose.yml

  项目文件夹:demo的结构

  app.py文件内容如下:

  requirements.txt文件内容如下:

  Dockerfile文件内容如下:

  Dockerfile还可以这样写:

  和上一种写法稍稍有一点区别。

  docker-pose.yml

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

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

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

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

  安装Docker(这里不详细介绍#参考命令sudowget-qO-|sh

  ├──fanxiangce_docker??├──?Dockerfile??├──?Readme.md???└─fanxiangce????└──app????├──?manage.py??????????????????└──?requirements??????├──?mon.txt

  ##########################################################?#?Dockerfile?to?run?a?flask-based?web?application#?Based?on?an?centos:?image?###########################################################?Set?the?base?image?to?use?to?centos?FROM?centos:?#?Set?the?file?maintainer?MAINTAINER?jasonwang,?#?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??#?Install?Python?dependencies?RUN?pip?install?--upgrade?pipRUN?pip?install?-r?$DOCKYARD_SRCPROJ/requirements/mon.txt?#?Port?to?expose?EXPOSE??#?Copy?entrypoint?script?into?the?image?WORKDIR?$DOCKYARD_SRCPROJ

  build镜像#在Dockerfile同级目录下sudodockerbuild-tjason/webdemo.

  成功后显示Suessfully,同时返回镜像ID

  注意,此处-p映射的端口(主机端口:容器端口,容器端口应与flask应用定义的端口一致sudodockerimagessudodockerrun-it--namewebdemo-p:jason/webdemo/bin/bash

  在容器中启动flask应用pythonmanage.pyrunserver-p

  在浏览器输入...:即可访问应用

  如果容器关闭后需要再次进入,可以用如下命令#查看当前容器sudodockerps-a#启动容器dockerstartwebdemo#进入容器dockerattachwebdemo

您可能感兴趣的文章:

相关文章