docker容器初探—基本概念和基础命令用法
linux
-------------------------------------------------------------------------------------------------------------------------------------------
web
一、LXC:Linux Container,针对于Linux内核容器功能的用户空间接口,docker刚问世时基于LXC之上,后期发展摒弃了LXC,lxc -> libcontainer -> runCvim
容器基于镜像启动,若是本地没有,docker会去ftp仓库拉取镜像到本地bash
三、Cgroups和namespace是docker的核心技术网络
(1)docker的kernel namespace(内核名称空间)六个重要元素:ipc uts mount pid network user架构
perf_event 对cgroup中的任务进行统一性能测试
net_cls cgroup中的任务建立的数据报文的类别标识符
OCI:Open Container Initiative,旨在围绕容器格式和运行时制定一个开放的工业化标准
联合挂载:上3层均可以看到底层的/var/log,假设当第二层执行rm /tmp/a.txt后,上3层看不到/tmp/a.txt,但底层的/tmp/a.txt依然在。最上一层为可写层(其它层只读),平时修改操做都在可写层进行,因此修改完成后底层镜像没有变更,变更的只是可写层
aufs:advanced multi-layered unification filesystem:高级多层统一文件系统,用于为Linux文件系统实现联合挂载
overlayfs:aufs的竞争产品,自从3.18版本被合并到Linux内核,也就是说CentOS7内核版本3.10未打补丁是不支持的,用的仍是devicemapper,虽然说redhat给内核打了补丁,不过支持度确定仍是远不如Ubuntu默认的aufs
(1)基于一个镜像,能够启动多个容器,供多个容器之间共享使用
(2)正常状况下一个docker容器只容许运行一个进程和其子进程,不然容器还须要一个进程管理器
image、contain、networks、volumes、plugins、other object
八、docker的registry仓库可分为:其中的镜像名的引用相似于httpd:v2.4.32,引用2.4.32版本的httpd
一、docker的社区版:moby,也称做docker-ce
阿里云镜像站的docker-ce下,建议使用较新版本,k8s只支持到docker的17.03版
下载docker-ce.repo文件到yum源文件,yum -y install docker-ce
注意:安装过程当中出现如下界面,请填写一个epel源,以后重装container-selinux
复制如下代码到/etc/yum.repos.d/目录下新建的repo文件
name=CentOS-$releasever - Base - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
name=CentOS-$releasever - Updates - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
name=CentOS-$releasever - Extras - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
name=CentOS-$releasever - Plus - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
(1)编辑/usr/lib/systemd/system/docker.service
登陆阿里云帐号,以后转入cr.console.aliyun.com,开通,界面以下
(3)开启docker须要/proc/sysnet/brige/bridge-nf-call-iptables和/proc/sysnet/brige/bridge-nf-call-ip6tables为1,常保存须要vim /etc/sysctl.d/docker.conf,写入net.bridge.bridge-nf-call-iptables = 1和
net.bridge.bridge-nf-call-ip6tables = 1
完成后systemctl daemon-reload;systemctl restart docker
二、docker image pull alpine:从仓库向本地拖镜像,不用标签默认用最新版alpine
四、docker image inspect alpine:显示镜像详细信息
五、docker image rm alpine:3.8,删除alpine3.8镜像
六、docker image tag httpd:2.4.37-alpine httpd:2.4,给标签为2.4.37-alpine的httpd镜像增长标签httpd:2.4
docker image tag httpd:2.4.37-alpine chenux/httpd:2.4
docker image tag httpd:2.4.37-alpine reg.chenux.com:8443/chenux/httpd:2.4,只有这么打上主机标签才会认为是本身的docker库,不然系统会认为是官方的docker库
添加镜像tag,docker image tag httpd:2.4.37-alpine httpd:2.4,docker image tag busybox:1.29 chenux/busybox:2.4
docker image tag httpd:2.4.37-alpine reg.chenux.com:8443/chenux/httpd:2.4
注:一个镜像能够有多个tag标签,但一个tag标签只能有一个镜像
七、docker container run --name alpine1 -it alpine:3.8
docker container run --name alpine1 alpine:3.8 -d
注:这里httpd能够后台运行是由于镜像里CMD中有个httpd-foreground前台运行,因此此时-d剥离后依然存在,而alpine镜像因为没有前台运行的指令,因此此法建立出后是退出状态
docker container run --name alpine1 -it alpine:3.8 --rm alpine
启动一个容器,名字叫alpine1,打开其交互界面,中止后删除该容器
八、docker container ls,查看docker容器状态信息
九、docker container start httpd1,启动一个关闭的容器
启动docker container start httpd1
docker container start -i doc7
十、docker container attach doc7,其余终端使用该命令关联一个容器的终端,前台运行光标闪烁
十二、docker logs:用来获取和显示docker控制台的日志
1三、docker container exec,非交互式突破容器外壳进入容器内部执行命令
docker exec web1 -it /bin/bash, 交互式突破容器外壳进入容器内部执行命令
1四、docker top web1,对web1的容器查看内部运行状态
1五、docker container stats,获取当前全部容器cpu、内存、网络io、磁盘io的消耗
1六、docker container pause,暂停容器
docker container unpause ,继续运行暂停的容器
docker kill相似于virsh中的destroy,通常状况不建议使用,除非docker在使用中遇到了错误
OOM:out of memory,非计划内终止,容器所在的宿主机内存资源耗尽,此时系统会自动杀死占用内存最大的由docker内的服务进程,此时须要定制策略,看此服务进程是重启仍是进入stopped状态
由于docker的镜像采用是联合挂载,所以对镜像的修改制做,实质上是对镜像最上层可写层进行写操做保存,对底层镜像并无修改
docker container run --name b1 -it busybox
docker commit,用于该容器可写层写的数据保存为一个镜像层
docker commit doc7,保doc7这个容器可写层
docker image tag IMAGEID mycentos:7
四、若是有需求,还能够继续使用docker commit -c 命令修改须要镜像的指令的内部
docker commit -a "chenux" -c 'CMD ["/usr/sbin/httpd","-DFOREGROUND"]' -p centos-base1 centos-httpd:v0.2-2.4
修改centos-base1镜像,添加做者信息chenux,由CMD中的/bin/bash命令改成了/usr/sbin/httpd,-DFOREGROUND,建立过程当中暂停容器,新镜像名字叫centos-httpd:v0.2-2.4
五、推送时镜像标签须要和服务器保持一致,阿里云提示的操做指南会有
(2)添加标签
docker image save IMAGE-ID -o /DIR/*.tar