目录
一、云计算三层架构
(1)SAAS应用及服务
devops CI/CD 持续交付/持续集成 极速迭代产品
(2)PAAS平台及服务
提供环境(数据库 docker kubernetes)
(3)IAAS基础设施及服务
提供硬件(服务器、网络设备、防火墙)虚拟化
二、Docker容器与虚拟机对比
参数/名称 | 虚拟机 | 容器 |
---|---|---|
容量 | 大 | 小 |
系统 | 逻辑隔离 | 依赖于内核(共享) |
安全 | 强 | 弱 |
启动时间 | 慢 | 快 |
三、Docker容器
(1)使用场景
- 打包应用程序简化部署
- 克托利底层硬件任意迁移
(2)核心概念
镜像:一个面向Docker容器引擎的只读模板
容器:从镜像创建的运行实例
仓库:集中保存镜像的地方
(3)AUFS 联合文件系统
一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加
同时可以将不同目录挂载到同一个虚拟文件系统下。
联合文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
(4)小知识
docker文件夹在/etc下docker文件 如果没有先开启docker服务
镜像有别名的情况下是无法直接通过ID删除镜像
四、安装及优化
此次安装docker分为三个阶段
- 环境安装
- 镜像加速
- 网络优化
(1)环境安装
关闭防火墙策略
systemctl stop firewalld.service
systemctl disable firewalld.serice
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
安装环境及软件
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce
'需要花费一些时间'
systemctl start docker
systemctl enable docker
(2)镜像加速
因为下载镜像的速度较慢,需要使用下阿里的加速器
(3)网络优化
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
service network restart
systemctl restart docker
五、常用语句
(1)镜像操作
'查看docker版本信息'
docker version
'搜索镜像'
docker search 关键字
docker search 关键字 --filter=筛选条件
'获取镜像(下载)'
docker pull 仓库名称[:标签]
'查看镜像'
docker images 仓库名称[:标签]
'删除镜像'
docker rmi 镜像名
'导出镜像文件'
docker save -o /路径/文件名 镜像名称
'载入镜像'
方法一:docker load < 文件名
方法二:docker --input 文件名
'修改标签'
docker tag 文件名:旧标签名 文件名:新标签名
(2)容器操作
'启动容器'
docker start 镜像ID
'终止容器运行(强制性,非正常退出,STATUS为非零值)'
docker stop 镜像ID
'有则启动,无则下载'
docker run -d 镜像名 /bin/bash -c "命令"
'持续在后台运行'
docker run -d 镜像名 /bin/bash -c "while true;do echo hello;done"
-d:守护进程
-c:使用指令
'查询全部容器'
docker ps -a
'查询运行的容器'
docker ps
'删除容器'
docker rm 容器ID
'批量删除容器(运行中无法删除)'
docker ps -a | awk'{print"docker rm"$1}' | bash
'创建容器'
docker create -it 镜像名 分配终端(/bin/bash)
-i:标准输入
-t:分配一个伪终端
'查看所有容器'
docker ps -a
'开启容器'
docker start 镜像ID
'进入容器(运行状态)'
docker exec -it 镜像ID /bin/bash
'容器导出'
docker export 容器ID > /路径/文件名
'容器导入(导入之后只会变成镜像)'
cat /路径/文件名 | docker import - 文件名
'如果需要开启容器'
docker run -it 镜像名称 /bin/bash
(3)私有仓库搭建
私有镜像仓库则是指部署在公司或组织内部,用于自身应用Docker镜像存储、分发的镜像仓库
vim /etc/docker/daemon.json
"insecure-registries":["IP地址:5000"],
systemctl restart docker
docker create -it registry /bin/bash
docker start 'registry的容器ID'
docker run -d -p 外端口:内端口 -v 宿主机空间:容器内部挂载点 registry
-p:指定端口
-v:挂载空间使用
'例:docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry'
'打标签'
docker tag 镜像名:标签 仓库IP地址:5000/名称
'例:docker tag nginx:latest 192.168.90.20:5000/nginx'
'上传'
docker push
'例:docker push 192.168.90.20:5000/nginx'
获取私有仓库列表
curl -XGET http://IP地址:5000/v2/_catalog
私有仓库下载
docker pull IP地址:5000/镜像名称
'例:docker pull 192.168.90.20:5000/nginx'
(4)数据卷
宿主跟容器对接
卷就是将宿主机中的某个目录,mount到容器中
这样,在容器中此目录下的修改,即便容器关闭,数据也会保留下来,供宿主机和其他容器访问。
'创建数据卷'
docker run -v 宿主机目录:容器内部目录 --name 数据卷名 -it 镜像名 /bin/bash
'例:docker run -v /var/www:/data1 --name web1 -it centos /bin/bash'
在容器内/data1目录创建文件可以查看到,宿主目录/var/www里同样也有
(5)数据卷容器
容器跟容器对接
如果用户需要在容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器,数据卷容器其实是一个普通的容器,专门用来提供数据卷供其它容器挂载。
'创建数据卷容器'
docker run --name 数据卷容器名 -v 挂载目录1 -v 挂载目录2 -it 镜像名 /bin/bash
'例:docker run --name web_rq -v /rq1 -v /rq2 -it centos /bin/bash'
'新容器挂载数据卷容器'
docker run -it --volumes-from 数据卷容器名 --name 新容器名 镜像名 /bin/bash
'例:docker run -it --volumes-from web_rq --name xin_rq centos /bin/bash'
(6)端口映射
docker run -d -P 随机端口映射
docker run -d -p 指定端口映射
'例:docker run -d -P httpd:centos'
(7)容器互联
docker run -itd -P --name 容器名 镜像名 /bin/bash
'创建并运行容器取名XX,端口号自动映射'
docker run -itd -P --name web22 --link web11 镜像名 /bin/bash
--link name:alias
'--link 容器名:别名'
六、总结
(1)镜像 :
上传push 、下载pull 、打标签tag 、删除rmi 、导出save 、导入load
(2)容器 :
创建create、 进入exec 、运行run 、删除rm 、导出export 、导入import
数据卷-v 、数据卷容器--vloumes-from 、链接容器--link 、暴露端口 随机-P 指定-p
(3)仓库 :
下载registry镜像-->运行容器暴露端口5000-->修改daemon.json文件-->重启docker-->打标签(IP:端口/名称)-->上传/下载