[Docker] 02 - Dockerfile
Ref: 尚硅谷教学视频
Docker File
一、什么是docker file
用于自动构建一个属于自己的docker image。
Ref: 菜鸟教程 Docker Dockerfile
Ref: 阮一峰的网络日志 - Docker 入门教程【其中的相关部分】
二、三步骤
三步走:编写、构建、执行
三、示范详解
docker pull的内容:https://hub.docker.com/_/centos/
Centos6.8的Dockerfile
# 基础镜像
FROM scratch MAINTAINER The CentOS Project <cloud-ops@centos.org> ADD c68-docker.tar.xz / LABEL name="CentOS Base Image" \ vendor="CentOS" \ license="GPLv2" \ build-date="2016-06-02" # Default command CMD ["/bin/bash"]
-
基本套路
四、保留字指令
Add, 拷贝后再解压。
构建自己的“镜像”
一、自定义镜像:mycentos
-
开始创建自定义镜像
mycentos$ sudo docker build -f Dockerfile -t mycentos:1.3 .
More
二、CMD/ENTRYPOINT 镜像案例
docker run 之后的参数会被当做参数传递给ENTRYPOINT。
-
docker run的覆盖效应
如果使用CMD,无法处理docker run时 追加的option。
FROM centos MAINTAINER jeffrey<jeffrey.hao.au@gmail.com> RUN yum install -y curl CMD [ "curl", "-s", "https://www.baidu.com" ]
此时报错,因为-i覆盖了上面最后一行的CMD。
mycentos$ sudo docker run myip -i
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-i\": executable file not found in $PATH": unknown.
ERRO[0001] error waiting for container: context canceled
-
ENTRYPOINT追加效果
更改关键字后:
ENTRYPOINT [ "curl", "-s", "https://www.baidu.com" ]
达到的效果:
ENTRYPOINT [ "curl", "-s", "https://www.baidu.com" "-i" ]
三、ONBUILD 继承
作为“父镜像“的角色,加入ONBUILD,其他Dockerfile继承时会触发。
mycentos$ sudo docker build -f Dockerfile4 -t myip_father . Sending build context to Docker daemon 4.096kB Step 1/5 : FROM centos ---> 0d120b6ccaa8 Step 2/5 : MAINTAINER jeffrey<jeffrey.hao.au@gmail.com> ---> Using cache ---> 14e2245afcf9 Step 3/5 : RUN yum install -y curl ---> Using cache ---> 5762a44679f3 Step 4/5 : ENTRYPOINT [ "curl", "-s", "https://www.baidu.com" ] ---> Using cache ---> 30e913559560 Step 5/5 : ONBUILD RUN echo "father image onbuild--------886" ---> Running in 1cdeb40af65f Removing intermediate container 1cdeb40af65f ---> 1c1a2efb21fa Successfully built 1c1a2efb21fa Successfully tagged myip_father:latest
作为”子镜像“角色,继承后会发生什么?
FROM myip_father
MAINTAINER jeffrey<jeffrey.hao.au@gmail.com>
RUN yum install -y curl
CMD [ "curl", "-s", "https://www.baidu.com" ]
四、自定义tomcat9(高阶)
-
制作镜像
Dockerfile如下。
因为WORKDIR是在/usr/local下,所以,”隔空取物“时默认是在/usr/local下。
$sudo docker exec <容器id> ls -l
-
启动容器
docker run -d -p 9080:8080 --name myt9 zzyytomcat9
进一步地,再引入数据卷,挂载上文件夹。
-d 后台启动。
-
发布演示
在宿主机的挂载共享文件夹添加html文件,则容器内共享之。
docker restart <container id>
End.