Docker File(九)

Dockerfile案例一

dockerfile支持注释,以#开头的行都会被认为是注释

1
2
3
4
5
6
7
8
9
10
11
FROM ubuntu:14.04
#指定基础镜像,这个镜像是已经存在的镜像
MAINTAINER whale3070 “weaponmaster3070@gmail.com”
#指定该镜像的作者和联系方式
RUN apt-get update
#对容器做出修改的命令,前面要加一个RUN命令
RUN apt-get install -y nginx
#RUN命令会使用/bin/sh -c来运行后面的命令
RUN echo 'test' > /usr/share/nginx/html/index.html/index
EXPOSE 80
#expose指令,让容器对外开放80端口

案例二

上面的这种写法,创建了 3 层镜像。这是完全没有意义的,而且很多运行时不需要的东西,都被装进了镜像里,比如编译环境、更新的软件包等等。结果就是产生非常臃肿、非常多层的镜像,不仅仅增加了构建部署的时间,也很容易出错。 这是很多初学 Docker 的人常犯的一个错误。

正确的写法应该如下所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM debian:stretch

RUN set -x; buildDeps='gcc libc6-dev make wget' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps

案例三,自动提交CVND的docker镜像

mkdir /home/kali/Documents/auto_upload_CNVD
创建一个工作目录
touch Dockerfile
新建dockerfile

1
2
3
4
5
6
FROM ubuntu:14.04
#指定基础镜像,这个镜像是已经存在的镜像
MAINTAINER whale3070 “weaponmaster3070@gmail.com”
#指定该镜像的作者和联系方式
RUN apt-get update \
&& pip install -U selenium

docker build -t forcnvd:v1 .
创建一个tag叫forcnvd的容器
提示pip not found

修改dockerfile

1
2
3
4
5
6
7
8
9
FROM debian
#指定基础镜像,这个镜像是已经存在的镜像
MAINTAINER whale3070 “weaponmaster3070@gmail.com”
#指定该镜像的作者和联系方式
RUN apt-get update \
&& apt-get -y install python3 \
&& apt-get -y install wget \
&& apt -y install python3-pip \
&& pip install -U selenium

当看到Successfully built,说明新建容器成功了

1
2
3
4
5
Successfully installed async-generator-1.10 attrs-21.2.0 certifi-2021.10.8 cffi-1.15.0 cryptography-35.0.0 h11-0.12.0 idna-3.3 outcome-1.1.0 pyOpenSSL-21.0.0 pycparser-2.20 selenium-4.0.0 six-1.16.0 sniffio-1.2.0 sortedcontainers-2.4.0 trio-0.19.0 trio-websocket-0.9.2 urllib3-1.26.7 wsproto-1.0.0
Removing intermediate container 39fd38a290d5
---> 17d53179633b
Successfully built 17d53179633b
Successfully tagged forcnvd:v1

docker run -t -i forcnvd:v1 /bin/bash
可以直接进入容器内部,进行修改。
build成功以后要干什么,要添加脚本测试,自动提交漏洞报告到CNVD

参考资料

docker从入门到实践:https://yeasy.gitbook.io/docker_practice/

https://docs.docker.com/engine/reference/builder/