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