Dockerfile

Dockerfile

介绍:

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

  • 使用docker build 构建镜像
  • docker build -f 可以指定具体的dockerfile文件
  • docker -t “xx/xx:v1” 编辑镜像REPOSITORY和TAG

语法

  • FROM。基础镜像,必须是可以下载下来的,定制的镜像都是基于FROM 的镜像,这里的centos就是定制需要的基础镜像。后续的操作都是基于centos镜像。

  • MANTAINER。指定镜像的作者信息

  • RUN。指定在当前镜像构建过程中要运行的命令包含两种模式:

    1. shell。 RUN 。 例:RUN echo hello
    2. exec。 RUN [“executable”, “paraml”, “param2”]。例: RUN [“/bin/bash”, “-c”, “echo hello”],等价于 /bin/bash -c echo hello
  • EXPOSE。仅仅只是声明端口。格式: EXPOSE <端口1> [<端口2>…]

    ​ 作用:

    1. 帮助镜像使用者理解景象服务的守护端口,以方便配置映射。
    2. 在运行时使用随机端口映射时,也就是docker run -p 时, 会自动随机映射EXPOSE端口
    3. 可以是一个或者多个端口,也可以指定多个EXPOSE
  • CMD。类似于RUN指令,用于运行程序,但二者运行的时间点不同:

    1. CMD在docker run 时运行。
    2. RUN是在docker build 构建镜像时运行

    CMD [“/usr/sbin/nginx”, “-g”, “daemon off;”]

  • ENTERYPOINT。类似CMD指令,用于传参。但不会被docker run 的命令行参数指定的指令所覆盖。所以ENTERYPOINT一般传定参,CMD一般传变参

FROM nginx
ENTERYPORINT ["nginx", "-c"] #定参
CMD ["/etc/nginx/nginx.conf"] #变参
  • COPY。复制命令。 格式:COPY [–chown=:] …

    可以使用通配符。满足go语言的表达方式。

    1. COPY hom* /mkdir
    2. COPY hom?.txt /mkdir
  • ADD。拷贝的另一种方式。格式:ADD …

    优点:再执行<源文件>为tar压缩文件的话,压缩格式为gzip,bzip2以及xz的情况下,自动复制并解压到<目标路径>

    缺点:在不解压的前提下,无法复制tar压缩文件。会令镜像构建缓存失效,从而可以会令镜像构建缓慢。

  • VOLUME。定义匿名数据卷,在启动容器时忘记挂在数据卷,会自动挂在到匿名卷。格式:VLOLUME <路径>

    作用:1.避免重要的数据,因容器重启而丢失。2.避免容器不断变大

  • WORKDIR。指定工作目录。

  • ENV。设置环境变量。格式:ENV 或 ENV =

  • USER。制定执行后续命令的用户和用户组,只是用于切换后续命令执行的用户和用户组(因此改用户和用户组必须提前已经存在)。 格式:USER <用户名>[:<用户组>]

  • ONBUILD。触发器,就是在本次构建过程中不会执行该命令,但有新的dockerfile使用了之前构建的镜像时,才会触发。

  • LABEL。打标签。格式:LABEL

  • HEALTHCHECK。健康检查。

  • ARG。构建参数。与ENV作用一致,但ARF仅对Dockerfile内有效,也就是说只有docker build的过程中有效,构建好的镜像内不存在此环境变量。构建命令docker build 中可以使用 --build-arg =来覆盖。格式:ARG <参数名>[=<默认值>]

Dockerfile构建Nginx

# 1.下载基础镜像
docker pull alpine

# 编写dockerfile文件
vim dockerfile

# 使用基础镜像
FROM centos
# 构建人
MAINTAINER xianchao
# 清空镜像内系统的repo
RUN rm -rf /etc/yum.repos.d/*
# 添加本地repo到镜像系统
COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/
# 下载安装
RUN yum install wget -y
RUN yum install nginx -y
# 添加本地文件配置到ngxin工作目录
COPY index.html /usr/share/nginx/html/
# 指定端口
EXPOSE 80
# 设置定参,把nginx设置在前台
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]



#构建镜像
docker build -t "fengshi/nginx:v1" .
#查看构建是否成功
docker images -a|grep nginx
#启动容器
docker run -d -p 80 --name html fengshi/nginx:v1
#检查
curl localhost:xxxx

### TS
# 如果镜像构建完成但容器启动失败,使用前台启动查看容器具体报错

Dockerfile 构建tomcat

FROM centos
MAINTAINER fengshi
RUN rm -rf /etc/yum.repos.d/*
COPY xxx.repo /etc/yum.repos.d/
RUN yum install wget -y
# 使用add,先解压再添加到指定目录
ADD apache-tomcat-8.0.26.tar.gz /usr/local
ADD jdk-8u45-linux-x64.rpm /usr/local
# 使用rpm安装指定jdk包
RUN cd /usr/local && rpm -ivh jdk-8u45-linux-x64
RUN mv /usr/local/apache-tomcat-8.0.26 /usr/local/tomcat8
# 启动tomcat和打印日志
ENTRYPOINT /usr/local/tomcat8/bin/startup.sh && tail -F /usr/local/tomcat8/logs/catalina.out
# 第二种启动方式
# ENTERYPOINT ["usr/local/tomcat8/bin/catalina.sh","run"]
EXPORT 8080

把Go代码做成镜像

# 1.linux机器安装go
yum install go -y
# 2.创建源码文件和文件夹
mkdir test && cd test/
cat main.go

# 3.go mod 初始化项目
go mod init test
# 设置代理
go env -w GOPROXY=https://goproxy.cn,direct
go mod tidy
# 4.构建源码
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o demo main.go

# 5.配置dockerfile
vim dockerfile
FROM alpine
# 指定工作目录
WORKDIR /data/app
ADD demo /data/app
CMD ["/bin/sh","-c","./demo"]

# 6.构建镜像
docker build -t="fengshi/demo:v1" .
# 运行
docker run -d --name go -p xxxxx:8080 fengshi/demo:v1 

把python代码做成镜像

# 1.创建源码文件和文件夹
# 包含相关代码
cat main.py
# 包含相关包列表的依赖
cat requirements.txt

# 2.配置dockerfile
cat dockerfile
FROM python3.7
RUN mkdir /app
WORKDIR /app
add . /app/
# 升级pip
RUN /usr/local/bin/python -m pip install --upgrade pip
# 安装依赖
RUN pip install -r requirements.txt
EXPOSE 5000
# 在构建的时候未运行,在容器run的时候才运行
CMD ["python","/app/main.py"]

# 6.构建镜像
docker build -t="fengshi/pip:v1" .
# 运行
docker run -d --name go -p xxxxx:5000 fengshi/pip:v1 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值