目录
①镜像(image):一个面向docker容器引擎的只读模板
一、云计算的三种服务
1.LaaS(基础设施即服务)
Infrastructure-as-a-Service (基础设施即服务),有时候也叫做 Hardware-as-a-Service,以前如果想在办公室或者公司的网站上运行一些企业应用,需要去买服务器,或者别的高昂的硬件来控制本地应用,让企业业务运行起来。
但是现在有 laaS,企业可以将硬件外包到别的地方去。laaS.公司会提供场外服务器,存储和网络硬件,可供租用。节省了维护成本和办公场地,公司可以在任何时候利用这些硬件来运 行其应用。
2.PaaS(平台即服务,中间件都准备好了)
PaaS: Platform-as-a-Service (平台即服务),某些时候也叫作中间件。公司所有的开发都可以在这层进行,节省了时间和资源。
PaaS 公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统。这节省了你在便件上的费用,也让分散的工作室之间的合作变得更加容易。网页应用管理,应用设计,应用虚拟士机,存储,安全以及应用开发协作工具等。
3.SaaS(软件即服务)
SaaS 层是和日常生活接触的一层,大多是通过网页浏览器来接入。任何一个远程服务器上的应用都可以通过网络来运行,就是 SaaS了。
你消费的服务完全是从网页如 Netfix,MOG,GoogleApps,Dropbox 或者苹果的iCloud 那里进入这些分类。尽管这些网页服务是用作商务和娱乐或者两者都有,但这也算是云技术的一部分。国内的下秒数据 Nexadata 可以快速接入新数据(尤其 SaaS 系统),准确沉淀明细数据,形成准确主数据,业务变化能快速修改。
二、Docker的基本管理
1.Docker的介绍及概念
① Docker是什么?
a.是一种轻量级的“虚拟机“
b.在linux容器里运行应用的开源工具
c.Docker 的Logo设计为蓝色鲸鱼,拖着许多集装箱,鲸鱼可以看作为宿主机,集装箱
可以理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。
Docker从一开始就以提供标准化的运行时环境为目标,也真正做到"Build,Ship and Run any APP,Angwhere",可以将同一个构建版本用于开发、测试、预发布、生产等 任何环境,并且做到了与底层操作系统的解耦。在此基础上还进一步发展出了Caas
(容器即服务)技术。
②Docker容器与虚拟机的区别
选项 | 虚拟机 | docker容器 |
启动时间 | 慢 | 快速(毫秒级别的启动) |
容量 | 大 | 小 |
系统 | 逻辑隔离 | 依赖于内核 |
安全性 | 强 | 弱 |
③Docker的使用场景
打包应用程序简化部署
可脱离底层硬件任意迁移(例如:服务器从腾讯云迁移到阿里云)
三、Docker的核心概念以及安装方式
1.docker核心概念
①镜像(image):一个面向docker容器引擎的只读模板
包含了各种环境和服务(tomcat、mysql、redis等)相当于一个模板
镜像是运行容器的基础,包含运行程序所需的全部内容
②容器(container):从镜像创建的运行实例
对象容器是镜像运行起来(run)之后的实例,可以把容器看成一个简易的Linux环境容器
③仓库(repository):集中保存镜像的地方
仓库是存放镜像的场所,最大的公开仓库是Docker Hub 私有仓库harbor
补充:CentOS安装Docker的两种方式
a.使用CURL获得Docker的安装脚本进行安装
b.使用YUM仓库来安装Docker
2.容器的优点
灵活:即使是在复杂的应用也可以集装箱化
轻量级:容器利用并共享主机内核。
可互换:可恶意即时部署更新和升级
便携式:可以在本地构建,部署到云,并在任何地方运行
可扩展:可以增加并自动分发容器副本
可堆叠:可以垂直和即时堆叠服务
四、安装部署Docker容器
1.首先关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
2.安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
3.设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.安装Docker-CE (开机自启)
yum install -y docker-ce
systemctl start docker
systemctl enable docker
5.查看 docker 版本信息
docker version
五、Docker容器 镜像操作
1.搜索镜像
格式:docker search 关键字
2.获取镜像
格式:docker pull 仓库名称[:标签]
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
3.镜像加速
浏览器访问 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 获取镜像加速器配置
(阿里容器镜像加速)
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://1fam3t0i.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
做了这一步之后,下载镜像就不会出现卡死状态,反而速度直接起飞 !呼~呼~呼~
4.Docker镜像基本命令
①镜像日志文件位置
镜像下载后日志存放在 /var/lib/docker
②查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
③查看下载到本地的所有镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ae2feff98a0c 9 days ago 133MB
--------------------------------------------------------------------------------------------
REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;
---------------------------------------------------------------------------------------
④根据镜像的唯一标识 ID 号,获取镜像详细信息
格式:docker inspect 镜像ID号
⑤为本地的镜像添加新的标签
格式:docker tag 名称:[标签] 新名称:[新标签]
⑥删除镜像
格式:
docker rmi 仓库名称:标签 #当一个镜像有多个标签时,只是删除其中指定的标签
或者
docker rmi 镜像ID号 #会彻底删除该镜像
注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。
⑦存出镜像:将镜像保存成为本地文件
格式:docker save -o 存储文件名 存储的镜像
⑧载入镜像:将镜像文件导入到镜像库中
格式:
docker load < 存出的文件
或者
docker load -i 存出的文件
⑨上传镜像
默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。
docker tag #添加新的标签
docker login #登录公共仓库
Username: #用户
password: #密码
docker push #上传镜像
5. 网络优化
vim /etc/sysctl.conf
#添加 net.ipv4.ip_forward=1sysctl -p
service network restart
systemctl restart docker
六、Docker 容器操作
1.创建容器
新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器
docker create命令能够基于镜像创建容器。(就是将镜像加载到容器的过程)
该命令执行的效果类似于docker run -d,即创建一个将在系统后台运行的容器。
但是与docker run -d不同的是,docker create创建的容器并未实际启动,还需要执行docker start命令或docker run命令以启动容器。
事实上,docker create命令常用于在启动容器之前进行必要的设置。
格式:docker create [选项] 镜像
常用选项:
-i:让容器的输入保持打开
-t:让 Docker 分配一个伪终端
注释:
-it就等于-i和-t,这两个参数的作用是,为该docker创建一个伪终端,这样就可以进入到容器的交互模式(也就是直接进入到容器里面)
后面的/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这个/bin/bash就表示启动容器后启动bash
2.查看容器的运行状态
docker ps ## 查看运行中的容器
docker ps -a 查看全部容器-a 列出所有的容器,包括未运行的容器
3.启动容器
可以直接执行 docker run 命令, 等同于先执行 docker create 命令,再执行 docker start 命令。
注意:容器是一个与其中运行的 shell 命令共存亡的终端,命令运行容器运行, 命令结束容器退出。
当利用 docker run 来创建容器时, Docker 在后台的标准运行过程是:
(1)检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;
(2)利用镜像创建并启动一个容器;
(3)分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;
(4)从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;
(5)分配一个地址池中的 IP 地址给容器;
(6)执行用户指定的应用程序,执行完毕后容器被终止运行。
docker run centos:7 /usr/bin/bash -c ls /
docker ps -a #会发现创建了一个新容器并启动执行一条 shell 命令,之后就停止了
run命令
从没有镜像到生成一个运行的容器总结为三个步骤
1、下载镜像
2、创建容器
3、启动容器
但是在生产环境中是怎么方便怎么来
run命令会将他三合一
所以我用较多的是 run
docker run -d nginx /bin/bash
-d 是daemon 开启守护进程,这里不加-d是开启不了容器的
#简单操作
docker run 镜像标识|镜像名称[:tag]
#常用参数
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像标识|镜像名称[:tag]
选项:
-d:后台运行容器
-p:宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口
--name 容器名称:指定容器的名称
--it 使用交互方式运行,进入容器查看内容
-P:指定容器端口
-p:随机指定端口例:docker run --name mynginx -p 80:80 nginx #操作台运行
docker run -di --name mynginx -p 80:80 nginx #后台运行
4.运行启动容器
#简单操作
docker run 镜像标识|镜像名称[:tag]
#常用参数
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像标识|镜像名称[:tag]
选项:
-d:后台运行容器
-p:宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口
--name 容器名称:指定容器的名称
--it 使用交互方式运行,进入容器查看内容
-P:指定容器端口
-p:随机指定端口例:docker run --name mynginx -p 80:80 nginx #操作台运行
docker run -di --name mynginx -p 80:80 nginx #后台运行
5.查看正在运行的容器
docker ps
选项:
-f:过滤
-a:查看全部的容器,包括没有运行的
-q:只查看容器的标识
-n=?:显示最近创建的容器
-l:查看最后创建的容器例:docker ps -f status=exited #过滤已经存在但停止的容器
docker ps -n 5 #列出最近创建的n个容器
6.进入到容器内部
docker exec -it 容器id/容器名称 /bin/bash
docker attach 容器id区别:
docker exec:进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach:进入容器正在执行的终端,不会启动新的进程
7.删除容器(删除容器前,需要先停止容器)
docker stop 容器id #停止指定的容器
docker stop $(docker ps -qa) #停止全部容器docker rm 容器名/容器id #删除指定的容器,删除前该容器需要停止
docker rm $(docker ps -qa) #删除状态不是up外的所有容器
docker ps -a | awk '{print "docker rm "$1}'|bash #删除状态不是up外的所有容器
8.启动容器
docker start 容器id/容器名称
9.退出容器
exit #直接容器停止并退出
Ctrl+P+Q #容器不停止退出
10.容器导入导出
#导出格式:docker export 容器ID/名称 > 文件名
docker export 2592d3fad0fb > centos7.tar
#导入格式:cat 文件名 | docker import – 镜像名称:标签
cat centos7.tar | docker import - centos7:test #导入后会生成镜像,但不会创建容器