vim dockerfile
#新建dockfile文件:内容如下
FROM centos
VOLUME ["/createFile1", "/createFile2"]
CMD echo "finish, --------success"
CMD /bin/bash
#执行dockfile文件
docker build -f dockfiel -t lalala/centos .
执行成功后使用docker images效果如下
REPOSITORY TAG IMAGE ID CREATED SIZE
lalala/centos latest 5e9fa3c7b181 47 seconds ago 98.2MB
#run镜像
docker run -it --name centos-01 lalala/centos
#在镜像的根目录下使用ls可以看到
#createFile1 和 createFile2 文件夹
#进入createFile1
echo 'hello world' > a.txt
#退出当前容器
–volumes-from
新建两个容器
docker run -it --name centos-c01 --volumes-from centos-01 lalala/centos
docker run -it --name centos-c02 --volumes-from centos-01 lalal/centos
再次进入到createFile01 可以看到里a.txt的内容
可以使用docker inspect
命令查看具体的卷使用情况
删除centos-01
docker rm -f centos-01
再次进入centos-c01, centos-c02
发现两个目录还在,数据共享也没问题
Dockerfile内容基础知识
- 每条保留指令都必须为答谢字母,而且后面要跟随至少一个参数
- 指令按照从上到下,顺序执行
- #表示注释
- 每条指令都会创建一个新的镜像层,并且对镜像进行提交
FROM 基础镜像,当前镜像是基于哪个镜像的
MAINTAINER 镜像维护者的姓名邮箱地址
RUN 容器构建时需要运行的命令
EXPOSE 当前容器对外暴露的端口
WORKDIR 指定在创建容器后,终端默认登陆的进来的工作目录
ENV 设置环境变量 ENV MY_PATH /bin/bash
ADD 将宿主机目录下的文件拷贝到镜像并自动处理RUL和解压tar压缩包
COPY 类似于ADD,但不会解压
VOLUME 容器数据卷,用于数据保存和持久化工作
CMD 指定一个容器启动时要运行的命令,Dockerfile可以有多个CMD命令,只有最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT 指定一个容器启动时要运行的命令,----emmm不太清楚,docker run 后面命令不会覆盖,是追加
ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后父镜像的onbuild被触发
FROM centos
MAINTAINER xk<2607780909@qq.com>
ENV MYPATH /tmp
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "success"
CMD /bin/bash
再次运行
docker build -f fileName -t createName .
tomcat的Dockerfile文件最后面有
CMD ["catalina.sh", "run"]
执行命令:
docker run -it -P tomcat ls -l
RUN
会被 后面的命令替换掉
ENTRYPOINT
追加命令
ONBUILD RUN echo '父镜像'
如果有子镜像继承这个镜像,则会运行这句命令
Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:
FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz