首页 > 其他分享 >云原生学习笔记-2-dockerfile

云原生学习笔记-2-dockerfile

时间:2022-11-23 16:24:56浏览次数:44  
标签:原生 -- dockerfile 笔记 Master docker root alpine

0:删除技巧

docker rmi $(docker ls -q)    #删除所有镜像
docker rm $(docker ps -aq)    #删除所有容器

1、ARG

[root@Master dockerfile]# docker build --no-cache --build-arg version=3.13 -t demo:v1 -f d2 .    
#根据文件创建一个镜像,--no-cache:不使用系统现有缓存创建,--build-arg 将参数传入到对应的变量
[root@Master dockerfile]# more d2 
ARG version=3.17
#可以定义在任意位置,在定义之后都可以使用

FROM alpine:$version
#指定使用alpine做为基础镜像

LABEL maintainer="jianghuaping"
#指定作者的信息,一般也可以是维护者的信息可以使用\做为续行符

ARG param="hell world"
#定义后在后面的环节可以使用该变量,ARG定义的变量,不能在cmd中使用,只有env定义的变量可以在cmd中使用
#ARG一排只能写一个变量,

RUN echo 111; echo ${param}
#构建时期运行的指令,而非容器启动时运行的指令

CMD echo 1111
#运行容器时运行的指令,每次启动容器时都会运行

2、ENV

[root@Master dockerfile]# docker build --no-cache  -t demo:v1 -f d3 . 
[root@Master dockerfile]# docker run -it --name demo1 demo:v1
[root@Master dockerfile]# docker run -it --name demo1 -e APP='this is build test' demo:v1
#运行时通过-e传递参数
[root@Master dockerfile]# more d3
ARG version=3
#可以定义在任意位置,在定义之后都可以使用

FROM alpine:${version}
#指定使用alpine做为基础镜像

LABEL maintainer="jianghuaping"
#指定作者的信息,一般也可以是维护者的信息可以使用\做为续行符

ENV APP=1.o
#构建期与运行期都可以使用该变量,运行器表示每次启动容器;构建期无法修改app的值

ARG param="hell world"
#定义后在后面的环节可以使用该变量,ARG定义的变量,不能在cmd中使用,只有env定义的变量可以在cmd中使用
#ARG一排只能写一个变量,

RUN  echo ${param};
RUN echo ${APP}
#构建时期运行的指令,而非容器启动时运行的指令

CMD echo ${APP}
#运行容器时运行的指令,每次启动容器时都会运行

 3、ADD

[root@Master ~]# docker build --no-cache -t demo:v1 -f /root/dockerfile/d5 /root/dockerfile/

[root@Master dockerfile]# more d5
ARG version=3
#可以定义在任意位置,在定义之后都可以使用

FROM alpine:${version}
#指定使用alpine做为基础镜像

ADD http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.22.1-1.el7.ngx.x86_64.rpm /nginx/
#把上下文Context指定的内容添加到镜像中,如果是压缩包自动解压;如果是远程文件,自动下载
#自动将ngx包下载到/nginx/目录中

ADD redis-7.0.5.tar.gz /redis
#将宿主机指定文件添加到镜像中

RUN cd /nginx && ls -l
RUN cd /redis && ls -l


#构建过程
[root@Master dockerfile]# docker build --no-cache -t demo:v1 -f d5 .
Sending build context to Docker daemon  3.009MB
Step 1/6 : ARG version=3
Step 2/6 : FROM alpine:${version}
 ---> c059bfaa849c
Step 3/6 : ADD http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.22.1-1.el7.ngx.x86_64.rpm /nginx/
Downloading [==================================================>]  816.3kB/816.3kB
 ---> 1fa10c1e2040
Step 4/6 : ADD redis-7.0.5.tar.gz /redis
 ---> dd4c5aa9dbe3
Step 5/6 : RUN cd /nginx && ls -l
 ---> Running in d942d363819b
total 800
-rw-------    1 root     root        816272 Oct 19 10:58 nginx-1.22.1-1.el7.ngx.x86_64.rpm
Removing intermediate container d942d363819b
 ---> 783883aa7567
Step 6/6 : RUN cd /redis && ls -l
 ---> Running in a9b5aa94a59a
total 4
drwxrwxr-x    8 root     root          4096 Sep 21 19:42 redis-7.0.5
Removing intermediate container a9b5aa94a59a
 ---> 033351ac9a45
Successfully built 033351ac9a45
Successfully tagged demo:v1

4、COPY

  COPY命令与ADD命令用法一至,区别在于文件不会自动下载,与不会自动解压

USER 1000:1000
#在容器内创建一个用户
COPY --chown=1000:1000 redis-7.0.5.tar.gz /redis1
#复制进容器后修改文件的用户及用户组只能是id号不能是名称

5、WORKDIR修改操作目录

[root@Master dockerfile]# docker build --no-cache -t demo:v2 -f d7 .

[root@Master dockerfile]# more d7
FROM alpine:3
#指定使用alpine做为基础镜像

RUN pwd && ls -l

WORKDIR /app
#修改工作目录

WORKDIR abc
#此目录会以/app为基准目录,将在/app下创建abc目录

RUN pwd && ls -l

WORKDIR /TEST/ABC
#以绝对路径定义,会修改至此目录下
#进入容器后会自动进入WORKDIR所定义的目录下,以最后一个WORKDIR指定的目录为准

RUN pwd && ls -l

 6、VOLUME

VOLUME ["/hello","/app"]
#指定将容器内的目录创建挂载卷,自动挂载到宿主机;将容器内的/hello 及/app挂载到宿主机

CMD ping baidu.com

#如果VOLUME已经挂载后无法在容器内进行修改,如果需要修改/hello目录下的文件,需要在VOLUME之前操作

 7、EXPOSE声明暴露端口

EXPOSE 80
#申请暴露80端口,并不是执行暴露,运行时-P时,会暴露此端口

EXPOSE [80,443]
EXPOSE 80/tcp

8、CMD与ENTRYPOING

 entypoint:给定后不可通过启动时修改,cmd可以启动时修改。可以理解为,cmd作为entrypoint的参数

[root@Master file]# docker build --no-cache -t test:v2 -f d3 .
[root@Master file]# docker run --name test4 -it --rm test:v2
PING baidu.com (110.242.68.66): 56 data bytes
64 bytes from 110.242.68.66: seq=0 ttl=52 time=44.706 ms

[root@Master file]# docker run --name test4 -it --rm test:v2 atguigu.com
#可以通过传值的形式修改cmd的值
PING atguigu.com (42.121.6.2): 56 data bytes
64 bytes from 42.121.6.2: seq=0 ttl=50 time=93.089 ms

CMD ["baidu.com"]
#官方推荐写法,后期需要变化的写cmd

ENTRYPOINT ["ping"]
#exec的写法,后期不会变化的写entrypoint

9、查看现有镜像的dockerfile

 alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage"
 
 dfimage -sV=1.36 alpine:latest

 

标签:原生,--,dockerfile,笔记,Master,docker,root,alpine
From: https://www.cnblogs.com/j--huaping/p/16913795.html

相关文章

  • 强化学习笔记(1.0)
    1.强化学习强化学习是一类算法,是让计算机实现从一开始什么都不懂,通过不断地尝试并更新自己的行为准则。从错误中学习,最后找到规律,最终达到目的的方法。在计算机中,可以为每一......
  • Dockerfile 详解
    Dockerfile详解 认识Dockerfile1、镜像的生成路径基于容器制作dockerfile,dockerbuild 2、Dockerfile介绍   镜像的定制实际上就是定制每一层所......
  • 深入理解css 笔记(9)
    模块化CSS是指把页面分割成不同的组成部分,这些组成部分可以在多种上下文中重复使用,并且互相之间没有依赖关系。最终目的是,当我们修改其中一部分css时,不会对其他部分产......
  • unity学习笔记03-渲染管线
    图形数据在GPU上经过运算处理,最后显示在显示器上的过程游戏→图形API→cpu→(DRAWCALL)交给GPU→顶点处理→图元装配→光栅化→像素处理→缓存减少DRAWCALL 增加性能O......
  • SAP笔记-SD 销售订单 收入 和 成本 对应科目的逻辑
    销售订单收入和成本对应科目的逻辑(2009-02-19)一.收入:1.      销售订单类型->单据定价过程  2.      单据定价过程->定价过程sorg:销售组织,dc......
  • SAP笔记-FI-多家客户同时收款问题
    多客户收款问题(2009-02-17) 问题:使用配置的收款凭证类型dZ,同时收多家客户款,系统提示只能选择一个客户或供应商./原因:DZ凭证类型在配置时,设定了客户/供应商检查......
  • SAP笔记-工作中心主数据-成本中心设置错误
    这两天后勤再测试时出现一个很奇怪的问题,co11n完工确认时,会出现下面的错误.百思不和其解,找配置都没有相关的东西,最终找到原因是工作中心主数据中设置的成本中心不是同一......
  • git-book笔记
    记住,在Git中任何已提交的东西几乎总是可以恢复的。甚至那些被删除的分支中的提交或使用--amend选项覆盖的提交也可以恢复(阅读数据恢复了解数据恢复)。然而,任何你......
  • dockerfile中ENTRYPOINT与CMD的结合
    一、写在前面我们在上篇小作文docker容器dockerfile详解对中dockerfile有了比较全面的认识,我们也提到ENTRYPOINT和CMD都可以指定容器启动命令。因为这两个命令是掌握docke......
  • 系统辨识课程笔记
    第一次课现代控制理论有哪些部分组成辨识、状态估计、控制理论辨识方法主要采用什么技术数理统计的技术系统辨识的定义系统辨识是根据系统的输入/输出时间函数,确定系统行为......