Docker入门:概念 镜像 容器 仓库 数据管理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker入门:概念 镜像 容器 仓库 数据管理相关的知识,希望对你有一定的参考价值。
时间<<--->>时间戳:进行时间计算时,需要利用转换的时间戳实现
date +%Y%m%d -d @148569820<<--->>date +s% -d ‘2016-11-16 16:00:00‘ --- 小 Q
----------------------------------------------------------------------------------------------------
Docker 概 念
一个开源的应用容器引擎,让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
三个概念
1、镜像:一个只读的模板,类似于安装系统用到的iso文件镜像;
2、容器:如果镜像类似于操作系统,那容器就是虚拟机主本身,可被启动停止删除并互相隔离等;
3、仓库:存放镜像的一个仓库,最大的仓库hubhub.docker.com 国内最大dockerpool.com
安装
yum install -y epel-release #centos6
yum install -y docker-io
/etc/init.d/docker start
yum install -y docker #centos7
systemctl docker start
---------------------------------------------------------------------------------------------------
加速:https://cr.console.aliyun.com 注册,控制台左侧有加速按钮,找到自己的专属链接http:xxxxxxx
vim /etc/sysconfig/docker 添加 other_args="--registry-mirror=https:xxxxxxxx" 重启docker即可
---------------------------------------------------------------------------------------------------
镜 像 管 理
docker pull centos //下载镜像
docker images //查看本地拥有的镜像
docker tag centos teng123 //复制镜像,并命名为teng123
docker tag centos teng:teng //复制镜像,并改了image和tag
docker tag image_id name:tag //更改镜像名,image_id是镜像id
docker search image-name //在从仓库中搜索image-name
docker rmi centos //删除centos镜像,可以是centos:teng 指定tag镜像删除
docker run -itd centos --name=容器名 /bin/bash //通过centos镜像打开指定名字的容器 -d是后台
docker run -it container_id bash //进入容器,container_id即容器id,一般用下方式进入
docker exec -it container_id bash //进入容器,跟上不同的是,退出容器时,容器仍旧运行
docker start container_id //开启某个docker
docker ps -a //查看所有的容器
docker ps //查看正在运行的容器
docker run -it teng123 bash && yum install -y httpd //首先进入一个容器做一些更改
docker commit -m "change" -a "A" container_id tengxun //然后提交至新镜像,-a指定用户的名字
docker save -o teng.tar teng123(或image_id) //备份镜像成teng.tar文件
docker load < teng.tar 或docker load --input teng.tar //还原teng.tar镜像文件
docker push image_name //把自己的镜像上传到dockerhub,前提要有用户
容 器 管 理
docker create -it centos //创建容器但不启动
docker start container_id //启动容器
docker run -i -t -d centos /bin/bash //-i让容器标准输入打开-t分配伪终端-d后台运行
docker exec -it container_id bash //临时打开一个终端,exit退出后,容器不退出
docker attach container_id //进入一个后台运行的容器,但一旦退出,容器也就退出了
docker logs container_id //查看容器的运行历史信息
docker stop container_id //停掉一直输出的内容
docker rm container_id //删除某个容器
docker export container_id > file.tar //备份容器内容到file.tar
cat file.tar |docker import - teng_centos //还原备份内容到新的镜像
命令 | 说明 |
---|---|
import | .tar文件、容器.tar文件 容器还原镜像:cat file.tar |docker import - tengxun_test |
export | 容器导出 容器.tar文件 容器备份:docker export container_id > file.tar |
save | 镜像保存 镜像.tar文件 镜像备份:docker save -o tengxun-centos.tar tengxun/centos (container_id或id号) |
load | 镜像.tar恢复 原来的镜像 镜像还原:docker load < tengxun-centos.tar |
commit | 镜像--->新镜像 |
仓 库 管 理
docker pull registry
//registy为官方提供的镜像,我们可以用它来创建本地的docker私有仓库
docker run -d -p 5000:5000 registry
//以registry镜像启动容器监听5000端口 -p端口映射5000:5000=宿主机:docker容器
curl 127.0.0.1:5000
//可以访问它
实验:将镜像上传至私有仓库
1. docker tag teng_test 172.7.15.106:5000/centos //标记一下tag必须要带有私有仓库的ip:port
2. docker push 172.7.15.106:5000/centos //此时报错了类似如下
Error response from daemon: invalid registry endpoint https://172.7.15.106:5000/v0/: unable to ping registry endpoint https://172.7.15.106:5000/v0/
v2 ping attempt failed with error: Get https://172.7.15.106:5000/v2/: EOF
v1 ping attempt failed with error: Get https://172.7.15.106:5000/v1/_ping: EOF. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 172.7.15.106:5000` to the daemon‘s arguments. In the case of HTTPS, if you have access to the registry‘s CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/172.7.15.106:5000/ca.crt
因为docker从1.3之后和docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,so.......
解决:启动docker时怎么加启动参数使之默认http访问
vim /etc/sysconfig/docker
把 $exec -d $other_args 改为
$exec -d --insecure-registry 172.7.15.106:5000 $other_args
systemctl restart docker //重启docker
docker start registry_container_id //重启动registry容器
curl http://172.7.15.106:5000/v2/_catalog //查看私有仓库的镜像
数 据 管 理
1、挂载本地目录到容器
docker run -itd -v /data:/data teng bash //-v指定挂载,本地目录:容器目录,删除容器数据不会丢
测试:
docker run -itd -v /data/web/:/web teng bash
docker exec -it f621cf677
解决方式:退出容器,setenforce 0 #将selinux临时关闭,记得之后要开起来 setenforce 1
或者:chcon -Rt svirt_sandbox_file_t /home/docs #添加规则,将目录加为白名单
或者:docker run -it --privileged=true -v /test:/soft centos bash #--privileged以特权方式挂载
2、挂载数据卷
我们挂载目录时可以指定容器name,不指定就系统随机生成了;
docker run -itd --volumes-from jolly teng /bin/bash //启用,--volumes-from启用数据卷选项
docker run -itd -v /data/:/mnt/ --name jolly [teng] bash //挂载数据卷,自定义容器name
3、定义数据卷容器
有时我们需要多个容器之间共享数据,就可以搭建一个专门 数据卷容器(仅共享),供其他容器挂载
docker run -itd -v /data --name testvol teng bash //新建,data是容器目录,非本地data
docker run -itd --volumes-from --name=web1 testvol teng //新建其他容器并 挂载数据卷容器
4、数据卷的备份与恢复
原理:(三重保护)
其他容器/data/ 挂载----数据卷容器/data/ 挂载---宿主机的/data/
备份容器/data/ 挂载----数据卷的/data/---用cron将data目录打包,存放至/bak下
备份容器/bak/ 挂载----宿主机的/bak
docker run -itd -v /data/ --name testvol2 teng /bin/bash //新建数据卷容器
docker run -itd --volumes-from testvol2 teng /bin/bash //挂载数据卷容器,可多个
docker run -itd -v /data/:/data/ testvol2 /bin/bash //数据卷容器挂载至本地
docker run --volumes-from testvol2 -v /bak/:/bak/ teng tar cvf /bak/data.tar /data/
//新建容器,挂载到数据卷容器/bak目录,然后压缩/data/目录
docker run --volumes-from testvol2 -v /data/:/data teng tar xvf /bak/data.tar
//新建容器,挂载到数据卷容器/data目录,然后将压缩的data内容,解压至新容器
------------------------------------------------------------------------------------------------------
当然这篇博客只属于入门级的,深入研究请参考http://blog.opskumu.com/docker.html
本文出自 “北冰--Q” 博客,请务必保留此出处http://beibing.blog.51cto.com/10693373/1873650
以上是关于Docker入门:概念 镜像 容器 仓库 数据管理的主要内容,如果未能解决你的问题,请参考以下文章