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. [SniperOJ](web)图书管理系统 注入 源码泄露

    0x00 题目概况 题目地址:http://www.sniperoj.cn:10000/ 这是一道注入题,存在git源码泄露,使用githack(freebuf有工具介绍)把源码脱下来,进行审计,然后 ...

  2. BASH和DOS之间的基本区别是什么?

    BASH和DOS控制台之间的主要区别在于3个方面:1. BASH命令区分大小写,而DOS命令则不区分;2. 在BASH下,/ character是目录分隔符,\作为转义字符.在DOS下,/用作命令参数 ...

  3. 你如何在 Java 中获取线程堆栈?

    kill -3 [java pid] 不会在当前终端输出,它会输出到代码执行的或指定的地方去.比如,kill -3 tomcat pid, 输出堆栈到 log 目录下. Jstack [java pi ...

  4. 什么是 Spring MVC 框架的控制器?

    控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现.控制器解 析用户输入并将其转换为一个由视图呈现给用户的模型.Spring 用一个非常抽象 的方式实现了一个控制层,允许用户创建多种用途的控 ...

  5. Zookeeper 保证了如下分布式一致性特性?

    1.顺序一致性 2.原子性 3.单一视图 4.可靠性 5.实时性(最终一致性) 客户端的读请求可以被集群中的任意一台机器处理,如果读请求在节点上注册了 监听器,这个监听器也是由所连接的 zookeep ...

  6. 学习Haproxy (八)

    Unix套接字命令(Unix Socket commands) socat是一个多功能的网络工具,名字来由是"Socket CAT",可以看作是netcat的N倍加强版,socat ...

  7. 学习ELK日志平台(三)

    ELK(elasticsearch.logstash.kibana) Elastic Stack是原ELK Stack在5.0版本加入Beats套件后的新称呼 解决痛点: 开发人员不能登录线上serv ...

  8. Numpy怎样将数组读写到文件

    Numpy怎样将数组读写到文件 本文档介绍的是Numpy以自己内建二进制的方式,将数组写出到文件,以及从文件加载数组: 如果是文本.表格类数据,一般使用pandas这个类库做加载和处理,不用numpy ...

  9. 【精】多层PCB层叠结构

    在设计多层PCB电路板之前,设计者需要首先根据电路的规模.电路板的尺寸和电磁兼容(EMC)的要求来确定所采用的电路板结构,也就是决定采用4层,6层,还是更多层数的电路板.确定层数之后,再确定内电层的放 ...

  10. PCB中的生产工艺、USB布线、特殊部件、蓝牙天线设计

    PCB中的生产工艺.USB布线.特殊部件.蓝牙天线设计 (2016-07-20 11:43:27) 转载▼     PCB生产中Mark点设计 1.pcb必须在板长边对角线上有一对应整板定位的Mark ...