Docker基础学习

Docker基础

来自于狂神,详见狂神的B站 https://www.bilibili.com/video/BV1og4y1q7M4

核心思想是隔离,通过隔离机制可以实现的服务器性能

容器化技术也是一种虚拟化技术。

相比较虚拟机技术:

  • 传统的虚拟机技术,虚拟出一套硬件,运行一个完整的操作系统,在这个操作系统上面运行安装软件
  • 容器内应用直接运行宿主机的内容,无自己的内核,无虚拟硬件
  • 容器间相互隔离,每个容器内部均有自己的一套文件系统,互不影响

Docker的优势

  • 应用更快速的交付与部署
  • 更加便捷的升级与扩缩容
  • 更加简单的系统运维
  • 更高效的计算资源利用

Docker的基本名词

镜像(imager):相当于一个模板,借此来创建相应的容器服务。镜像可以创建多个容器。

容器(container):Docker利用容器技术,独立运行一个或者一组运行,通过镜像来创建。

仓库(repository):镜像的仓库

Docker的安装

使用阿里云的源

# yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Docker的底层原理

Docker是一个C/S结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问。DockerServer的接受到DockerClient的指令就会执行

Docker比VM快的原因:

  1. docker比VM少更多抽象层
  2. Docker利用的是宿主机的内核,VM需要额外搭建一个Guest OS

Docker的基本命令

https://docs.docker.com/reference/

出现报错deamon runing处理方式

systemctl daemon-reload
service docker restart
service docker status

出现pull time out 的问题

一遍使用阿里云的源就可以解决,yum以后需要restart docker
systemctl start docker
docker search mysql 
docker pull 镜像名:tag
docekr rmi -f 镜像id
docker run [可选参数] image

#参数说明
--name=="Name"  容器名称用以区分容器
-d              后台方式运行
-it             使用交互方式运行,进入容器查看相应的内容
-p              指定容器端口 -p 8080:8080
    -p ip:主机端口:容器端口
    -p 主机端口:容器端口
    -p 容器端口
-P

docker ps     查看运行的容器
 -a           查看当前运行的容器+历史的运行的容器

docker rm 容器id 删除容器

exit 退出容器
Ctrl +P +Q 不停止退出

docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id
docker run -d 镜像名
#存在的问题:后台的运行必须要有一个前台进程,docker没有发现应用,就会自动停止
docker tops 容器id
#进程信息
docker inspect
#查看容器的元数据

#使用后台运行方式的容器需要进入修改配置
docker exec -it 容器id bashShell  #开启新的终端
docker attach 容器id #进入正在执行的终端

#拷贝内容
docker cp id:路径 目的主机路径

Docker镜像

镜像是一种轻量级可执行的独立软件包,里面包括软件运行所需要的代码、运行时库、环境变量与配置文件

Docker镜像加载原理

UnionFS 联合文件系统

UnionFS是一种分层轻量级的高性能文件系统,支持对文件系统的修改作为一次提交来进行叠加,同时可以将不同的目录文件加载到统一的虚拟文件系统下。

Docker镜像加载原理

Docker镜像实际上是一层一层的文件系统组成。即UnionFS

boorfs主要包括bootloader和kernel,bootloader主要是引导加载kernel。Linux刚启动的时候会加载bootfs,docker类似。包括boot加载器与内核,boot 加载完成以后内核就存在与系统中,内存的使用权限有bootfs移交给内核,系统卸载bootfs。

rootfs是bootfs之上,标准的Linux系统的文件目标,是不同操作系统的发行版。精简的os相应的rootfs特别小,只需要包括最基本的命令工具与程序库,底层直接使用的是host的kernel。

分层原理

所有的镜像都起始于一个基础镜像,当存在新的内容或者修改时,在当前镜像之上创建新的镜像层

Docker通过存储引擎(新版使用的是快照机制)实现镜像层堆栈,从而保证多镜像层对外展示为统一的文件系统。

Dokcer镜像是只读的,容器启动的时候,一个新的可写层加载到镜像底部,即容器层。

commit镜像

docker commit 提交容器为一个新的副本
 -m="提交的描述信息"
 -a="作者"
 容器id
 目标镜像名:tag

容器数据卷

含义

容器之间的数据共享技术:将容器的目录挂载到Linux上面

实现容器的同步化与持久操作

容器之间的数据共享

使用方法

使用命令来挂载 -v

docker run -it -v 主机目录:容器目录

是一种双向绑带的过程

具名挂载与匿名挂载

#匿名挂载
docker run -d -P --name nginx01 -v /ect/nginx nginx

#查看容器内部卷
docker volume ls
#具名挂载
docker run -d -P --name nginx02 -v juming:/etc/nginx nginx
#查看具体地址
docker volume inspect juming

在没有指定目录的情况下,所有的地址默认在"/var/lib/docker/volumes/juming/_data"

-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /宿主机:容器 #指定路径挂载
#进一步可以添加相应ro re实现读写权限 一旦设置了权限,ro只能通过宿主机来改变,容器内部无法改变

数据卷容器

docker run  -it --name docker01 --volume-from docker02 目录

相当于使用该命令完成容器间数据的继承关系 使用这个方法可以实现容器间的数据共享

容器之间的配置信息的传递,容器数据生命周期可以时持续到使用完成。也可以通过本地实现持久化。

DockerFile

DcokerFile是用来 构建的docker镜像的文件

  1. 编写dockerfile文件
  2. docker build构建成一个镜像
  3. docker run 运行镜像
  4. docker push 发布

DockerFile 的构建过程

所有的关键字的必须是大写,顺序执行

#表示的是注释

每一个指令都会创建的一个新的镜像层 并提交

DockerFile是构建文件,定义了相应的源文件与代码

DockerImage是通过DockerFIle构建生成的镜像,是最终发布运行的产品

DockerFile命令

FROM              #基础镜像
MAINTAINER        #维护者
RUN               #构建镜像时候的命令
ADD               #步骤 添加内容
WORKDIR           #工作目录
VOLUEME           #挂载目录
EXPOSE            #暴露端口
CMD               #容器启动的时候要执行的命令
ENTRYPOINT        #可以直接追加命令
ONBUILD           #当构建一个被继承的DOckerFile 会运行相应,触发指令
COPY              #类似ADD将文件拷贝到相应的镜像里面
ENV               #构建的时候设置相应的环境变量
docker build -f dockerfile文件路径 -t 镜像名:[tag]

发布自己的镜像

跟github一样的

阿里云的话

登录===》找到容器镜像服务===》创建命名空间====》创建容器镜像

Docker网络

原理

  1. docker自身使用桥接模式的建立一个网段,docker0相当于网卡,使用的是veth-pair技术
  2. 容器内部的网卡都是成对出现的,veth-pair虚拟设备接口,一端连着协议。一端彼此相连

在这里插入图片描述

容器联通

通过 --link即可联通

原理就是修改host。。。

自定义网络

网络模式:

  • Bridge 默认

  • none

  • host:和宿主机共享网络

  • container:容器网络连接(局限大)

docker network creat --dirver brisge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

创建自己的容器使用自己的网络

docker run -d -P --name tomcat --net mynet

使用自己的网络可以搭建完成相应的IP与容器名相应的连续使用,不需要的使用–link

docker exec -it tomcat01 ping tomcat02 

可以在不同的集群之间使用的不同的子网 从而保证集群的健康

网络连通

一个容器两个IP 即类似公网IP与内网IP

使用命令就是 dooker network connect

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值