指令全解:docker运行最简单python程序实践

描述

1、在docker上配置使用python3.8,输出"Hello World!"

2、使用pip安装包,并在python程序中使用

ubuntu 18.04 安装docker
ubuntu 18.04 docker 换源
本文参考链接

 

输出"Hello World!"

具体步骤

  1. 终端输入命令docker pull python:3.8
  2. 新建文件夹 test
  3. 进入文件夹新建文件 app.py
  4. 打开app.py 输入 print("Hello World"), 并保存退出
  5. 新建文件 Dockerfile
  6. 打开Dockerfile 输入如下
    FROM python:3.8
    WORKDIR /app
    ADD . /app
    CMD python app.py

    保存退出

  7. 在终端中进入test文件夹
  8. 终端输入 sudo docker build -t test .  不要漏了test后面的点,等待镜像生成
  9. 终端输入 sudo docker run test
  10. 屏幕输出Hello World

 

详细解释

docker pull python:3.8是从镜像仓库中拉取镜像python:3.8

Dockerfile 
FROM python:3.8  是使用镜像python:3.8
WORKDIR /app 是使用/app路径作为工作路径
ADD . /app 点对于终端来说就是当前文件夹
这句意思是将终端所在路径的文件夹里面的内容放到镜像的app文件夹中
CMD python app.py CMD是command的缩写
这句的意思是,使用python运行app.py

docker build -t test .
使用docker build命令 这个命令是构建镜像
-t test, -t是build的选项,这句意思是将新构建的镜像命名为test
.     最后的点不要忘记了,这个是告诉docker在哪个文件夹进行构建操作
docker build 更多选项  runoob

 

一些疑惑

/app 文件夹,是不是一定要是APP文件夹呢?

不是,随便起一个名字都行,我随便改为/new_app,然后程序依然可以执行

 

CMD python app.py,app.py不是在/app文件夹下面吗,直接这样使用不会报错?

我没有去验证,但是我猜workdir设置/app  让CMD直接打开在/app路径下了

 

这个构建的文件是被复制了一份到docker镜像中了吗?
如果是,复制到了哪里?
如果不是,那么是不是就不可以随便改动生成docker镜像所使用的那些文件了?

我直接删除了app.py,然后test镜像依然可以运行
所以应该是复制了,但不排除用了硬链接的方式
我这次将文件中的hello修改成了hell,但test镜像依旧输出了hello world
所以应该是真的复制了

 

使用pip安装包,并在程序中使用

1、在test文件夹中新建requirements.txt,其中输入

flask

2、在Dockerfile文件里面加入一句 RUN pip install -r requirements.txt 在Add语句后面,新Dockerfile如下

FROM python:3.8
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt
CMD python app.py

3、新的app.py 如下图

import pkg_resources

pkgs = [str(p) for p in pkg_resources.working_set]
print([p for p in pkgs if 'Flask' in p])

这个是将所有名字里含有Flask的包输出出来

4、终端输入 docker build -t flask_or_not .

5、终端输入 docker run flask_or_not

结果如下

指令全解:docker运行最简单python程序实践_第1张图片

 

详细解释

requirements.txt 是用来填写python依赖的,这里只填写了一个flask
如果更多依赖,就一直往后加就行
-r 是pip install 的选项 打全是 --requirement ,用来从给定需求文件中安装
pip install 更多选项

pkg_resources这个是python中用来查看包的一个模块
从working_set里面获取出有什么模块,然后看一看我们刚刚安装的包在不在里面
从输出来看,我们已经安装成功,直接import就能使用了

你可能感兴趣的:(linux,docker,python,ubuntu)