设为首页 收藏本站
查看: 1378|回复: 0

[经验分享] docker容器初探—基本概念和基础命令用法

[复制链接]

尚未签到

发表于 2019-2-20 11:32:02 | 显示全部楼层 |阅读模式
                      docker容器初探—基本概念和基础命令用法

  -------------------------------------------------------------------------------------------------------------------------------------------

  
  一、基本概念
  1、LXC:Linux Container,针对于Linux内核容器功能的用户空间接口,docker刚问世时基于LXC之上,后期发展摒弃了LXC,lxc -> libcontainer -> runC
  2、docker:也是基于c/s架构
  容器基于镜像启动,如果本地没有,docker会去ftp仓库拉取镜像到本地
  基于自己开发的libcontainer
  3、Cgroups和namespace是docker的核心技术
(1)docker的kernel namespace(内核名称空间)六个重要元素:ipc uts mount pid network user

(2)Cgroups:control groups
blkio:块设备IO
cpu CPU
cpuacct CPU资源使用报告
cpuset 多处理器平台上的CPU集合
devices 设备访问
freezer 挂起或恢复任务
memory 内存用量及报告
perf_event 对cgroup中的任务进行统一性能测试
net_cls cgroup中的任务创建的数据报文的类别标识符
  OCI:Open Container Initiative,旨在围绕容器格式和运行时制定一个开放的工业化标准
  4、镜像是分层构建的
  docker image的使用

  联合挂载:上3层都可以看到底层的/var/log,假设当第二层执行rm /tmp/a.txt后,上3层看不到/tmp/a.txt,但底层的/tmp/a.txt依然在。最上一层为可写层(其它层只读),平时修改操作都在可写层进行,所以修改完成后底层镜像没有变动,变动的只是可写层
  5、docker怎样运行的

  aufs:advanced multi-layered unification filesystem:高级多层统一文件系统,用于为Linux文件系统实现联合挂载
  overlayfs:aufs的竞争产品,自从3.18版本被合并到Linux内核,也就是说CentOS7内核版本3.10未打补丁是不支持的,用的还是devicemapper,虽说redhat给内核打了补丁,不过支持度肯定还是远不如Ubuntu默认的aufs
  6、特点:
(1)基于一个镜像,可以启动多个容器,供多个容器之间共享使用
(2)正常情况下一个docker容器只允许运行一个进程和其子进程,否则容器还需要一个进程管理器
  7、docker的对象
image、contain、networksvolumes、plugins、other object
  8、docker的registry仓库可分为:其中的镜像名的引用类似于httpd:v2.4.32,引用2.4.32版本的httpd
Docker Hub
gcr.io
quay.io
dev.aliyun.com
个人建立高可用仓库

  registry分类
  sponsor registry
  mirror registry
  vendor registry
  private registry
  二、docker的安装
  1、docker的社区版:moby,也称作docker-ce
  阿里云镜像站的docker-ce下,建议使用较新版本,k8s只支持到docker的17.03版

  下载docker-ce.repo文件到yum源文件,yum -y install docker-ce

  将此文件移动到/etc/yum.repos.d/目录下
  yum -y install docker-ce
  注意:安装过程中出现以下界面,请填写一个epel源,之后重装container-selinux

  复制以下代码到/etc/yum.repos.d/目录下新建的repo文件
  [base]
  name=CentOS-$releasever - Base - mirrors.aliyun.com
  failovermethod=priority
  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/
  gpgcheck=1
  gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
  [updates]
  name=CentOS-$releasever - Updates - mirrors.aliyun.com
  failovermethod=priority
  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/
  gpgcheck=1
  gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
  [extras]
  name=CentOS-$releasever - Extras - mirrors.aliyun.com
  failovermethod=priority
  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/
  gpgcheck=1
  gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
  
  [centosplus]
  name=CentOS-$releasever - Plus - mirrors.aliyun.com
  failovermethod=priority
  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/
  gpgcheck=1
  enabled=0
  gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
  [contrib]
  name=CentOS-$releasever - Contrib - mirrors.aliyun.com
  failovermethod=priority
  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/
  gpgcheck=1
  enabled=0
  gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
  2、安装成功后,需要修改几个地方
(1)编辑/usr/lib/systemd/system/docker.service

