Docker学习(2)

164 阅读2分钟

选择基础镜像

FROM nginx:1.21.1   //使用nginx作为基础镜像

FROM JDK1.8  //使用jdk1.8作为基础镜像

创建镜像

docker image build -t <自定义镜像名称> .

通过RUN执行命令(linux指令)

文件的复制以及目录操作

 

WORKDIR:进入容器内的某个目录下

构建参数和环境变量

ARG变量,只能在镜像构建时使用(多用于构建镜像时,应用的版本)

ENV变量,可以在构建镜像以及启动容器时使用(多用于容器运行后,内部程序还需再次调0用env变量)

CMD 

可以用来设置容器启动时默认会执行的命令(对容器执行,而不是对镜像内程序执行)

1、容器启动时默认执行的命令

2、如果docker run启动容器时指定了其他命令,则再Dockerfile内的cmd指令会失效

3、如果定义多个cmd,只有最后一个被执行

docker system prune -f (将已经退出的容器全部删除)

docker image prune -a(将没被容器使用的镜像删除)

docker run --rm (在容器退出后自动删除)

ENTRYPOINT

也是设置容器启动时要执行的命令。

cmd在docker run时传入其他命令,会被覆盖。

而ENTRYPOINT则不会,会优先执行dockerfile中的命令,进而执行docker run后的命令

合理使用缓存

尽可能将一些经常需要改变的命令,放在最后几行。

因为当某一行命令发生改变或所需要执行的文件发生改变,cache将会失效,之后的几行cache也会失效。

DockerIgnore

与gitignore功能相同,打包镜像时,如果使用复制文件操作,会把目标文件当前文件夹下其他无关文件同样打包,这时就需要dockerignore来忽略其他文件。

Docker多阶段构建技巧

FROM gcc:9.4 AS builder  #搭建c语言环境,并将该镜像起别名为builder

COPY hello.c /src/hello.c   #将本地hello.c源文件拷贝到镜像里/src/hello.c

WORKDIR /src  #进入镜像src文件夹下

RUN gcc --static -o -hello hello.c   将hello.c源文件编译成为hello

FROM alpine:3.13.5. #搭建C语言运行环境

COPY --from=builder /src/hello /src/hello  # --from=builder代表从别名为builder镜像的/src/hello文件到当前镜像到/src/hello

ENTRYPOINT ["/src/hello"]

CMD[]

执行该dockerFile,最终会打包成两个镜像

适用于需要多环境语言程序的运行