当前位置:   article > 正文

【docker】docker基础概念与简单python程序在docker上的运行(win10安装)_win10 使用docker部署python

win10 使用docker部署python

本篇为个人学习docker的总结与记录,仅代表个人观点

1. docker是一种基于linux内核,使用go语言开发的一款开源容器,可以让运行的程序与宿主(主机)隔离

2.docker的优势:

  1. 高效利用系统资源,不需要安装虚拟机
  2. 启动时间快(对比虚拟机)
  3. 一致的运行环境:当你的程序需要跑在其他设备上,可以把整个docker打包过去
  4. 持续交付和部署:开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署
  5. 轻松迁移,同3,4
  6. 轻松维护和扩展:Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易

综上,docker是一个良好的虚拟机替代品

3.基本概念:

a.镜像:类似root的文件系统,提供容器运行时所需的程序、库、资源、配置,配置参数。镜像不包含任何动态数据,其内容在构建之后也不会被改变。使用分层存储

镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

b.容器:容器就是镜像的一个实例,就是一个进程,可以被创建、启动、停止、删除、暂停等。容器运行时,在镜像上创建一个容器存储层,为容器运行时读的而准备,容器消亡时,存储层也消亡
c.仓库:Docker Registry可以集中的存储、分发镜像;一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。即:一个仓库对应一个发布的软件>

4.安装与应用:

下载:

我是在WIN10上安装的docker,Docker for Windows 支持 64 位版本的 Windows 10 Pro,且必须开启 Hyper-V。下载完之后,注册,启动,任务状态栏出现小海豚(或者小轮船????)标记。
在这里插入图片描述

然后打开CMD,输入 docker pull ubuntu:18.04
*ps:命令格式为:docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签],Docker Registry 地址的地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub,这里我使用了默认地址,从Docker Hub下载,直接指定了仓库名和标签 *
在这里插入图片描述

运行:

命令docker image ls 可以查看当前已安装的镜像
这里出现了意外的重复
命令 docker run -it --rm [镜像名]:[标签号]可以运行镜像,root之内和linux命令一样
在这里插入图片描述
-it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
–rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。

使用docker运行python程序

python的很多包在window上都是不支持的,而装linux虚拟机也不是很方便,而且很占电脑资源,使用docker作为python程序的载体才是我真正安装docker的原因,方法有两种,一是直接运行ubuntu镜像,然后按照linux上装python的步骤安装python并运行;另外一种是构建一个自己的镜像,步骤如下:

1.安装python镜像(如果你需要用python作为基础镜像,否则不需要这一步):

在这里插入图片描述

2.构建一个自己的镜像用于运行python:

a. 在宿主机上创建一个路径,用于存放后续内容
b. 在该路径下创建Dockerfile (名字是固定的),内容如下:

FROM python:3.7

RUN mkdir /doccode \
	&& apt-get update \
	&& apt-get install -y libsctp-dev lksctp-tools \
	&& pip install pysctp \
	&& pip install pysctp3

COPY ./a.py /doccode
WORKDIR /code

CMD ["python", "/doccode/a.py"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

其中,FROM 关键字定义的是基础镜像,RUN后面是在基础镜像上运行的命令,这里写的是我要做的sctp client功能所需要的包和需要开启的功能,可以根据自己的python脚本内容自行定制,COPY [源路径] [目标路径] 是把宿主机上的文件拷到镜像中,a.py即我要运行的python程序(Ps:这里的路径不是Dockerfile所在地址为根目录,而是上下文地址,上下文地址可以在build时指定,如后面build时我输入的 C:\Users\tinhao\docPython>docker build -t pydoc . 这里最后的.就是指定上下文地址,这里 . 代表当前路径),最后一个CMD标准格式是:
a.shell 格式:CMD <命令>
b.exec 格式:CMD [“可执行文件”, “参数1”, “参数2”…]
用来指定容器执行的主进程(类似开机启动的概念),比如这里我设置为 “python”, “/doccode/a.py” 运行镜像时,就会直接开始执行我的a.py文件

3.build(构建)镜像:

在这里插入图片描述
其中,pydoc为自己指定的镜像名(想起啥名都可以),后面的. 表示上下文地址为当前路径(…/tinhao/docPython, 也可以指定其他的路径)。build成功之后,使用docker image ls可以查看到自己构建的镜像
在这里插入图片描述
这里的pydoc即我刚刚创建的镜像

4.运行自己构建的镜像

然后按照普通镜像运行方式运行即可 docker run -it pydoc ,查看容器 docker ps -a 可以看到该镜像对应的容器:
在这里插入图片描述
Ps:这里exited状态为1是因为我只用了client段的py文件= =连不上server所以会报错,即我这个py文件会报错,所以容器直接异常退出了,正常能运行的py文件是不会这个样子滴~

附上本篇参考文档,也是docker各命令及功能详解:
https://yeasy.gitbooks.io/docker_practice/image/dockerfile/cmd.html

基本常用内容写完了~ 么么哒~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/54915?site
推荐阅读
相关标签
  

闽ICP备14008679号