Dockerfile实战-----将Python程序打包成镜像通过容器跑起来

一. 看看Dockerfile

FROM python
COPY requReturn_2.py /code/
COPY config.conf /code/
COPY configuration.py /code/
WORKDIR /code
RUN pip3 install flask
RUN pip3 install sqlalchemy
RUN pip3 install pymysql
CMD ['python3','requReturn_2.py']

1. COPY指令是为了将容器外面的程序,也就是在我宿主机上的程序拷贝到容器里面的一个目录下面,这个目录最好自己先进去创建一下。COPY的宿主机的程序必须在Dockerfile构建目录的上下文中。什么叫上下文,简单来说,就是构建Dockerfile的那个文件目录。

2. WORKDIR就是指定容器创建之后,一旦我们去run那个容器,这个容器默认进入的目录,那我的容器是为了跑Python程序的,那当然这个工作目录必须有我的所有程序以及我的程序所需要的一些配置文件咯,都得放到这个目录里面。

3. RUN指令就是为了安装一下依赖包,比如我的Python程序里面是需要flask,pymysql这些包的,所以我就需要通过RUN指令安装一下,不然你进去容器跑程序的时候,会报找不到包的错误的。

4. 如果你发现你无法通过RUN指令安装一些东西,也就是无法pip install的话,可能是你的容器无法访问Internet,你可以尝试重启一下docker服务,命令为:service docker restart。因为我当时就就是遇到这个问题,就这么解决的。

5. CMD代表的是容器启动时默认执行的命令。

 

二. 构建镜像

docker build -t 你想给新镜像取的名字 . 

#这条语句必须在Dockerfile所在的目录执行,在最后有一个空格.别忘记,不然行不通的

 

三. 启动容器

docker -it --name my_contain -p 7000:7000 my_image python3 requReturn_2.py /bin/bash

1. --name是给容器起一个名字。

2. -p是端口映射,也就是将宿主机的7000映射到容器的7000端口,这样,通过访问宿主机的7000端口就可以访问容器了。因为我的程序是一个flask服务,所以是需要通过IP地址去访问的。

3. my_image就是我的镜像名称

4. 后面跟的Python3 requReturn_2.py就是说在容器启动的时候去执行以下这个命令,也就是运行我的Python程序,将flask服务起来。

 

四. 最重要的一点!!最致命的一些错误

1. 因为我是跑的flask服务,所以要指定主机号,记住,这个主机号不能指定Linux虚拟机或者说你的宿主机的主机号!!!只能是0.0.0.0,你可以理解为0.0.0.0就是一个包括了这个网络当中的所有主机号。

Dockerfile实战-----将Python程序打包成镜像通过容器跑起来_第1张图片

2. 然后要注意,如果你的flask服务是需要连接mysql数据库的,你的主机号可千万别一不注意写成0.0.0.0,连接mysql的主机号还是要写你宿主机的主机号。

你可能感兴趣的:(#,Docker)