docker中的Dockerfile

什么是Dockerfile

Dockerfile是由一系列命令和参数构成的脚本文件,这些命令应用于基础镜像并最终创建一个新的镜像

Dockerfile的命令

    FROM 基础镜像 	       #基于哪个基础镜像来构建
    MAINTAINER lqz 	     # 声明镜像的创建者
    ENV key value 	     # 设置环境变量 (可以写多条)
    RUN command 	     #是Dockerfile的核心部分(可以写多条)
    ADD source_dir/file dest_dir/file 	#将宿主机的文件复制到镜像内,如果是一个压缩文件,将会在复制后自动解压
    COPY source_dir/file dest_dir/file 	# 和ADD相似,但是如果有压缩文件并不能解压
    WORKDIR lqz 	# 设置工作目录,运行起这个容器,来到的路径就是这个路径
    
    RUN   # 启动并运行容器执行的命令

使用小案例

# 构建一个带vim的centos:7镜像,根路径下有/zeng/ss.py
# 创建Dockerfile文件
vim Dockerfile

# 书写以下内容
FROM centos:centos7
MAINTAINER zeng
ENV name zeng
RUN yum install vim -y
RUN mkdir /zeng
RUN touch /zeng/ss.py
RUN echo 'print(1)' > /zeng/ss.py
COPY ./aa.txt /zeng/aa.txt
WORKDIR /zeng

# 基于dockerfile构建镜像,不要忘了 .   基于当前路径下的Dockerfile 构建镜像
docker build -t='centos_zeng_vim' . 

# 基于这个镜像运行容器
docker images

# 进入到容器
docker run -id --name xx centos_zeng_vim

# 验证vim,和文件夹,文件是否存在
docker exec -it xx /bin/bash

# 案例2
FROM centos:centos7
MAINTAINER zeng
ENV name zeng
RUN mkdir /zeng
RUN touch /zeng/ss.py
RUN echo 'input()' > /zeng/ss.py
WORKDIR /zeng
CMD ['python' './ss.py'] # 运行容器时会默认加上 /bin/sh -c

# 基于dockerfile构建镜像,不要忘了 .   基于当前路径下的Dockerfile 构建镜像
docker build -t='centos_py' . 
docker images

# 基于这个镜像运行容器
docker run -id --name yy centos_py python /zeng/ss.py

# 进入到容器
docker exec -it yy /bin/bash
# 查看环境变量

# python看
os.environ.get('name')

# shell看
echo $name

常用和不常用命令

# https://zhuanlan.zhihu.com/p/419175543?utm_id=0

FROM: 指定基础镜像
RUN: 构建镜像过程中需要执行的命令。可以有多条。docker build
*CMD:添加启动容器时需要执行的命令。多条只有最后一条生效。可以在启动容器时被覆盖和修改
*ENTRYPOINT:同CMD,但这个一定会被执行,不会被覆盖修改。
MLABELAINTAINER:表明镜像的作者。将被遗弃,被LABEL代替。
EXPOSE:设置对外暴露的端口。
*ENV:设置执行命令时的环境变量,并且在构建完成后,仍然生效
*ARG:设置只在构建过程中使用的环境变量,构建完成后,将消失
ADD:将本地文件或目录拷贝到镜像的文件系统中。能解压特定格式文件,能将URL作为要拷贝的文件
COPY:将本地文件或目录拷贝到镜像的文件系统中。
VOLUME:添加数据卷
USER:指定以哪个用户的名义执行RUN, CMD 和ENTRYPOINT等命令
WORKDIR:设置工作目录
posted @ 2024-03-14 21:14  wellplayed  阅读(12)  评论(0编辑  收藏  举报