目录
docker数据卷
docker run -it -v /宿主机绝对路径目录:/容器内容目录 镜像名
//此命令会自动创建相应的目录。命令成功之后,就建立了宿主机与容器内目录的共享,双边的改动双边都能看见。
容器退出 -> 宿主机修改共享目录下面的文件 -> docker start $(docker ps -l) 此种方式可以重新启动docker,并且能够共享刚才的目录。
docker run -it -v /宿主机绝对路径目录:/容器内目录:io 镜像名
带权限启动共享目录。容器内只能读取,不能修改。
Dockerfile与数据卷
可到https://hub.docker.com上search相关镜像,后边一般都有dockerfile查看例子的好去处。
可参照那里,写一个简单的Dockerfile
FROM centos
VOLUME ["/dataVolumeContainer1", "/dataVolumeContainer2"]
CMD echo "finished, ------success1"
CMD /bin/bash
运行命令根据Dockerfile build出一个镜像:
docker build -f /root/myDocker/Dockerfile -t zzyy/centos .
生成一个镜像,以docker run -it zzyy/centos 命令跑这个镜像之后,会自动在容器中生成
/dataVolumeContainer1, /dataVolumeContainer2两个目录,同事默认的在宿主机/var/lib/docker/volumes/容器目录1ID/_data生成相应的共享目录于容器种对应起来。这些信息可以通过docker inspect 容器ID查看到。
如果出现docker容器内访问出现cannot open directory:Permission denied,则在挂载目录候多加 --privileged=true参数。
数据卷容器:命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器称为数据卷容器。
docker run -it --name dc01 zzyy/centos 这个会启动一个名字为dc01的容器,而且根据上面的Dockerfile它会挂载两个共享目录。
docker run -it --name dc02 --volumes-from dc01 zzyy/centos这个命令会共享dc01的那两个共享目录。
此时删掉 dc01,共享的数据还存在,又创建 dc03,dc03也能够继承共享的目录。直到没有容器存活,共享的目录才会死去。
Dockerfile语法基础
基础规则:
1.每条保留字指令都必须大写字母且后面要跟随至少一个参数
2. 指令按照从上到下,顺序执行: docker build -f /root/Dockerfile2 -t 新镜像名字:TAG . //.表示当前路径, -f表示Dockerfile路径
3. #表示注释,每条指令都会创建一个新的镜像层,并对镜像进行提交
关键字:
FROM #基础镜像当前镜像是基于哪一个基础镜像的,
MAINTAINER #镜像维护者的姓名和邮箱
RUN #容器构建时需要运行的命令
EXPOSE # 当前容器对外暴露出的端口
WORKDIR #指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
ENV #用来在构建镜像过程中设置环境变量
ADD #将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY #类似ADD, 拷贝文件和目录到镜像中,将从构建上下文目录中<源路径>的文件/目录复制到新的一层镜像内目标路径位置上,如COPY src dst; COPY ["src", "dst"]
VOLUME #容器数据卷,用于数据保存和持久化工作
CMD #指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT #指定一个容器启动时要运行的命令,和CMD一样都是指定容器启动程序和参数。docker run后面的参数会追加到ENTRYPOINT后面
ONBUILD #当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
Docker安装常规步骤
docker search MySQL //先去仓库查找要安装的镜像
docker pull mysql:5.6 //想要安装的镜像,先把它拉取下来,一般是拉取star最多的那个