Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
DockerFile构建三步骤:
1、编写DockerFile;2、docker build ;3、docker run
DockerFile体系结构:
FROM 基础镜像、当前新镜像是基于哪个镜像的
MAINTAINER 镜像维护者的姓名和邮箱地址
RUN 容器构建时需要运行的命令
EXPOSE 当前容器对外暴露出的端口
WORKDIR 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
ENV 用来在构建镜像过程中设置环境变量
ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY 类似ADD,拷贝文件和目录到镜像中。
将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
VOLUME 容器数据卷,用于数据保存和持久化工作
CMD 指定一个容器启动时要运行的命令
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
ENTRYPOINT 指定一个容器启动时要运行的命令
ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
简单运用:以ubuntu为基础镜像来构建一个新的镜像
首先去dockerhub上拉取ubuntu镜像,参考上一篇文章docker笔记(二、commit命令运用)
以这个ubuntu创建的新容器默认登陆的工作目录是默认的根目录,并且用不了vim和ifconfig命令
所以我想以这个ubuntu来构建一个新的镜像,新镜像里面更改了终端默认登陆的进来工作目录以及安装了一些工具:
首先编写DockerFile文件
#基于ubuntu镜像
FROM ubuntu:latest
#作者的联系方式
MAINTAINER admin<admin@qq.com>
#创建工作目录
RUN mkdir -p /docker
#进入工作目录
WORKDIR /docker
#设置环境变量
ENV mypath /docker
#下载一些工具
RUN apt-get -y update
RUN apt-get install -y vim
RUN apt-get install net-tools
#对外开放8080端口
EXPOSE 8080
CMD /bin/bash
在DockerFile文件所在的目录进行build,注意build命令后面有一个小点
sudo docker build -f DockerFile -t ubuntu:1.1 .
其中 -f 后面可以跟指定路径的DockerFile文件
-t 后面跟新镜像名以及标签
命令最后面有一个.
构建的过程比较长,就不一一贴出了,直到最后看到successfully就证明build完成了
build完成后,就能看到刚才构建的镜像了
以这个ubuntu1.1镜像创建新容器并进入该镜像,发现默认的登陆目录变成了DockerFile文件里面指定的目录了,并且可以使用vim和ifconig命令了
后台运行容器:
sudo docker run -it -d --name myUbuntu ubuntu:1.1
-d 以守护进程方式启动
--name 给新启动的容器起一个别名(--name 别名 容器名或容器id)
将容器导出到本地:
sudo docker export 388fc39489bf > myUbuntu.tar
docker导入本地镜像文件:
将刚才的容器和镜像都删除掉
(docker rm 容器id 、docker rmi 镜像id)
然后执行下面命令:
cat /home/lenovo/docker_test/my_ubuntu/myUbuntu.tar | sudo docker import - ubuntu:1.1