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分层
相同的镜像可以共享
3.commit镜像
3.1 启动一个默认tomcat
docker run -d -p 8080:8080 tomcat
3.2 进入容器
docker exec -it 容器id /bin/bash
3.3 拷贝文件
cp -r webapps.dist/* webapps
3.4 提交
docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]
docker commit -a="pengpeng" -m="add webapps app" 84a61bab7659 tomcat02:1.0
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 inspect 807be22b4072 查看
测试
5.安装mysql
5.1 docker pull mysql:5.7
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
5.3 安装后用工具连一下
5.4 删除容器
docker rm -f mysql01
docker ps
docker ps -a
6.具名和匿名挂载
6.1匿名挂载
docker run -d -P --name nginx01 -v /etc/nginx nginx
这里只写了容器内的路径 没有写宿主机的路径
6.2 查看所有volume的情况
docker volume ls
6.3 具名挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
docker volume ls
docker volume inspect juming-nginx
所以docker容器内的卷 没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data
如果指定了目录,docker volume ls 是查看不到的
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
7.DockerFile
7.1 DockerFile
7.1 初始DockerFile
7.1.1 home 新建 Docker-test-volume/Dockerfile
[root@localhost ~]# cd /
[root@localhost /]# cd home
[root@localhost home]# mkdir docker-test-volume
[root@localhost home]# cd docker-test-volume/
[root@localhost docker-test-volume]# touch Dockerfile
7.1.2 vim Dockerfile
编辑如下
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash
7.1.3 docker build
docker build -f /home/docker-test-volume/Dockerfile -t pengpeng/centos:1.0 .
7.1.4 查看
docker images
docker run -it 7beb069f53c9 /bin/bash
docker inspect 7beb069f53c9
7.2 数据容器卷
容器之间的配置信息的传递 数据卷容器的生命周期一直持续到没有容器使用为止
但是一旦持久化到了本地,本地的数据不会删除
多个mysql实现数据共享
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 run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7
7.4DockerFile介绍
7.4.1 dockerfile是用来构建docker镜像的文件
步骤
(1)编写一个dockerfile文件
(2)docker build构建称为一个镜像
(3)docker run运行镜像
(4)docker push发布镜像(DockerHub、阿里云仓库)
7.4.2 DockerFile构建过程
(1)关键字(指令)必须大写
(2)执行从上到下顺序
(3)#表示注释
(5)每个指令都会创建提交一个新的镜像 并提交
7.4.3 DockerFile常用指令
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的, 姓名+邮箱 RUN # 镜像构建的时候需要运行的命令
ADD # 步骤
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令,可被替代。
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令
COPY # 类似ADD,将我们文件拷贝到镜像中 ENV # 构建的时候设置环境变量!
7.4.4 创建一个自己的centos
(1)home下创建 docker-test-centos/Dockerfile
cd /
cd home
mkdir docker-test-centos
vim Dockerfile
(2)docker build
docker build -t mycentos:0.1 .
7.4.5 CMD和ENTRYPOINT
CMD #容器启动的时候要运行的命令 可被替代
ENTRYPOINT #容器启动的时候要运行的命令 可以追加
7.4.5.1 CMD
(1)home下新建docker-test-cmd/Dockerfile
mkdir docker-test-cmd
(2)vim Dockerfile
(3)运行
docker build -t cmd-test:0.1 .
docker run cmd-test:0.1
7.4.5.2 ENTRYPOINT
(1)home下新建docker-test-entrypoint/Dockerfile
mkdir docker-test-entrypoint
(2)vim docker-test-entrypoint
(3)测试
docker run entrypoint-test:0.1
docker run entrypoint-test:0.1 -l
7.5 发布自己的镜像
docker login
docker build -t pengpeng/mytomcat:0.1 .
docker tag 容器id pengpeng/mytomcat:1.0
8.Docker网络
8.1 理解Docker 0
8.2 三个网络
docker run -d --name tomcat01 tomcat
ip addr
docker exec -it tomcat01 ip addr
再次启动一个tomcat02
docker run -d -P --name tomcat02 tomcat
ip addr
我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker就会有
一个docker0桥接模式,使用的是veth-pair
veth-pair就是一对的虚拟设备接口,他们都是成对出现的,一端连着协议,一端彼此相连,
veth-pair充当一个桥梁,连接各种虚拟网络设备
docker exec -it tomcat01 ip addr
docker exec -it tomcat02 ip addr
docker exec -it tomcat02 ping 172.17.0.2
docker中所有的网络接口都是虚拟的,虚拟的转发效率高(内网传递文件)
8.3 -link
docker exec -it tomcat02 ping tomcat01
tomcat01和02无法ping通
docker run -d -P --name tomcat03 --link tomcat02 tomcat #--link运行一个tomcat03
docker exec -it tomcat03 ping tomcat02 #tomcat03 ping tomcat02 可以ping通
docker inspect tomcat03
docker exec -it tomcat03 cat /etc/hosts
--link本质就是在hosts配置中添加映射
现在Docker已经不建议使用--link了
自定义网络不适用docker0
docker0不支持容器名连接访问
9.自定义网络
9.1 docker network
docker network
docker network ls
9.2 网络模式
bridge:桥接docker(默认,自己创建也是bridge模式)
none:不配置网络
host:和所主机共享网络
container:容器网络连通
9.3 测试
docker run -d -P --name tomcat01 tomcat
’等价于
docker run -d -P --name tomcat01 --net bridge tomcat
#docker0 特点:默认 域名不能访问
#自定义网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
docker network ls
docker network inspect mynet
启动俩个tomcat
docker run -d -P --name tomcat-net-01 --net mynet tomcat
docker run -d -P --name tomcat-net-02 --net mynet tomcat
docker network inspect mynet
在自定义网络下,服务可以互相ping通,不再使用-link
docker exec tomcat-net-02 ping tomcat-net-01
docker exec tomcat-net-01 ping tomcat-net-02
10 网络连通
启动俩个tomcat 使用默认的docker0
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat02 tomcat
tomcat01 connect后 tomcat01 和 tomcat-01-net ping通了
docker network connect mynet tomcat01
docker exec tomcat-net-01 ping tomcat01
Docker进阶:容器卷、DockerFile、Docker网络原理的更多相关文章
- Docker学习笔记之docker volume 容器卷的那些事(二)
预览目录 更改目录拥有者 Data Container 切换用户 参考文章 0x00 概述 如果你读了docker volume 容器卷的那些事(一),我想应该不会遇到下面这些问题的,毕竟是具有指导意 ...
- Docker:容器的四种网络类型 [十三]
一.None类型 简介:不为容器配置任何网络功能,--net=none 1.创建容器 docker run -it --network none busubox:latest 2.功能测试 [root ...
- Docker学习笔记之docker volume 容器卷的那些事(一)
预览目录 volume 方式 相关用例 使用方式 使用 volume driver bind mount 方式 相关用例 使用方式 配置selinux标签 配置macOS的安装一致性 tmpfs 方式 ...
- Docker进阶-容器监控cAdvisor+InfluxDB+Granfana
概述 前面文章介绍使用docker compose组合应用并利用scale快速对容器进行扩容. 由于docker compose启动的服务都在同一台宿主机上,对于一个宿主机上运行多个容器应用时,容器的 ...
- Docker进阶之四:centos7安装docker
centos7.6 安装docker 参考:https://docs.docker.com/install/linux/docker-ce/centos/ 一.存在老版本先删除 yum remove ...
- Docker进阶之九:Dockerfile 及 通过Dockerfile搭建lnmp
一.Dockerfile指令 指令 描述 指令 描述 FROM 构建的新镜像是基于哪个镜像 例如:FROM centos:6 COPY 拷贝文件或目录到镜像,用法同上例如:COPY ./start.s ...
- Jenkins + docker ,容器中跑docker服务
1. 宿主机:安装docker 2. 启动jenkins服务 https://jenkins.io/download/ Jenkins官网找自己需要的镜像版本号进行使用. docker run -it ...
- 关于docker创建容器报错-docker: Error response from daemon: runtime "io.containerd.runc.v2" binary not installed
今天在对一台服务器(docker相关的业务服务器)进行OS补丁时,默认使用的 yum update -y 对所有的安装包进行了升级 升级完成后,让应用方检查确认应用及功能是否一切正常,如果不正常,严重 ...
- docker进阶1-命令补充和容器卷使用
命令补充 docker信息与帮助 docker version 和 docker info docker --help 查看所有docker命令列表 docker --help run/commit/ ...
- ASP.NET Core使用Docker进行容器化托管和部署
一.课程介绍 人生苦短,我用.NET Core!今天给大家分享一下Asp.Net Core以Docker进行容器化部署托管,本课程并不是完完全全的零基础Docker入门教学,课程知识点难免有没覆盖全面 ...
随机推荐
- 19c PDB数据泵迁入
1.问题描述 用数据泵进行pdb的迁入迁出,模拟测试将其他库的数据导入到19cpdb中 2.环境介绍 source:12.2.0.1.0 target:19.0.0.0.0 3.源端制造数据 创建表空 ...
- docker仓库登录 配置insecure-registries
1. 配置/etc/docker/daemon.json # cat /etc/docker/daemon.json { "registry-mirrors": ["ht ...
- 元素定位工具ChroPath - Chrome浏览器插件
一 ChroPath的作用 可以自动识别元素定位表达式,对于系统需要定位元素多时,可使用这种方法减轻定位工作量,但需要验证 二 ChroPath的安装 下载ChroPath -> 在谷歌浏览器访 ...
- Linux基础服务——Bind DNS服务 Part1
Linux基础服务--Bind DNS服务 Part1 DNS正向解析 实验环境: CentOS8.3.2011 IP地址:192.168.100.50 VMware虚拟环境 NAT网段 需要解析的区 ...
- 超轻量AI引擎MindSpore Lite
超轻量AI引擎MindSpore Lite 揭秘一下端上的AI引擎:MindSpore Lite. MindSpore Lite是MindSpore全场景AI框架的端侧引擎,目前MindSpore L ...
- Nucleus 实时操作系统中断(上)
Nucleus 实时操作系统中断(上) Interrupts in the Nucleus SE RTOS 所有现代微处理器和微控制器都有某种中断设施.这种能力对于提供许多应用程序所需的响应能力是必不 ...
- python小知识,sort和serted的区别
列表对象sort()方法和内置sorted()函数的作用基本相同,但,不同的是sort会改变原有列表的顺序,而sorted不会 具体示例如下: """ create:20 ...
- springMVC异常处理(自定义异常)HandlerExceptionResolver
注:本篇的异常主要指的是controller.service和dao层中执行方法抛出的异常. 一.为什么要处理异常? 因为如果我们不处理异常,异常信息就会直接抛出给浏览器,于是浏览器页面就直接显示异常 ...
- 『言善信』Fiddler工具 — 11、Fiddler中Composer功能详解
目录 1.Composer功能介绍 2.Composer界面说明 3.使用方式 (1)自定义Request请求 (2)Composer重复发送请求 (3)Composer篡改请求数据 1.Compos ...
- 一篇文章通俗易懂的让你彻底理解 Java 注解
很多Java程序员,对Java的注解一知半解,更有甚者,有的人可能连注解是什么都不知道 本文我们用最简单的 demo , 最通俗最短的语言,带你了解注解到底是什么? 先来简单回顾一下基础,我们知道,J ...