(2)设置加速连接
登录阿里云账号,之后转入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官方镜像网站
  https://hub.docker.com

  四、docker基础命令
  1、docker search :搜索镜像

  2、docker image pull alpine:从仓库向本地拖镜像,不用标签默认用最新版alpine
  alpine有版本:

  安装效果

  3、docker image ls:查看镜像信息
docker imager ls -a

  4、docker image inspect alpine:显示镜像详细信息

  5、docker image rm alpine:3.8,删除alpine3.8镜像

  6、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标签只能有一个镜像
  7、docker container run --name alpine1 -it alpine:3.8
新建一个容器,名字叫alpine1,并启动打开其交互界面

  docker container run --name alpine1 alpine:3.8 -d
启动一个容器,名字叫alpine1,以守护进程方式后台运行

  另起一个终端

  注:这里httpd可以后台运行是因为镜像里CMD中有个httpd-foreground前台运行,所以此时-d剥离后依然存在,而alpine镜像由于没有前台运行的指令,所以此法创建出后是退出状态

  docker container run --name alpine1 -it alpine:3.8 --rm alpine
启动一个容器,名字叫alpine1,打开其交互界面,停止后删除该容器
  启动状态时存在httpd2

  停止后

  8、docker container ls,查看docker容器状态信息
docker container ls -a

  9、docker container start httpd1,启动一个关闭的容器
  显示前有container状态

  启动docker container start httpd1

  docker container start -i doc7
  启动doc7容器并进入交互界面

  10、docker container attach doc7,其他终端使用该命令关联一个容器的终端,前台运行光标闪烁

ctrl+p后ctrl+q,剥离容器的终端

  11、docker ps:doc列出后台运行的容器
docker ps -a

  12、docker logs:用来获取和显示docker控制台的日志

  13、docker container exec,非交互式突破容器外壳进入容器内部执行命令
docker exec alpine1 ifconfig

  docker exec web1 -it /bin/bash, 交互式突破容器外壳进入容器内部执行命令
  14、docker top web1,对web1的容器查看内部运行状态

  15、docker container stats,获取当前所有容器cpu、内存、网络io、磁盘io的消耗

  16、docker container pause,暂停容器
docker container unpause ,继续运行暂停的容器

  docker rm web1,删除web1容器

  四、docker状态转换结构图

  docker kill类似于virsh中的destroy,一般情况不建议使用,除非docker在使用中遇到了错误
  OOM:out of memory,非计划内终止,容器所在的宿主机内存资源耗尽,此时系统会自动杀死占用内存最大的由docker内的服务进程,此时需要定制策略,看此服务进程是重启还是进入stopped状态
  五、制作docker镜像
  因为docker的镜像采用是联合挂载,因此对镜像的修改制作,实质上是对镜像最上层可写层进行写操作保存,对底层镜像并没有修改
  1、下载原镜像
  docker image pull busybox
  docker container run --name b1 -it busybox

  2、进行修改,比如安装包之类

  docker commit,用于该容器可写层写的数据保存为一个镜像层
  docker commit doc7,保doc7这个容器可写层

  3、新的镜像没有名字和标签,所以需要添加
  docker image tag IMAGEID mycentos:7

  4、如果有需求,还可以继续使用docker commit -c 命令修改需要镜像的指令的内部
  docker commit -a "chenux" -c 'CMD ["/usr/sbin/httpd","-DFOREGROUND"]' -p centos-base1 centos-httpd:v0.2-2.4
-a,添加作者
-c,修改CMD中指令
-p,修改过程中容器暂停
  修改centos-base1镜像,添加作者信息chenux,由CMD中的/bin/bash命令改为了/usr/sbin/httpd,-DFOREGROUND,创建过程中暂停容器,新镜像名字叫centos-httpd:v0.2-2.4
  镜像信息中containerconfig中的CMD
  示例

  修改结果

  六、使用registry推送镜像
  1、阿里云创建镜像仓库

  2、建立仓库信息

  3、选择本地仓库

  4、创建好后点击管理

  5、推送时镜像标签需要和服务器保持一致,阿里云提示的操作指南会有

(1)登录仓库

(2)添加标签

(3)推送

  完成后

  仓库也有了

  推送完成后,docker logout
  七、分发镜像
  docker image save IMAGE-ID -o /DIR/*.tar

  scp
  docker image load -i /DIR/*.tar

  测试结果





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-674842-1-1.html 上篇帖子: docker安全 下篇帖子: Docker(三十一)k8s cronjob 计划任务使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表