当前位置:   article > 正文

Dockerfile用法全解析_load build definition from dockerfile

load build definition from dockerfile

1.Dockerfile的例子

  • eg:文件名是Dockerfile,src/目录下有个1.txt文件
    在这里插入图片描述
1)Dockerfile中的内容如下:
FROM alpine
WORKDIR /app
COPY src/ /app
RUN echo 321>> 1.txt
CMD tail -f 1.txt 或者CMD cat 1.txt或者CMD ["cat","1.txt"]2)在命令行输入:
-t表示构建成的镜像名字是:test,指定版本就是test:latest,点表示位于当前目录
docker build -t test .

docker run test
123321
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2.Dockerfile指令的用法

  • Dockerfile作用:构建Docker镜像的配置文件
  • 重要的指令如下:
FROM 表示基于什么什么镜像

WORKDIR  表示:当前的工作目录,shell语句运行在哪个路径下,没有目录会自动创建

COPY	将宿主机的文件拷贝至容器中的目录下

RUN		在构建的时候,就要运行的脚本shell语句

CMD		容器运行的时候,才会运行的脚本,该语句执行完毕后,镜像的生命周期也就结束了,所以一般可以
指定为阻塞式的,eg:tail -f
---------------------------------------------------------------------------
EXPOSE		指定当前镜像所暴露出来的端口
eg:docker inspect nginx中的Config这一项的ExposedPorts就是暴露出的端口,可以通过
docker run P 将该端口映射到主机的随机端口,若将net指定为host模式,会将该端口绑定到本机
的80端口

VOLUME	/a/b	指定映射文件,一般是映射到匿名卷,将容器中的/a/b目录映射到主机的一个目录下,
eg:docker run中-p和-v都分别指定映射到外部的端口和目录
---------------------------------------------------------------------------
ENV		指定参数,容器的环境变量,docker -e可以指定环境变量,容器运行时的环境变量
eg:
FROM alpine
WORKDIR /app
COPY src/ /app
ENV A=10 或者 ENV A 10
CMD echo $A

ARG		构建参数,只有构建的时候才会有效,构建指的是:docker build
其实际作用是通过参数--build-arg指定变量的值,在构建时起到临时修改内部变量的效果
在dockerfile中其值相当于默认参数
eg:
FROM alpine
WORKDIR /app
COPY src/ /app
ARG B=10
ENV A=$B
CMD echo $A

运行的结果是10

如果使用docker build -t test --build-arg B=12 .
构建后,再运行的结果是:12
---------------------------------------------------------------------------
LABEL	指定元数据信息,作用就是看镜像是否有标识,没啥具体作用
eg:
FROM alpine
LABEL k="v" k1="v1"
WORKDIR /app
COPY src/ /app
ARG B=10
ENV A=$B
CMD echo $A

ONBUILD	后面可以接dockerfile其它的命令,指定在当前镜像下不会去运行
若另一个镜像是基于当前镜像的话,就会在另一个镜像的FROM后面执行ONBUILD,就是会继承父镜像相关指令
eg:
FROM alpine
LABEL k="v" k1="v1"
WORKDIR /app
COPY src/ /app
ONBUILD ENV C=100
CMD echo $C

再创建一个teset2目录,且新建一个Dockerfile文件
FROM test

执行命令:在test2目录下,构建了一个名为test2的镜像(-t参数)
docker build -t test2 test2
docker run test
最终打印100

docker run test
会打印空行
---------------------------------------------------------------------------
STOPSIGNAL	指定容器用什么信号可以停止,很少用,eg:STOPSIGNAL SIGINIT,STOPSIGNAL KILL
HEALTHCHECK		检查容器是否健康
SHEEL	指定RUN,CMD是哪种shell,linux一般默认是/bin/sh
---------------------------------------------------------------------------1)COPY与ADD的区别:
都是可以从主机外复制到镜像里面
COPY的源地址是主机文件系统的源地址,ADD的源地址不仅可以是主机文件系统的源地址,还可以是URL
推荐使用COPY

(2)CMD与EENTRYPOINt的区别:
都是指定容器运行起来的核心脚本
若ENTRYPOINt的形式非json数组形式,则以ENTRYPOINt为准,CMD指令无效;
ENTRYPOINt和CMD都是json,则ENTRYPOINt+CMD拼接成shell语句来执行;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89

ONBUILD用法的对应图片
在这里插入图片描述

3.从 Dockerfile 运行 Docker 实例的步骤

(1)创建一个 Dockerfile
要创建 Dockerfile,我们必须了解它的组件。

  • 一些最常见的命令包括:
FROM:创建使用的父/基础镜像的层。
WORKDIR:允许我们设置工作目录。
COPY:使我们能够将当前目录内容复制到容器中的目录中。
PULL:从你的 Docker 存储库添加文件。
RUN:当我们想要构建镜像时执行。
CMD:指定容器启动时要运行的命令。
ENV:定义构建期间使用的环境变量。
ENTRYPOINT:确定容器启动时要运行的命令。
MAINTAINER:指定镜像的作者。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

(2)首先创建将托管 Dockerfile 等文件的主目录

  • 制作一个简单的 Flask 应用程序,在控制台上打印一条消息。
mkdir my-app
  • 1
  • 进入该目录并创建应用程序的主文件为 app.py
from flask import Flask

app = Flask(__name__)

def hello():

    print("Hello, this is a simple Flask application")

hello()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

(3)创建 Dockerfile

touch Dockerfile
  • 1

(4)我们还创建了一个 requirements.txt 文件,其中包含运行此应用程序所需的安装文件

click==8.0.4
Flask==2.0.3
gunicorn==20.1.0
itsdangerous==2.1.0
Jinja2==3.0.3
MarkupSafe==2.1.0
Werkzeug==2.0.3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

(5)编辑 Dockerfile 并添加以下命令以使用 docker build 命令创建 docker 映像

  • 设置了工作目录并将必要的文件从当前目录复制到 Docker 容器中的目录
#  base image
FROM python

# Set your working directory
WORKDIR /var/www/
# Copy the necessary files
COPY ./app.py /var/www/app.py
COPY ./requirements.txt /var/www/requirements.txt

# Install the necessary packages
RUN pip install -r /var/www/requirements.txt
# Run the app
CMD ["echo", "Hello, Developer"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

(6)创建 Docker 映像

  • docker build 命令创建 Docker 映像,必须在同一目录中运行此命令。
  • -t 标志使我们能够标记映像的名称并指示 Dockerfile 位于我们正在执行此命令的同一目录中。
~/my-app$ docker build -t new_image .
  • 1

输出:

[+] Building 184.4s (10/10) FINISHED
 => [internal] load build definition from Dockerfile                                                                                       1.5s
 => => transferring dockerfile: 38B                                                                                                        0.0s
 => [internal] load .dockerignore                                                                                                          1.9s
 => => transferring context: 2B                                                                                                            0.0s
 => [internal] load metadata for docker.io/library/python:latest                                                                          50.8s
 => [1/5] FROM docker.io/library/python@sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55                           30.4s
 => => resolve docker.io/library/python@sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55                            0.4s
 => => sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55 2.14kB / 2.14kB                                             0.0s
 => => sha256:17e2d81e5757980ee40742d77dd5d3e1a69ad0d6dacb13064e1b018a6664ec72 2.22kB / 2.22kB                                             0.0s
 => => sha256:178dcaa62b393b539abc8b866c39be81e8ade01786880dc5d17ce3fe02426dbb 8.55kB / 8.55kB                                             0.0s
 => => sha256:38121472aa0128f87b31fde5c07080418cc17b4a8ee224767b59e24c592ff7d3 2.34MB / 2.34MB                                            10.4s
 => => extracting sha256:38121472aa0128f87b31fde5c07080418cc17b4a8ee224767b59e24c592ff7d3                                                 14.6s
 => [internal] load build context                                                                                                          1.1s
 => => transferring context: 195B                                                                                                          0.0s
 => [2/5] WORKDIR /var/www/                                                                                                                3.2s
 => [3/5] COPY ./app.py /var/www/app.py                                                                                                    1.9s
 => [4/5] COPY ./requirements.txt /var/www/requirements.txt                                                                                2.6s
 => [5/5] RUN pip install -r /var/www/requirements.txt                                                                                    82.3s
 => exporting to image                                                                                                                     8.1s
 => => exporting layers                                                                                                                    6.0s
 => => writing image sha256:5811f24b498ae784af32935318a5fddba536e2be27233b19bf08cad81438d114                                               0.2s
 => => naming to docker.io/library/new_image
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

(7)docker images

REPOSITORY           TAG       IMAGE ID       CREATED         SIZE
new_image            latest    5811f24b498a   2 minutes ago   929MB
  • 1
  • 2

(8)从 Dockerfile 运行实例

~/my-app$ docker run -it new_image
Hello, Developer
  • 1
  • 2

参考:链接从 Dockerfile 运行 Docker 实例

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/565150
推荐阅读
相关标签
  

闽ICP备14008679号