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.
>>>

docker基础_Dockerfile的更多相关文章

  1. Docker - Docker基础命令及使用

    Docker Docker - 官网 Docker - Hub GitHub - Docker Docker中文社区 Docker基础命令 Docker 查看帮助信息:docker --help 查看 ...

  2. 【云计算】Docker云平台—Docker基础

    Docker云平台系列共三讲,此为第一讲:Docker基础 参考资料: Docker官方文档:https://docs.docker.com/ Docker从入门到实践:https://yeasy.g ...

  3. Docker基础技术:Linux Namespace(下)

    在 Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中,主 ...

  4. Docker 基础技术:Linux Namespace(下)

    导读 在Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中 ...

  5. Docker基础入门及示例

    Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环 ...

  6. Docker 基础 : 镜像

    目录 获取镜像 查看镜像信息 搜索镜像 删除镜像 创建镜像 导出和导入镜像 上传镜像 总结 镜像是 Docker 的三大核心概念之一.Docker 运行容器前需要本地存在对应的镜像,如果本地没有对应的 ...

  7. Docker 基础技术之 Linux cgroups 详解

    PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 推荐大家到公众号阅读,那里阅读体验更好,也沉淀了很多篇干货. 前面两篇 ...

  8. docker 基础知识分享ppt

    给团队做的docker基础分享ppt, 见下面的附件. https://files.cnblogs.com/files/harrychinese/docker_intro.pptx

  9. 中标麒麟龙芯平台--docker基础镜像制作

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 的出现为开发人员和运维人员带来了极大的便利.Docker在X86下常见的发行版Linux如Ub ...

随机推荐

  1. 实现一个cache

    实现一个LRU cache,定义get函数和set函数,cache是固定长度的,当cache已经满,那么就删除一直没有被更新的记录,然后将新的记录放进去. LRU: 全称是Least Recently ...

  2. VS Code通过code runner插件编译运行多个cpp文件 | 链接编译.h文件

    1.多个cpp文件在同一级目录 参考:https://jingyan.baidu.com/article/2f9b480d7ceb3d01ca6cc224.html 此时可通过修改Code Runne ...

  3. 一图学Python

    网上有这样一张图片,信息量很大,通常会被配上标题"一张图让你学会Python": 这张图流传甚广,但我没有找到明确的出处,图片上附带了 UliPad 的作者 Limodou 的信息 ...

  4. java 集合及其线程安全 及其 set linkedList map table 区别

    早在jdk的1.1版本中,所有的集合都是线程安全的.但是在1.2以及之后的版本中就出现了一些线程不安全的集合,为什么版本升级会出现一些线程不安全的集合呢?因为线程不安全的集合普遍比线程安全的集合效率高 ...

  5. Filter是什么?有什么作用?

    Filter是过滤器,在请求到达Servlet之前或者响应到达客户端之前截获请求或者响应,对之进行相应的处理.Struts2的控制器就是使用一个Filter实现的.

  6. Mac安装swoole中遇到的问题

    转:https://blog.csdn.net/lishanleilixin/article/details/96137272 1:下载swoole源码,https://github.com/swoo ...

  7. 什么是 AQS ?

    AQS 是 AbustactQueuedSynchronizer 的简称,它是一个 Java 提高的底层同步工具类,用一个 int 类型的变量表示同步状态,并提供了一系列的 CAS 操作来管理这个同步 ...

  8. HTML 5的页面结构和HTML 4或早先的HTML有什么不同?

    一个典型的Web页面有页眉(header),页脚(footer),导航(navigation),正文(central area)和侧栏(side bar).现在如果是在HTML 4中,HTML部分中的 ...

  9. 学习zabbix(七)

    zabbix自定义监控项 1.创建主机组,可以根据redis.mysql.web等创建对于的主机组 2.创建主机 3.创建Screens 4.自定义监控项 zabbix_agentd.conf配置文件 ...

  10. 用js中的let等操作,要手动开启ECMAScript6(如果不设置,let等ES6语法会报错)

    问题:idea默认没有开启ECMAScript6,需要进行设置:(如果不设置,let等ES6语法会报错)步骤: File | Settings | Languages & Frameworks ...