[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

Goto: https://github.com/CentOS/sig-cloud-instance-images/blob/f32666d2af356ed6835942ed753a4970e18bca94/docker/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.

posted @ 2020-08-27 19:31  郝壹贰叁  阅读(203)  评论(0编辑  收藏  举报