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网络原理的更多相关文章

  1. Docker学习笔记之docker volume 容器卷的那些事(二)

    预览目录 更改目录拥有者 Data Container 切换用户 参考文章 0x00 概述 如果你读了docker volume 容器卷的那些事(一),我想应该不会遇到下面这些问题的,毕竟是具有指导意 ...

  2. Docker:容器的四种网络类型 [十三]

    一.None类型 简介:不为容器配置任何网络功能,--net=none 1.创建容器 docker run -it --network none busubox:latest 2.功能测试 [root ...

  3. Docker学习笔记之docker volume 容器卷的那些事(一)

    预览目录 volume 方式 相关用例 使用方式 使用 volume driver bind mount 方式 相关用例 使用方式 配置selinux标签 配置macOS的安装一致性 tmpfs 方式 ...

  4. Docker进阶-容器监控cAdvisor+InfluxDB+Granfana

    概述 前面文章介绍使用docker compose组合应用并利用scale快速对容器进行扩容. 由于docker compose启动的服务都在同一台宿主机上,对于一个宿主机上运行多个容器应用时,容器的 ...

  5. Docker进阶之四:centos7安装docker

    centos7.6 安装docker 参考:https://docs.docker.com/install/linux/docker-ce/centos/ 一.存在老版本先删除 yum remove ...

  6. Docker进阶之九:Dockerfile 及 通过Dockerfile搭建lnmp

    一.Dockerfile指令 指令 描述 指令 描述 FROM 构建的新镜像是基于哪个镜像 例如:FROM centos:6 COPY 拷贝文件或目录到镜像,用法同上例如:COPY ./start.s ...

  7. Jenkins + docker ,容器中跑docker服务

    1. 宿主机:安装docker 2. 启动jenkins服务 https://jenkins.io/download/ Jenkins官网找自己需要的镜像版本号进行使用. docker run -it ...

  8. 关于docker创建容器报错-docker: Error response from daemon: runtime "io.containerd.runc.v2" binary not installed

    今天在对一台服务器(docker相关的业务服务器)进行OS补丁时,默认使用的 yum update -y 对所有的安装包进行了升级 升级完成后,让应用方检查确认应用及功能是否一切正常,如果不正常,严重 ...

  9. docker进阶1-命令补充和容器卷使用

    命令补充 docker信息与帮助 docker version 和 docker info docker --help 查看所有docker命令列表 docker --help run/commit/ ...

  10. ASP.NET Core使用Docker进行容器化托管和部署

    一.课程介绍 人生苦短,我用.NET Core!今天给大家分享一下Asp.Net Core以Docker进行容器化部署托管,本课程并不是完完全全的零基础Docker入门教学,课程知识点难免有没覆盖全面 ...

随机推荐

  1. 记一次 .NET 某电商交易平台Web站 CPU爆高分析

    一:背景 1. 讲故事 已经连续写了几篇关于内存暴涨的真实案例,有点麻木了,这篇换个口味,分享一个 CPU爆高 的案例,前段时间有位朋友在 wx 上找到我,说他的一个老项目经常收到 CPU > ...

  2. ThreadLocal与ThreadLocalMap源码分析

    ThreadLocal类 该类主要用于不同线程存储自己的线程本地变量.本文先通过一个示例简单介绍该类的使用方法,然后从ThreadLocal类的初始化.存储结构.增删数据和hash值计算等几个方面,分 ...

  3. Django(44)drf序列化源码分析(1)

    序列化与反序列化   一般后端数据返回给前端的数据格式都是json格式,简单易懂,但是我们使用的语言本身并不是json格式,像我们使用的Python如果直接返回给前端,前端用的javascript语言 ...

  4. python 导入同级目录文件、上级目录文件以及下级目录数据集和模块包

    划重点: 其中dataset_path = ''表示在Python工作文件夹 dataset_path = '..'表示在Python工作文件夹的上级文件夹 dataset_path = '某某文件夹 ...

  5. i.MX6UL: i.MX 6UltraLite处理器 - 低功耗,安全,Arm® Cortex®-A7内核

    i.MX6UL: i.MX 6UltraLite处理器 - 低功耗,安全,Arm Cortex-A7内核 概述 MX6UltraLite作为i.MX6系列的扩展,一系列高性能.超高效的处理器,采用先进 ...

  6. 大型图像数据聚类匹配:ICCV2019论文解析

    大型图像数据聚类匹配:ICCV2019论文解析 Jointly Aligning Millions of Images with Deep Penalised Reconstruction Conge ...

  7. Docker_Swarm集群系统

    Docker_Swarm集群系统 一.Docker Swarm 介绍 实践中会发现,生产环境中使用单个 Docker 节点是远远不够的,搭建 Docker 集群势在必行.然而,面对 Kubernete ...

  8. Python分析离散心率信号(上)

    Python分析离散心率信号(上) 一些理论和背景 心率包含许多有关信息.如果拥有心率传感器和一些数据,那么当然可以购买分析包或尝试一些可用的开源产品,但是并非所有产品都可以满足需求.也是这种情况.那 ...

  9. Hash源码注释解析

    部分代码注释解析: 1 import java.io.IOException; 2 import java.io.InvalidObjectException; 3 import java.io.Se ...

  10. 11-05 File类

    1. 通过File输出当前项目目录下的文件"myfile.txt"的名字,大小,最后修改时间. 最后修改时间格式如:2016-03-23 14:22:16 package com. ...