docker 进阶使用
dockerfile 和 docker compose 的配置
Dockerfile 使用
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
例子:
1 FROM nginx
2 RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html
保存 Dockerfile 文件并在本地路径执行
1 docker build -t nginx:v1-test .
2 docker run -name docker run --name nginx-test -d -p 8080:80 nginx:v1-test
浏览 nginx 页面确认更新内容
curl 127.0.0.1:8080
输出:
这是一个本地构建的nginx镜像
Docker 命令详解
COPY
复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
1 COPY [--chown=<user>:<group>] <源路径1>... <目标路径>
2 COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。例如:
1 COPY hom* /mydir/
2 COPY hom?.txt /mydir/
FROM
FROM:定制的镜像都是基于 FROM 的镜像
1 FROM nginx
RUN
RUN:用于执行后面跟着的命令行命令
shell:
1 RUN <命令行命令>
2 # <命令行命令> 等同于,在终端操作的 shell 命令。
exec:
1 RUN ["可执行文件", "参数1", "参数2"]
2 # 例如:
3 # RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
ADD
ADD 指令和 COPY 的使用格类似
ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
CMD
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
- CMD 在 docker run 时运行。
- RUN 是在 docker build。
Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
1 CMD <shell 命令>
2 CMD ["<可执行文件或命令>","<param1>","<param2>",...]
3 CMD ["<param1>","<param2>",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
通过 dockerfile 文件封装 hugo
dokcerfile 文件
1 FROM nginx:1.21
2 COPY public/ /usr/share/nginx/html
docker.sh 文件
1 #/!bin/bash
2 echo "删除旧的docker"
3 docker ps
4 docker stop nginx-hugo
5 docker rm nginx-hugo
6 docker rmi nginx:hugo
7 echo "生成新的docker"
8 hugo -t LoveIt -D
9 docker build -t nginx:hugo .
10 docker run --name nginx-hugo -d -p 8080:80 nginx:hugo
11 echo "显示端口"
12 netstat -lntp
执行脚本:
1 sh update.sh