具名挂载&&匿名挂载

命令

# 匿名挂载
# -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

容器之间配置信息传递,数据卷容器的生命周期一直持续到没有容器使用为止
但是数据一旦持久化到本地,这个时候本地数据是不会删除的。

分类: docker

浙公网安备33011302000604

辽ICP备20003309号