描述
1、在docker上配置使用python3.8,输出"Hello World!"
2、使用pip安装包,并在python程序中使用
ubuntu 18.04 安装docker
ubuntu 18.04 docker 换源
本文参考链接
输出"Hello World!"
具体步骤
- 终端输入命令docker pull python:3.8
- 新建文件夹 test
- 进入文件夹新建文件 app.py
- 打开app.py 输入 print("Hello World"), 并保存退出
- 新建文件 Dockerfile
- 打开Dockerfile 输入如下
FROM python:3.8 WORKDIR /app ADD . /app CMD python app.py
保存退出
- 在终端中进入test文件夹
- 终端输入 sudo docker build -t test . 不要漏了test后面的点,等待镜像生成
- 终端输入 sudo docker run test
- 屏幕输出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
结果如下
详细解释
requirements.txt 是用来填写python依赖的,这里只填写了一个flask
如果更多依赖,就一直往后加就行
-r 是pip install 的选项 打全是 --requirement ,用来从给定需求文件中安装
pip install 更多选项
pkg_resources这个是python中用来查看包的一个模块
从working_set里面获取出有什么模块,然后看一看我们刚刚安装的包在不在里面
从输出来看,我们已经安装成功,直接import就能使用了