基础知识
- 每个保留关键字(指令),都必须是大写字母
- 从上到下的顺序执行
- '#'表示注释
- 每一个指令都会创建并提交一个新的镜像层
docker三部曲
- dockerfile:构建文件,定义了一切
- dockerimages:通过dockerfile构建生成的镜像,最终发布和运行的产品
- docker容器:镜像运行起来,提供服务
dockerfile常用指令
- build时执行
FROM # 基础镜像,从这里开始构建
MAINTAINER # 镜像是谁写的: 姓名 + 邮箱
RUN # 镜像构建时需要运行的命令以及提交运行结果
ADD # 构建镜像的一些步骤,要逐层添加东西时用
# 一个复制命令,把文件复制到景象中
# 如果把虚拟机与容器想象成两台linux服务器的话,那么这个命令就类似于scp,只是scp需要加用户名和密码的权限验证,而ADD不用
COPY # 性质类似于ADD,将文件拷贝到镜像中
# 与ADD的区别,COPY的只能是本地文件
ONBUILD # 这个命令只对当前镜像的子镜像生效
# 有一个镜像B是基于A镜像构建的,那么这个指定的命令会在B镜像构建的时候被执行
ENV # 构建的时候设置环境变量
- both时执行
WORKDIR # 设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效,如果不存在则会创建,也可以设置多次
- run时执行
VOLUME # 挂载的目录
EXPOSE # 功能只是暴漏容器运行时的监听端口给外部,实际应用时的端口映射要用 -P 或者 -p参数指定
CMD # 已经构建出的镜像被启动为容器时,要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 已经构建出的镜像被启动为容器时,要运行的命令,可以追加命令
dockerfile 4个练习
练习1:构建1个自己的centos
编写dockerfile脚本
- cd /home/wangxun
- mkdir dockerfile_test
- cd dockerfile_test
- vim 01_dockerfile_centos
- docker pull centos:7
- 脚本内容如下:
FROM centos:7 #用最新版的话,执行脚本时,下载安装包时会出错
MAINTAINER wangxun
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "--- this is the end ---"
CMD /bin/bash
构建镜像
docker build -f 01_dockerfile_centos -t wangxun/centos7:1.0 . #构建过程输出的信息可能比你想象的多的多
查看镜像的构建历史
docker history 镜像id/镜像名
运行自己构建的镜像
docker images #查看镜像
docker run -it --name=centos_test wangxun/centos7:1.0 /bin/bash #运行镜像
#进入镜像后,执行命令,验证配置
pwd
ifconfig
vim
练习2:CMD与ENTRYPOINT的区别
练习3:构建tomcat镜像
练习4:发布自己的镜像到dockerhub或者阿里云容器服务