赞
踩
(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
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语句来执行;
ONBUILD用法的对应图片
(1)创建一个 Dockerfile
要创建 Dockerfile,我们必须了解它的组件。
FROM:创建使用的父/基础镜像的层。
WORKDIR:允许我们设置工作目录。
COPY:使我们能够将当前目录内容复制到容器中的目录中。
PULL:从你的 Docker 存储库添加文件。
RUN:当我们想要构建镜像时执行。
CMD:指定容器启动时要运行的命令。
ENV:定义构建期间使用的环境变量。
ENTRYPOINT:确定容器启动时要运行的命令。
MAINTAINER:指定镜像的作者。
(2)首先创建将托管 Dockerfile 等文件的主目录
mkdir my-app
from flask import Flask
app = Flask(__name__)
def hello():
print("Hello, this is a simple Flask application")
hello()
(3)创建 Dockerfile
touch Dockerfile
(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
(5)编辑 Dockerfile 并添加以下命令以使用 docker build 命令创建 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"]
(6)创建 Docker 映像
~/my-app$ docker build -t new_image .
输出:
[+] 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
(7)docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
new_image latest 5811f24b498a 2 minutes ago 929MB
(8)从 Dockerfile 运行实例
~/my-app$ docker run -it new_image
Hello, Developer
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。