具名挂载&&匿名挂载
命令
# 匿名挂载
# -v 容器内路径
docker run -d -P --name nginxtest -v /etc/nginx nginx
# 具名挂载
# 注意这里juming-nginx前面没有/ ,没有/ 就不是目录,只是一个普通的配置
docker run -d -P --name nginxtest2 -v juming-nginx:/etc/nginx nginx
# 查看所有volume情况
docker volume ls
# 查看卷情况,包括位置
docker volume inspect juming-nginx
判断挂载方式
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v 主机路径:容器内路径 # 指定路径挂载
ro,rw拓展,改变读写权限
# read only
docker run -d -P --name nginxtest2 -v juming-nginx:/etc/nginx:ro nginx
# read write
docker run -d -P --name nginxtest2 -v juming-nginx:/etc/nginx:rw nginx
# 有ro说明这个路径只能通过宿主机来操作,容器内无法操作
所有docker容器内的卷,在没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx(卷名)/_data
通过具名挂载可以很方便的找到我们的卷,大多情况使用具名挂载
执行
[root@iZbp1goskzrblqlckwzt6iZ ~]# docker run -d -P --name nginxtest -v /etc/nginx nginx
05d52506e0d6a982473cf5733b8587c637d313e7e407a3cacf66b588ec3073df
[root@iZbp1goskzrblqlckwzt6iZ ~]# docker volume --help
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes
Run 'docker volume COMMAND --help' for more information on a command.
[root@iZbp1goskzrblqlckwzt6iZ ~]# docker volume ls
DRIVER VOLUME NAME
local 0b01b3aa3b492a7aae3232af15d61345b9d605a96e7646c0a831f7d0a56b5994
local 2b4da44487622b57a0ea79b6fedaf15a0ed16e5c92802bafb6ca0409d0fa25be
local 5a588209b1996f08ef4db35aee6965e45e8e0eae60fad04c45e0040d37d7bd1a
local 06ee7d148b173daee90bd998b19148f42b28d0eabaa95b5b804a1642f9fc61d2
local 8aec201d31eeb155ac8c9531583b468007ddcfabc88647c5471a8b012e001c3c
local 9a82f15a66ed8f860dc01d15bdc83d7af67287d5c0e976b9ab923c32a5a69a34
local 029c9aaedf6c20ffafcebce21657c17639d281a1d43c18e0f890ebaa487d9093
local ccdbef2406d65a5b6f72f3d281d27b310fca566aa844403f7703d4cb778265fd
local d99b0b88989e79d45dcd4c10b1408b2ce0c21cf96c95d371f59f2c9456796fc4
local e45345c89ecf0f37b371e7164fb509243ee9c4a03e6a953b4f716ace34571094
Dockerfile
# 创建Dockerfile
# 指令都为大写
FROM centos
# 匿名挂载
VOLUME ["volume01", "volume02", "volume03"]
CMD echo "-----end----"
CMD /bin/bash
构建
# . 表示当前目录
docker build -f dockerfile路径 -t 生成在哪个目录 .
# 例子
docker build -f dockerfile01 -t xiaosheng/centos-test .
命令
命令
FROM # 基础镜像
MAINTAINER # 镜像谁写的, 姓名+邮箱
RUN # 镜像构建时需要运行的命令
ADD # 添加内容
WORKDIR # 镜像工作目录
VOLUME # 挂载目录
EXPOSE # 指定暴露端口, 和-p一样
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令, 可以追加命令
ONBUILD # 但构建一个被继承的Dockerfile, 这个时候就会运行ONBUILD 指令,触发指令
COPY # 类似ADD ,将自己文件拷贝到镜像中
ENV # 构建的时候设置环境变量
例子
FROM centos
MAINTAINER xiaosheng<2967615353@qq.com>
ENV MYPATH /usr/local
WORKDIR MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echoMYPATH
CMD echo "------end-----"
CMD /bin/bash
例子2
# 文件名:Dockerfile
FROM centos
MAINTAINER xiaosheng<2967615353@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u251-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.55.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_251
ENV CLASSPATHJAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.55
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.55
ENV PATHPATH:JAVA_HOME/bin:CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.55/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.55/bin/logs/catalina.out
# 构建
docker build -t testtomcat:1.0 .
数据卷容器,同步技术
数据卷容器
比如多个mysql同步数据
命令
docker run -it --name docker01 xiaosheng/centos:1.0
docker run -it --name docker02 --volumes-from docker01 xiaosheng/centos:1.0
docker run -it --name docker03 --volumes-from docker01 xiaosheng/centos:1.0
容器之间配置信息传递,数据卷容器的生命周期一直持续到没有容器使用为止
但是数据一旦持久化到本地,这个时候本地数据是不会删除的。