Dockerfile
[]: https://docs.docker.com/language/python/build-images/ "docker官方文档"
以python为例(docker官方还提供了java、go、nodejs) 学习dockerfile文件的编写(当运行docker build .的时候会先运行一个临时容器将自己编写的内容放到临时容器中 然后再生成镜像)
生成镜像
在某个路径下有以下三个文件
beginner@beginner-virtual-machine:~/test$ ls
app.py Dockerfile requirements.txt
Dockerfile
FROM python:3.8-slim-buster #以这个镜像做为基础 在这个镜像的基础上构建我们自己的内容
WORKDIR /app # 将新镜像的工作目录变成/app(如果没有就新建),当运行镜像的时候 就会进到这个目录下
COPY requirements.txt requirements.txt # 将当前路径下的requirement.txt复制到/app/requirements.txt
RUN pip3 install -r requirements.txt # 容器运行pip3 install 安装所需要的包
COPY . . # 将当前路径下的所有内容复制到/app下
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"] # 运行python3 -m flask run --host=0.0.0.0命令
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Docker!'
requirements.txt
Flask==2.0.2
执行docker命令生成镜像
docker build --tag python-docker . # .是指当前的路径
[internal] load build definition from Dockerfile
=> transferring dockerfile: 203B
[internal] load .dockerignore
=> transferring context: 2B
[internal] load metadata for docker.io/library/python:3.8-slim-buster
[1/6] FROM docker.io/library/python:3.8-slim-buster
[internal] load build context
=> transferring context: 953B
CACHED [2/6] WORKDIR /app
[3/6] COPY requirements.txt requirements.txt
[4/6] RUN pip3 install -r requirements.txt
[5/6] COPY . .
[6/6] CMD [ "python3", "-m", "flask", "run", "--host=0.0.0.0"]
exporting to image
=> exporting layers
=> writing image sha256:8cae92a8fbd6d091ce687b71b31252056944b09760438905b726625831564c4c
=> naming to docker.io/library/python-docker
dockerfile指令详解
FROM #基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD #步骤,tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #暴露端口配置
RUN
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,一个Dockerfile只能有一个CMD命令,如果有多个,只有最后一个CMD命令生效。
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承的Dockerfile 这个时候就会运行onbuild指令
COPY # 类似ADD,将我们的文件拷贝到镜像中
ENV#构建的时候设置环境变量
如果有多个CMD只会执行最后一个!!!
举个例子(python3.8的最后一个cmd是 CMD ["python3"])
beginner@beginner-virtual-machine:~/test$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
test 1.0 5535c3a6ec24 48 minutes ago 680MB
python3.8_zyh 3.0 21451ed8e840 19 hours ago 812MB
python3.8_zyh latest c8ee23b16690 20 hours ago 422MB
python3.8_zyh 1.0 a7abd70e6690 29 hours ago 180MB
tomcat latest fb5657adc892 2 weeks ago 680MB
redis 6.2.6 7614ae9453d1 2 weeks ago 113MB
python 3.8-slim-buster 5cc8cb0c433a 2 weeks ago 114MB
ubuntu latest ba6acccedd29 2 months ago 72.8MB
redis latest 7faaec683238 2 months ago 113MB
centos latest 5d0da3dc9764 3 months ago 231MB
elasticsearch 7.7.0 7ec4f35ab452 20 months ago 757MB
mobz/elasticsearch-head 5 b19a5c98e43b 5 years ago 824MB
beginner@beginner-virtual-machine:~/test$ docker run -it 5cc8c echo 1
1
beginner@beginner-virtual-machine:~/test$ docker run -it 5cc8c
Python 3.8.12 (default, Dec 21 2021, 11:15:53)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>