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入门:概念 镜像 容器 仓库 数据管理的主要内容,如果未能解决你的问题,请参考以下文章

Docker学习入门

Docker安装快速入门

3.Docker技术入门与实战 --- 使用Docker镜像

Docker 镜像容器仓库三大基本概念

Docker入门案例

Docker 入门