这一章没学会
docker inspector 检查
将宿主机里的路径source 挂载到容器内部的哪里Destination
docker create -v /d/dockerStudy/dockerVolume/data:/var/mydata --name data_container ubuntu
创建一个容器,但是不启动
挂载本地目录/d/dockerStudy/dockerVolume/data到容器/var/mydata
名字叫data_container
镜像用ubuntu
docker run -it --volumes-from data_container ubuntu /bin/bash
volumes-from从指定容器data_container 挂在到新建的容器(这个容器也是基于Ubuntu)
docker run -p 8080:80 -d -v /d/dockerStudy/dockerVolume:/usr/share/nginx/html nginx
挂在载本地目录/d/dockerStudy/dockerVolume到/usr/share/nginx/html ,执行nginx并映射本地8080到容器80
volumn挂载第三种方式:创建基础带挂载的数据容器
挂载本地目录
Mac上,通过screen命令,进入虚拟层,查看alpine主机,查看volume的宿主机的文件内容
docker inspect container-name
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
运行一个nginx容器,同时挂载一个卷
把本地的一个目录挂载到容器中的一个路径下,容器内容需要修改时,只需要修改host主机对应得目录中得内容即可。
创建一个数据容器,把该容器作为volumes挂载到其它容器中,可以挂载到多个容器,做到容器间得数据哦共享
docker run --volumes-from ...
mkdir data docker create -v $PWD/data:/var/mydata --name data_container ubuntu docker run -it --volumes-from data_container ubuntu /bin/bash root@c3dfa5e6bc53:/# mount | grep data/dev/sda1 on /var/mydata type ext4 (rw,relatime,errors=remount-ro)
$ docker run -v $PWD/code:/var/www/html nginx
$ docker run -v /usr/share/nginx/html nginx
容器映射本地开发环境的方法
docker run -p 81:80 -d -v $PWD/本地开发目录:/需要映射的服务器目录
Docker exec -it 容器 /bin/base 进入容器地址
挂载:
第一种
把Docker_host宿主机容器地址挂载到nginx容器的/usr/share/nginx/html
docker run -v -d --name /usr/share/nginx/html nginx
第二种
把本地的目录挂载到容器的数据目录
Docker run -v $PWD/code :/usr/share/nginx/html nginx
第三种(实现多容器挂载,数据共享)
创建用于存放数据的目录;创建只用于存放数据的容器,把数据目录挂载到容器;
docker create -v $PWD/code:/var/mycode --name "" 镜像
运行容器,并挂载到已创建,挂载的容器,实现多容器挂载(容器与容器的挂载)
Docker run --valumes-from 容器 镜像 /bin/base(挂载并进入到镜像地址)
容器和宿主机目录挂载的三种方式:
1.第一种方式:
1234567 | # 运行容器内部地址nginx用来访问网页的地址/usr/share/nginx/html docker run -d --name nginx - v /usr/share/nginx/html nginx #给出容器的所有信息 docker inspect nginx > Mounts.Source 宿主机目录 [如果是mac,则该路径不是mac上的实际路径,因为mac上运行docker是还有一层虚拟层,这是docker虚拟层中的路径,可以在docker中访问到] > Mounts.Destination: /usr/share/nginx/html/ 容器目录 screen ~ /Library/Containers/com .docker.docker /Data/com .docker.driver.amd64-linux /tty [这个路径才是mac本身挂载的目录] |
2.第二种方式:
12 | #将当前目录下的html子目录挂载到容器中中的/var/www/html docker run -p 80:80 -d - v $PWD /html : /var/www/html nginx |
3.第三种方式:
123456 | # 宿主机目录:$PWD/data docker目录:/var/mydata 容器名:data_container 基础镜像:ubuntu docker create - v $PWD /data : /var/mydata --name data_container ubuntu # -it表示使用交互的方式进入容器[默认ubuntu基础镜像没有服务] docker run -it --volumes-from data_container ubuntu /bin/bash #进入后执行mount,可以看到有/var/mydata目录的挂载信息 mount |
docker run -d --name nigix -v /usr/share/nginx/html nginx :
通过-v挂载一个卷 -v 后面的路径就是容器里面的路径,-d是通过守护进程来运行, --name 给他取了一个名字
第三种数据卷:
mkdir vol3
cd vol3
mkdir data
docker create -v $PWD/data:/var/mydata --name data_container ubuntu
docker run -it --volumes-from data_container ubuntu /bin/bash
上面这条命令就是从容器data_container中得到一个容器卷。-it 和 /bin/bash 是可以执行交互命令
第二种数据卷:将本地目录挂载到容器中数据卷里面
docker run -p 80:80 -d -v $PWD/html:/usr/share/nginx/html nginx
1.docker run -d --name nigix -v /usr/share/nginx/html nginx : 通过-v挂载一个卷
2.docker inspec nigix
3.docker exec -it nginx /bin/bash :进入到宿主机中 ,进入到刚才的路径 /usr/share/nginx/html
三种挂载方式:
1、宿主机更改后,容器内的也随之更改,如何挂载?
docker run -d --name mynginx -v /user/share/nginx/html nginx
涉及到的点:
mac:通过一个虚拟层运行了一个alpine的主机,在那里面运行docker,所以要进入alpine的主机。如果挂载成功,则在宿主内修改文件后,容器也会相应修改;
window:在一个Linux虚拟环境下运行,那如何进入宿主机环境呢?这有个链接可以参考,前提是在cmd中操作,powershell中我进不去
参考链接:https://blog.csdn.net/qq_24874939/article/details/93725409
win10-PowerShell下使用vim:https://blog.csdn.net/qq_37933114/article/details/82932840
vim下载:PC: MS-DOS and MS-Windows这行下面的那个链接
2、本地修改后,容器内的也随之更改,这很适用于本地开发
docker run -v $pwd/code:/usr/share/nginx/html nginx
3、创建一个仅有数据的容器,当作volume挂载到其他容器中,适用于被共享
创建仅有数据的容器:docker create -v $pwd/data:/var/mydata --name data_container ubuntu
$pwd/data:本地的路径
/var/mydata:容器里的路径
运行新的容器, 把这个容器的数据卷加载到那个数据卷里面去,并直接进入这个容器:docker run --it --volumes-from data_container ubuntu /bin/bash
--volumes-from:从另外的容器挂载
Source:宿主机的路径
Destination: 容器内的路径
docker inspect 创建的容器的名字
-v volumn 提供独立于容器外的持久化存储
mount
这就说明数据挂载是比较成功的
docker run -v /usr/share/nginx/html nginx (运行一个容器,-v挂载一个卷)
docker run -d -name nginx -v /usr/share/nginx/html nginx /usr/share/nginx/html这是容器内部的地址,是nginx用来访问这些网页的地址 -d用来当一个daemon运行
docker inspect nginx 显示容器所有的信息
但是 ls /var/lib/docker/volumes/............没有这个文件
在mac中还有一个层,它通过虚拟层运行了一个alpine主机,在里面运行了docker,所以我们要进到那个主机里面去。使用linux host不用这么复杂
docker exec -it nginx /bin/bash
cd /usr/share/nginx/html
cat index.html
本地的目录挂载到容器里面
docker run -v $PWD/code:/var/www/html nginx
cd docker/d2
docker run -p 80:80 -d -v $PWD/html:/usr/share/nginx/html nginx
$PWD是shell的环境变量,指向当前目录。/usr/share/nginx/html 是要挂载在容器里面的目录
出现80端口被占用的错误,干掉。然后重新执行
docker run -p 80:80 -d -v $PWD/html:/usr/share/nginx/html nginx
第三种方式:
运行 nginx:
docker run -d --name nginx -v /usr/share/nginx/html nginx
-d 是运行方式(Daemon守护进程)
使用 inspect 检查 nginx:
docker inspect nginx
inspect 是检查的意思
1 本地目录挂载容器目录。
2 指定镜像,本地没有对应镜像,从远程拉取。
example:
docker create -v $PWD/data:/var/mydata --name data_container ubuntu
删除容器
docker stop containerId
docker rm containerId
本地目录挂载容器数据卷中
docker run -v $PWD/code:/var/www/html nginx