dockerfile 模版
# 1.FROM xxx : FROM 指定baes_image ,我们会在这个基础镜像之上做一些扩展。
FROM alpine
# 2.LABEL: 说明 谁在维护这个镜像,LABEL后的命令不会执行。
LABEL maintainer="chuntian_tester.com"
# 3.RUN: 要执行的命令 换行处必须打 \ 符号,表示为1行的命令
# 3.1: 在已存在的image顶层执行命令,创建一个新的layer层
# 3.2: 往往将需要安装的依赖,使用一个RUN来创建
RUN apt-get update && apt-get install -y \
nginx
# 4.ENV: 在容器内创建环境变量
ENV username="chuntian_tester" \
password="123456"
# 5.COPY: 复制文件/目录 到容器中
COPY /home/Dockerfile /usr/src
# 6. ADD: 跟COPY类似,有额外特性:
# 6.1: 能解压/压缩文件,然后复制到容器中
# 6.2:
# 当ENTRYPOINT 和 CMD同时存在时,CMD中的值会作为参数传给ENTRYPOINT,以下命令效果类似:/bin/cat /etc/passwd,[]包裹的命令为exec格式命令,没有[]包裹为shell格式命令
ENTRYPOINT [ "/bin/cat" ]
# 7.CMD: 每次运行容器时会执行的命令,
CMD [ "/etc/passwd" ]
# 8. WORKDIR : 切换目录
# 9. USER: 设置运行其他命令的用户
USER root
# 10. VOLUME :指定需要持久保存/备份的目录
VOLUME /data
# 此处必须有一 “.” 符号
docker build -t 你想设置的镜像名 -f 指定dockerfile的文件名 .
docker build -t xxx -f xxx .
docker build -t docker_image_demo -f Dockerfile .
docker imges
docker run
ETNRYPOIN 和 CMD:
如果有多个CMD,只有最后一个CMD会执行。
相同点:
都是在容器run的时候会执行的命令。
不同点:
1.当ENTRYPOINT 和 CMD同时存在时,CMD中的值会作为参数传给ENTRYPOINT;
2.当运行容器时追加shell命令,shell命令会覆盖CMD中的命令,但是不会覆盖ENTRYPOINT中的命令,ENTRYPOINT照常在运行时执行。
3.[ ]包裹的命令为exec格式命令,没有[ ]包裹为shell格式命令,如:
ENTRYPOINT ["/bin/cat"]
ENTRYPOINT ls /etc/
COPY 和 ADD 区别:
COPY: 复制文件/目录到容器中
COPY /home/Dockerfile /usr/src: 将宿主机的home目录下的Dockerfile文件复制到
容器内的/usr/src目录
ADD: 具备COPY的功能,额外还能解压压缩文件,然后复制到容器中;
还能远程下载。
ADD http://www.xxxx.com/demo.tar.gz /usr/src: 将压缩文件拷贝到容器的/usr/src目录下。
WORKDIR: 容器内切换目录,类似于cd 命令
示例:dockerfile 制作flask项目镜像
# 1.FROM xxx : FROM 指定baes_image ,我们会在这个基础镜像之上做一些扩展。
# 安装python3.9
FROM python:3-alpine3.9
# 2.LABEL: 说明 谁在维护这个镜像,LABEL后的命令不会执行。
LABEL maintainer="chuntian_tester.com"
# 进入目录
WORKDIR /usr/src/app
# 进入目录后将flask项目压缩包添加至此目录,并解压
# COPY ./my_project ./project
ADD ./my_project.tar.gz ./
# 切换进目录 ,因为上面解压项目文件产生了my_project目录,所以可进入
WORKDIR ./my_project
# 执行命令
RUN pip3 install -r requirements.txt -i https://pypi.douban.com/simple
# flask项目默认在5000端口启动,所以要先暴露5000端口到公网
EXPOSE 5000
# 下载完依赖后,执行启动命令 python3 run.py,flask项目默认在5000端口启动,所以要先暴露5000端口到公网
CMD [ "python","run.py" ] # [ ] 左右两边要有空格,且必须是双引号,不能是单引号
# 如果CMD执行exec格式shell命令,用以下1格式调用shell命令,或者用2方式执行使用shell格式,不用exec格式
#1. CMD [ "sh","-c","echo $HOME" ]
#2. CMD echo "this is shell forms" | wc -l
1.制作镜像
在Dockerfile中配置好FROM和RUN
2.制作镜像
docker build -t image-myself . -f dockerfile_registry
3.打标签
docker tag image-my:latest localhost:5001/image-registry:v1
4.配置/etc/docker/daemon.json文件
5.systemctl restart docker
6.推送至仓库
docker push localhost:5001/image-registry:v1
7.push完毕后查看仓库是否已存在该镜像
接下来,大家就可以使用你的镜像了~~~