0基础使用dockerfile构建容器镜像

目录

一、使用dockerfile构建镜像

1.1、dockerfile指令

1.FROM

2.RUN

3.CMD

4.ENTRYPOINT

5.EXPOSR

​编辑

6.ADD和COPY

​编辑7.volume

8.USER

二、案例1:dockerfile构建httpd镜像

构建一个指定挂载点的httpd镜像

三、案例2:构建tomcat镜像

三、案例3:构建mariadb镜像

第一步:准备一个脚本初始化并启动mysql

第二步:创建dockerfile文件


一、使用dockerfile构建镜像

除了使用docker commit把自定义容器提交成镜像外,还可以使用Dockerfile来构建自定义镜像。
什么是Dockerfile?
答: Dockerfile把构建镜像的步骤都写出来,然后按顺序执行实现自动构建镜像。就类似于脚本文件,ansible的playbook,saltstack的sls文件等。


1.1、dockerfile指令

1.FROM


FROM指令用于指定其后构建新镜像所使用的基础镜像。FROM指令必是Dockerfile文件中的首条命令。
FROM指令指定的基础image可以是官方远程仓库中的,也可以位于本地仓库,优先本地仓库

2.RUN


RUN指令用于在构建镜像中执行命令,有以下两种格式:


注意:按优化的角度来讲:当有多条要执行的命令,不要使用多条RUN,尽量使用&&符号与\符号连接成一行。因为多条RUN命令会让镜像建立多层(总之就是会变得臃肿了).

3.CMD

CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。

每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉CMD指定的命令。

4.ENTRYPOINT

ENTRYPOINT与CMD非常类似
相同点:
一个Dockerfile只写一条,如果写了多条,那么只有最后—条生效都是容器启动时才运行
不同点:
如果用户启动容器时候指定了运行的命令,ENTRYPOINT不会被运行的命令覆盖,而CMD则会被覆盖
 

5.EXPOSR

用于指定容器在运行时监听的端口

上述运行的端口还需要使用docker run运行容器时通过-p参数映射到宿主机的端口.

6.ENV

用于指定环境变量

6.ADD和COPY

用于把宿主机上的文件拷贝到镜像中

COPY的源文件只能是本地文件

7.volume

VOLUME指令用于把宿主机里的目录与容器里的目录映射.
只指定挂载点,docker宿主机映射的目录为自动生成的。

8.USER

USER指令设置启动容器的用户(像hadoop需要hadoop用户操作,oracle需要oracle用户操作),可以是用户名或UID
注意:如果设置了容器以daemon用户去运行,那么RUN,CMD和ENTRYPOINT都会以这个用户去运行镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户

9.WORKDIR

WORKDIR指令设置工作目录,类似于cd命令。不建议使用RUN cd /root ,建议使用WORKDIR

二、案例1:dockerfile构建httpd镜像

1、创建一个目录(自定义)

例如mkdir /dockerfile

2、编写dockerfile

#cd /dockerfile

#vim dockerfile_httpd

CMD指定容器运行时执行的参数或者命令

3、构建dockerfile镜像

通过dockerfile_httpd文件构建镜像(my_httpd:v1)在当前目录

拓展:如果公网源速度特别慢,可以尝试自建httpd的yum源

配置本地yum源

使用Alias别名配置 参数Indexes是以列表显示(要访问的资源)

构建一个指定挂载点的httpd镜像

使用本地yum源的构建速度明显加快

构建完成之后可以先查看镜像是否存在之后docker run 启动阿帕奇镜像 curl访问一下

可以使用docker inspect 容器id 查看是否挂载

正常的容器信息中Mounts中是没有信息的

三、案例2:构建tomcat镜像

准备好tomcat需要的jdk,tomcat等软件包,还有配置好环境变量的startup.sh和shutdown.sh文件

最好是先解压tomcat安装包之后把里面的shutdown.sh和startup.sh文件拷贝出来

编写dockerfile文件即可

注意:使用这种方式启动容器是错误的,必须使用凯特琳那启动Tomcat

优化之后的dockerfile 上面这个是拷贝格式错了 

拷贝目录必须加上后面的名称  例如tomcat 必须最后加上  /usr/local/tomcat

使用docker build 命令构建镜像

先使用lsof -i 命令查看端口占用情况 之后启动容器使用端口映射,映射容器的8080 端口到物理机

三、案例3:构建mariadb镜像

第一步:准备一个脚本初始化并启动mysql

        使用脚本而不直接使用dockerfile里的RUN指令的原因是:启动mysql服务需要使用&放到后台,但把后台符号放在RUN里会造成RUN命令有问题(&命令把任务放到后台会限制,导致任务跳过),所以单独使用脚本来做
sleep 3秒是因为初始化和启动服务需要一定的时间,等待3秒缓冲一下

第二步:创建dockerfile文件

第三步:docker build

启动容器之前先用lsof -i 命令查看端口是否被占用

最后用build的镜像启动容器 docker run -d -p 3306:3306 --name mariadb mymariadb:v1

  • 23
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值