Dockerfile 制作镜像并push至私有仓库

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 .

Dockerfile 制作镜像并push至私有仓库_第1张图片

 docker imges

Dockerfile 制作镜像并push至私有仓库_第2张图片

docker run 

Dockerfile 制作镜像并push至私有仓库_第3张图片

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完毕后查看仓库是否已存在该镜像

接下来,大家就可以使用你的镜像了~~~ 

你可能感兴趣的:(docker容器,自动化测试,docker)