docker基本概述+部署(一)

1. docker介绍

1.1 docker概述

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux机器或Windows机器上,实现虚拟化,容器时完全使用沙箱机制,相互之间不会有任何接口,简单来讲, Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

优势 :
docker引擎统一了基础设施环境:docker环境------》image------>封装一个简易的操作系统(3.0+G)
docker引擎统一了封装应用(装箱/封装-类比于集装箱)方式:docker镜像一》 images
docker 引擎统一了运行时环境:docker容器一 》基于镜像——》运行为容器(可运行的环境),实现了一次构建、多次、多处使用

1.2 docker组成

cgroup(资源控制)和namespases(名称空间)两种构成,控制管理六个名称空间
名称空间( Namespaces):提供容器的隔离工作区的技术
控制组(Control groups):资源管理功能,将应用程序限制为一组特定的资源
控制组允许Docker Engine将可用的硬件资源共享给容器,并有选择地实施限制和约束

6个名称空间:

user:操作进程的用户和用户组
net:网络设备、端口
pid:进程号
uts:主机名和主句域
ipc:应用间的通信使用的内存空间
mount:文件系统和挂载点

3大组件:

镜像:一组资源的集合,包含了应用程序、相关依赖包和运行环境等,相当于容器的模板
容器:基于镜像的一种运行时状态,每个容器都是相互隔离的
仓库:存放image镜像

4大网络模式:
HOST模式:
docker容器没有自己的网卡和IP,而是使用宿主机的ip和端口,和宿主机共用一个网络名称空间,它的最大优势时网络性能比较好,但是因为它是直接使用的宿主机的IP地址,其隔离性不好,安全性相对不高

Container模式:
容器不会创建自己的网卡和ip,而是和一个指定容器共享IP,端口范围,它不是跟宿主机共享IP地址,相对host模式安全性较高,两个容器的进程可以通过lo:0网卡设备通信

None模式:
该模式下容器只有lo回环网卡,关闭了网络功能

Bridge模式:
该模式会为每一个容器设置IP地址,将容器连接到一个docker虚拟网,通过docker0网桥及iptables的nat表配置与宿主机通信,从docker0子网中分配一个IP给容器使用

1.3 docker与虚拟机的区别:

不同点containervm
启动速度秒级(进程控制)分钟级(来宾操作)
运行性能接近原生50%左右损失
磁盘占用MBGB
数量成千上百一般几十台
隔离性进程级别系统级别
操作系统主要支持Linux(只需要支持引擎)几乎所有(宿主机操作系统)
封装程度直达包项目代码与依赖关系,共享宿主机内核完整的操作系统

docker 和vm 解决虚拟机的问题:
docker解决了vm的一个环境孤岛的问题
docker可以自定义传参

1.4 docker镜像分层

Dockerfile:
Dockerfile中每个指令都会创建一个新的镜像层
镜像层将被缓存和复用(前一层会缓存给后一层使用)
当Dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效
某一层的镜像缓存失效过后,它只会的镜像层缓存都会失效,镜像层时不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件

Docker镜像的分层:docker镜像分成基于AUFS(能把多个文件内容合并在一起)构建

2. 部署docker:

2.1 安装docker:

1.环境配置
systemctl stop firewalla
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
vim /etc/reslov.conf
nameserver 114.114.114.114

2.安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
#device-mapper-persistent-data:存储驱动
#lvm2:控制工具
设置阿里云镜像源,也可以使用官方源,但是官方源太慢了
cd /etc/yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.安装docker社区版并启动
yum install -y docker-ce

systemctl start docker
systemctl enable docker

2.2 镜像加速

首先登陆阿里云官网:https://www.aliyun.com/?utm_content=se_1000301881‘,搜索“镜像加速”


mkdir -p /etc/docker
直接命令行输入:
tee /etc/docker/daemon.json <<-'EOF'
{
 "registry-mirrors": ["https://2x1jg5vu.mirror.aliyuncs.com"]
 }
 EOF

systemctl daemon-reload
systemctl restart docker

2.3 网络优化

vim /etc/sysctl.conf
	net.ipv4.ip_forward=1
sysctl -p
systemctl restart network
systemctl restart docker
docker images 或 docker image ls	##查询镜像列表

2.4 docker基础操作

查看docker版本:docker -v

查看镜像:docker images
名称			 标签	   镜像id		  创建时间		 大小

查看容器: docker ps -a
容器id          镜像名		 启动脚本	创建时间			 容器状态					 端口      名称	
CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                      PORTS     NAMES

显示 docker 的系统级信息,比如内核,镜像数,容器数等:
docker info

2.5 容器内操作

创建容器:
①:创建容器
	docker create -it 镜像名:标签 /bin/bash
		-i:让容器的标准输入保持打开
		-t:分配一个伪终端
		-d:后台守护进程的方式运行
②:启动容器
	docker start 容器id

启动一次性运行:
docker run centos:7 /usr/bin/bash -c ls /
-c:传递命令参数

持续性运行:
docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello; done"	##后台运行centos:7的容器
while true;do echo hello; done:代表给予一个死循环

停止容器:
docker stop 容器ID				##停止容器
状态码137:表示主动退出停止容器

2.6 镜像操作

搜索镜像:
docker search 镜像名字(nginx tomcat 等等)

拉取镜像,从私有仓库或共有仓库将镜像下载至本地,可以看到一个镜像由多个小镜像组成
例如:docker pull nginx

查看镜像:
docker images

使用 inspect 命令查看镜像详细信息,包括制作者、适应架构、各层的数字摘要等,后面可以跟镜像名也可以跟ID
例如:docker inspect tomcat :latest

添加标签:
docker tag 原来镜像名字 新建的镜像名字(别名)

启动镜像:
docker start 容器id
docker start 容器的名字

删除镜像:
docker rmi 镜像名字
或者是强制删除  则是docker rm -f 镜像名字
这里要注意的是如果要删除的话,这边仓库的指向是同一个image     id 是一样的
如果你删除其中一个  显示并没有删除  
这里做的只是一个去标签的工作


镜像的导入、导出:
导出:
docker export 容器ID >文件名
示例:
docker export b054125b9481 > hell02		##导出hello-world到文件hello2内

导入:
①:docker import 导出的文件名(容器) 指定镜像名称(打上标签)
示例:
docker import hello2 hello-world:latest
②:cat 文件名(容器) | docker import - hello-world:latest
示例:
cat centos_02 | docker import - centos:7

3. 数据卷

数据卷:实现宿主机与容器之间的数据共享
数据卷容器:实现容器与容器之间的数据共享

数据卷:

创建数据卷
docker run -d -v /data1 -v /data2 --name web httpd:centos
挂载主机目录作为数据卷
docker run -d -v /var/www:/data1 --name web-1 httpd:centos

数据卷容器:
①:数据卷容器
docker run --name web11 -v /data1 -v /data2 -it centos /bin/bash 	##创建data1卷、data2卷
②:新容器挂载数据卷容器web100
docker run -it --volumes-from web11 --name qq centos /bin/bash	 ##允许一个容器,指定卷来源于web11,新的容器名字qq


容器互联(使用centos镜像):

docker run -itd -P --name webb centos /bin/bash 		##创建并运行容器取名web1,端口号自动映射
docker run -itd -P --name web2 --link webb:webb centos /bin/bash	##创建并运行容器取名web2,链接到web1和其通信
	--link:打通隧道
yum -y install net-tools	##各自下载ifconfig的工具
验证:
进web2容器 ping webb

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值