docker容器
1:什么是容器?
容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的文件系统,ip地址,主机名等
2:容器和虚拟化的区别
linux容器技术,容器虚拟化和kvm虚拟化的区别
kvm虚拟化: 需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)
linux开机启动流程 --bios开机硬件自检 --bios设置的优先启动项 --读取mbr引导 -- 加载内核 --启动第一个进程
kvm解决了硬件和操作系统之间的依赖
kvm独立的虚拟磁盘,xml配置文件
容器虚拟化:不需要硬件的支持。不需要模拟硬件,共用宿主机的内核,启动时间秒级(没有开机启动流程)
docker解决了软件和操作系统环境之间的依赖,能够让独立服务或应用程序在不同的环境中,得到相同的运行结果。
docker镜像有自己的文件系统。
docker容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。
总结:
(1)与宿主机使用同一个内核,性能损耗小;
(2)不需要指令级模拟;
(3)容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;
(4)避免了准虚拟化和系统调用替换中的复杂性;
(5)轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。
3 :docker容器
Docker是通过内核虚拟化技术(namespaces及cgroups cpu、内存、磁盘io等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。
容器本身是一个进程,占用资源过多的情况下,系统内存不足,可能会引起 oom == out of memory 机制。被kill-9杀掉,因此稳定性不如虚拟机好。也正是因此,才诞生了容易编排工具(最出名的k8s,保证容器高可用。)
docker的主要目标是"Build,Ship and Run any App,Angwhere",构建,运输,处处运行(号称一次构建,到处运行)
docker是一种软件的打包技术
(构建,运输,处处运行)解释:
构建:做一个docker镜像
运输:docker pull
运行:启动一个容器
每一个容器,他都有自己的文件系统rootfs.
4:docker的安装
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
改成国内下载源:
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
安装docker:
yum install docker-ce -y (docker社区版(ce),企业版要钱哦)
5:docker的主要组成部分
docker是传统的CS架构分为docker client和docker server,和mysql一样
命令:docker version
[root@controller ~]# systemctl start docker (启动,加入开机自启enable)
[root@controller ~]# docker version
Client: Docker Engine - Community
Version: 19.03.2
API version: 1.40
Go version: go1.12.8
Git commit: 6a30dfc
Built: Thu Aug 29 05:28:55 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.2
API version: 1.40 (minimum version 1.12)
Go version: go1.12.8
Git commit: 6a30dfc
Built: Thu Aug 29 05:27:34 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.6
GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc:
Version: 1.0.0-rc8
GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
docker-init:
Version: 0.18.0
GitCommit: fec3683
docker info(如果要做zabbix监控)
docker主要组件有:镜像、容器、仓库
启动容器必须需要一个镜像,仓库中只存储镜像
容器---镜像---仓库
6:启动第一个容器(docker 运行nginx)
##配置docker镜像加速(还有一种方法是修改docker的启动文件)
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://aeckruos.mirror.aliyuncs.com"]
}
重启:
[root@controller ~]# systemctl restart docker
运行nginx镜像:
[root@controller ~]# docker run -d -p 80:80 nginx
run(创建并运行一个容器)
-d 放在后台
-p 宿主机端口映射到容器端口
nginx docker镜像的名字
[root@controller ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6127/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 6206/master
tcp6 0 0 :::80 :::* LISTEN 7653/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 6127/sshd
tcp6 0 0 ::1:25 :::* LISTEN 6206/master
访问nginx:
[root@controller ~]# curl -I 192.168.6.129 或者网页访问:宿主机IP:192.168.6.129
HTTP/1.1 200 OK
Server: nginx/1.17.4
...
7:docker的镜像管理
查看已有镜像:
docker image ls
docker images
搜索镜像
docker search centos
NAME DESCRIPTION (描述) STARS(点赞次数) OFFICIAL(是否官方镜像) AUTOMATED(自动构建)
centos The official build of CentOS. 5616 [OK]
ansible/centos7-ansible Ansible on Centos7 124 [OK]
选镜像的建议:
1,优先考虑官方
2,starts数量多
获取镜像
docker pull(push)(实际内部是使用的这个命令: docker image pull)
镜像加速器:阿里云加速器,daocloud加速器,中科大加速器,Docker 中国官方镜像加速:https://registry.docker-cn.com
docker pull alpine (指定版本alpine:3.8 没有指定版本,默认会下载最新版)
docker pull index.tenxcloud.com/tenxcloud/httpd:latest(下载私有仓库镜像,域名/用户名或者项目名/容器的镜像名称+版本)
查看镜像
docker images
删除镜像
docker rmi 例子:docker image rm centos:latest
导出镜像
docker save 例子:docker image save centos > docker-centos7.4.tar.gz
导入镜像
docker load 例子:docker image load -i docker-centos7.4.tar.gz
查看镜像属性
docker inspect 例子:docker image inspect load -i docker-centos7.4.tar.gz
上传镜像
docker push 例子:docker image push xxx 后面再讲这个命令怎么用
tag打标签
docker tag 例子:docker image tag xxx 后面再讲这个命令怎么用,结合push