您当前的位置: 首页 >  docker

自在的旅者

暂无认证

  • 0浏览

    0关注

    695博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

硬核干货!采访100个测试猿,我总结了docker 入门到精通的秘密

自在的旅者 发布时间:2021-08-13 19:31:46 ,浏览量:0

容器数据卷 什么是容器数据卷?

比如你创建了一个 MySQL 的容器,在里面新建数据库、表、数据,之后你想迁移数据或者升级数据库。直接把容器 MySQL 容器删除,里面的数据也会跟着被删除,这时候如果可以把数据和容器分离,单独挂载一个数据卷,那么就能会好的应对这类问题。

使用数据卷

方式一:-v 宿主机路径:容器路径

[root@localhost ~]# docker run -d -v /test:/usr/local/tomcat/webapps --name mytomcat -p 8080:8080 a33700929548
[root@localhost ~]#docker exec -it 3f18bc983 /bin/bash
root@3f18bc9835da:/usr/local/tomcat# cd webapps
root@3f18bc9835da:/usr/local/tomcat/webapps# ls
此时webapps目录下没有任何东西。切换到linxu宿主机
[root@localhost webapps]# cd /home/webapps
[root@localhost webapps]# touch test.java
此时容器webapps目录下也会有test.java,也就是说容器中webapps目录实际是指向linxu宿主机/home/webapps
实战 MySQL 数据卷挂载
[root@localhost ~]# docker run  -d -p 3306:3306 -v /test/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 7aacec936dc9
具名挂载和匿名挂载
[root@localhost ~]# docker run -d --name mynginx -P -v /etc/nginx nginx 
匿名挂载:只给出容器内路径
[root@localhost ~]# docker volume ls
查看所有匿名volume
local        e239204ac9b6687102879dbc1290269ed198a34f80d5f39e4483f9dc713d4cff
[root@localhost ~]# docker run -d --name mynginx -P -v nginx_volume:/etc/nginx nginx 
具名挂载:给出名字,不能在前面加/,加了就表示绝对路径。
[root@localhost ~]# docker volume ls
local        nginx_volume
[root@localhost ~]# docker volume inspect nginx_volume
查看数据卷信息
[
    {
        "CreatedAt": "2021-01-14T01:20:44+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/nginx_volume/_data",
        "Name": "nginx_volume",
        "Options": null,
        "Scope": "local"
    }
]
其中/var/lib/docker/volumes就是所有数据卷在宿主机中的目录。
挂载方式总结
-v 容器内路径 匿名挂载

-v 卷名:容器内路径 具名挂载

-v /宿主机路径:容器路径 指定路径挂载
ro 和 rw
ro    readOnly       #只读
rw     readWrite      #可读可写
docker run -d --name mynginx -P -v nginx_volume:/etc/nginx:ro nginx
docker run -d --name mynginx -P -v nginx_volume:/etc/nginx:rw nginx
# ro 路径只能通过宿主机操作,不能从容器内容操作。
使用 Dockerfile 挂载卷

dockerfile 是啥?dockerfile 用来构建 docker 镜像的文件。

1 编写 dockerfile 文件
FROM cetnos

VOLUME ["volume01","volume02"]

CMD echo ".....end....."
CMD /bin/bash
2 通过 dockerfile 构建镜像
[root@localhost home]# docker build -f /home/dockerfile01 -t lj_centos .
Sending build context to Docker daemon    121MB
Step 1/4 : FROM centos
 ---> 300e315adb2f
Step 2/4 : VOLUME ["volume01","volume02"]
 ---> Running in 625283035ed5
Removing intermediate container 625283035ed5
 ---> e0dfe5f28b8d
Step 3/4 : CMD echo ".....end....."
 ---> Running in 9e46f4c22a0d
Removing intermediate container 9e46f4c22a0d
 ---> 52f777986e57
Step 4/4 : CMD /bin/bash
 ---> Running in c4529bbb2dbf
Removing intermediate container c4529bbb2dbf
 ---> 95917d694396
Successfully built 95917d694396
Successfully tagged lj_centos:latest
#查看镜像
[root@localhost home]# docker images   
REPOSITORY      TAG      IMAGE ID            CREATED             SIZE
lj_centos       latest   95917d694396        12 seconds ago      209MB
3 通过新镜像运行容器

[root@localhost home]# docker run -it lj_centos /bin/bash
[root@3cf8b26d06cd /]# ls -l  
total 0
lrwxrwxrwx.   1 root root   7 Nov  3 15:22 bin -> usr/bin
drwxr-xr-x.   5 root root 360 Jan 15 14:31 dev
drwxr-xr-x.   1 root root  66 Jan 15 14:31 etc
drwxr-xr-x.   2 root root   6 Nov  3 15:22 home
lrwxrwxrwx.   1 root root   7 Nov  3 15:22 lib -> usr/lib
lrwxrwxrwx.   1 root root   9 Nov  3 15:22 lib64 -> usr/lib64
drwx------.   2 root root   6 Dec  4 17:37 lost+found
drwxr-xr-x.   2 root root   6 Nov  3 15:22 media
drwxr-xr-x.   2 root root   6 Nov  3 15:22 mnt
drwxr-xr-x.   2 root root   6 Nov  3 15:22 opt
dr-xr-xr-x. 146 root root   0 Jan 15 14:31 proc
dr-xr-x---.   2 root root 162 Dec  4 17:37 root
drwxr-xr-x.  11 root root 163 Dec  4 17:37 run
lrwxrwxrwx.   1 root root   8 Nov  3 15:22 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 Nov  3 15:22 srv
dr-xr-xr-x.  13 root root   0 Jan 15 14:05 sys
drwxrwxrwt.   7 root root 145 Dec  4 17:37 tmp
drwxr-xr-x.  12 root root 144 Dec  4 17:37 usr
drwxr-xr-x.  20 root root 262 Dec  4 17:37 var
drwxr-xr-x.   2 root root   6 Jan 15 14:31 volume01
drwxr-xr-x.   2 root root   6 Jan 15 14:31 volume02
容器之前共享数据卷

多个容器之间可以共享数据卷,类似于共享文件夹。共享的原理是双向拷贝,不会因为删除一个容器导致其他容器不能使用数据卷。

1. 先启动一个centos docker01
[root@localhost ~]# docker run -it --name docker01 lj_centos
2. 在启动一个centos docker02,并关联挂载卷
[root@localhost ~]# docker run -it --name docker02 --volumes-from docker01 lj_centos
3. 在其中一个容器的共享数据卷创建文件,观察另外一个
4. 删除docker01容器查看docker02容器是否能运行

如果您觉得文章还不错,可以关注,评论,点赞,收藏 一下,因为这将是我持续输出更多优质文章的最强动力!同时我也给大家准备了18G的软件测试核心知识点,对于软件测试的的朋友来说应该是很全面最的备战仓库,有需要的朋友可以关注我的微信公众号:程序员二黑,免费获取!

最困难的时候,也就是我们离成功不远的时候!接下来的路我们一起加油!

精彩推荐

在职阿里6年,一个29岁女软件测试工程师的心声

腾讯软件测试岗二面:web 测试问题被虐哭了,直到学长给了我这些知识点…

10年测试工程师 ——告诫大家要有自己的人生规划,选择远比努力更重要!

关注
打赏
1665557745
查看更多评论
立即登录/注册

微信扫码登录

0.0391s