Docker进阶:容器卷、DockerFile、Docker网络原理

1.Docker镜像

1.1镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和机遇运行环境开发的软件。

包含一个软件的所有内容。蒋所有的应用和环境,直接打包为docker镜像,直接运行

1.2Docker镜像加载原理

1.2.1UnionFs(联合文件系统)

Union是一种分层、轻量级并且高性能的文件系统,支持对文件系统的修改作为一次提交

一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统

Union文件系统是Docker镜像的基础

1.2.3Docker镜像加载原理

docker的镜像实际上由一层一层的文件系统组成(UnionFs)

boots(boot file system):主要包含bootloader和Kernel bootloader主要是引导加kernal,linux刚启动

                                        时会加bootfs文件系统,在Docker镜像的最底层是boots

rootfs(root file system):在bootfs之上。包含linux的/dev /proc /bin /etc 等标准目录和文件

 

2.docker分层

相同的镜像可以共享

Docker进阶:容器卷、DockerFile、Docker网络原理

 

 

 

3.commit镜像

3.1 启动一个默认tomcat

docker run -d -p 8080:8080 tomcat

Docker进阶:容器卷、DockerFile、Docker网络原理

 

 

 3.2 进入容器

docker exec -it 容器id /bin/bash

3.3 拷贝文件

cp -r webapps.dist/* webapps

Docker进阶:容器卷、DockerFile、Docker网络原理

 

 

 3.4 提交

docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]

docker commit -a="pengpeng" -m="add webapps app" 84a61bab7659 tomcat02:1.0

Docker进阶:容器卷、DockerFile、Docker网络原理

 

 

 

4.容器数据卷

4.1 容器的持久化和同步操作,容器间也是可以共享数据的

4.2 使用容器卷

4.2.1 使用 -v 命令挂载

docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口

docker run -it -v /home/ceshi:/home centos /bin/bash

Docker进阶:容器卷、DockerFile、Docker网络原理

 

 

 使用 docker inspect 807be22b4072 查看

Docker进阶:容器卷、DockerFile、Docker网络原理

 

 

 测试

Docker进阶:容器卷、DockerFile、Docker网络原理

 

 

 

5.安装mysql

5.1 docker pull mysql:5.7

Docker进阶:容器卷、DockerFile、Docker网络原理

5.2 启动容器

#参考官网 docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

# -d 后台运行

# -p 端口映射

# -v 卷挂载

# -e 环境配置

# -- name 容器名字

docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

 

 

Docker进阶:容器卷、DockerFile、Docker网络原理

 

 

5.3 安装后用工具连一下

Docker进阶:容器卷、DockerFile、Docker网络原理

 

 

5.4 删除容器

docker rm -f mysql01

Docker进阶:容器卷、DockerFile、Docker网络原理

 

 

docker ps  

docker ps -a

Docker进阶:容器卷、DockerFile、Docker网络原理

 

 

 

6.具名和匿名挂载

6.1匿名挂载

docker run -d -P --name nginx01 -v /etc/nginx nginx

这里只写了容器内的路径 没有写宿主机的路径 Docker进阶:容器卷、DockerFile、Docker网络原理

 

 

 

6.2 查看所有volume的情况

docker volume ls

Docker进阶:容器卷、DockerFile、Docker网络原理

 

 

6.3 具名挂载

docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx

Docker进阶:容器卷、DockerFile、Docker网络原理

docker volume ls

Docker进阶:容器卷、DockerFile、Docker网络原理

docker volume inspect juming-nginx

所以docker容器内的卷 没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data

如果指定了目录,docker volume ls 是查看不到的

Docker进阶:容器卷、DockerFile、Docker网络原理

 

 

6.4拓展

ro #readonly 只读 这个路径只能通过宿主机来操作 容器内部无法操作

rw #readwrite 可读可写

docker run -d -P --name nginx05 -v juming:/etc/nginx:ro nginx

docker run -d -P --name nginx05 -v juming:/etc/nginx:rw nginx

 

Docker进阶:容器卷、DockerFile、Docker网络原理

上一篇:IP地址详解及计算


下一篇:【Scala】02 循环