您的位置:首页 > 运维架构 > Docker

docker

2016-06-28 19:07 369 查看
docker 容器虚拟化,2013年出现,Redhat在6.5版本开始支持docker(64位)使用go语言开发,基于Apache2.0协议,开源软件,项目代码在github维护docker启动快,资源利用率高,易迁移
镜像:只读模板.通过镜像完成各种应用的部署容器:类似于操作系统,相互隔离仓库:存放镜像的场所.最大公有仓库是Docker hub(hub.docker.com)国内最大公开仓库(dockerpool.com)docker安装
centos6.5及以上

yum install -y epel-release            //epel源
yum install -y docker-io             //安装docker
/etc/init.d/docker start              //启动docker
centos7
yum install -y docker
systemctl start docker               //启动docker
docker 镜像管理
docker pull centos                 //从docker.com获取docker镜像
docker images                    //查看本地docker镜像
docker tag centos fanfan             //把centos重命名并保存为fanfan
docker search name                //从仓库中搜索name镜像
docker run -i -t -d centos /bin/bash       //在容器中开启镜像
-i表示让容器的标准输入打开 -t表示分配一个伪终端 -d表示后台
docker ps                     //查看正在运行的容器 -a看所有
docker rmi name                 //删除镜像
docker commit -m "change sth" -a "sb" ID newname
把sb修改后的容器sth命名为newname保存为新镜像 -m改动信息 -a作者信息 ID 运行的容器的id
在openvz下载镜像模板 : openvz.org/download/template/precreated
cat 包名|docker import - 镜像名字       //本地包做为镜像
docker save -o 包名 ID             //镜像导出到本地
docker load --input 包名 /docker load < 包名      //用本地文件灰度本地镜像
docker push 包名                 //把镜像传到dockerhub官网 需要账户
docker 容器管理
docker create -it centos              //创建容器,没启动
docker start container_id              //启动容器 stop restart
docker run = docker create&&start
docker run (--name name)-it centos bash         //进入一个虚拟终端 -d 后台启动(设置容器名字)
docker run --rm -it centos bash -c "sleep 30" //--rm 运行完程序自动删除容器.不能-d
docker logs container_id              //获取容器运行历史信息
docker attach container_id             //进入后台的容器(exit容器退出)
docker exec -it container_id bash         //进入后台的容器(exit容器继续后台运行)
docker rm container_id               //删除容器 如果正在运行,加-f
docker export container_id > file.tar         //导出容器,可迁移至其他机器
cat file.tar |docker import - fan_test        //生成镜像
docker 仓库管理(创建私有仓库)
docker pull registry                //下载registry镜像
docker run -d -p 5000:5000 registry       //以registry镜像启动容器,监听5000端口
docker tag fan_test 172.7.15.106:5000/centos   //标记下tag 需要带有私有仓库的ip:port
docker push 172.7.15.106:5000/centos          //上传172.7.15.106:5000/centos到私有库
curl http://172.7.15.106:5000/v1/search           //查看私有库文件
docker 数据管理
docker run -itd -v /data/:/data1/ centos bash
//-v 启动同时挂载目录 : 左边为本机目录 右边为容器目录(在主机中写文件相当于直接写在本地主机中)
docker run -itd --volumes-from 容器名字 镜像名字 bash  (容器名字在docker 平时 最右)
//启动时挂载与 容器名字 一样的挂载点 ,相当于新的容器使用旧的容器的数据
创建一个数据卷容器,专门用来共享数据 (此处/data/目录在容器中,只是用来共享数据)
docker run -itd -v /data/ --name shujugongxiang centos bash
docker run -itd --volumes-from shujugongxiang 镜像名字 bash
//此容器/data/数据与数据卷容器内容共享,也可以创建很多镜像与此共享.不要随意停止删除
docker run -itd --volumes-from shujugongxiang -v /vol_data_bak/:/backup centos bash
//创建容器的时候直接备份数据
数据恢复
docker run -itd -v /data/ --name shuju2 centos bash
docker run --volumes-from shuju2 -v /vol_data_bak/:/backup/ centos tar xvf /backup/data.tar
思路:新建新的数据卷容器; 新建容器并挂载该数据卷容器,把tar解包
docker 网络管理

host模式 ,使用docker run 时使用 --net=host指定
docker使用的网络实际上和宿主机一样,在容器里看到网卡ip是宿主机ip
docker run -it --net=host centos_with_wget /bin/bash

container模式,使用--net=container:container_ID 多个容器使用公用的ip
需先开一个容器,开第二个容器时加上--net项
docker run -it centos_with_wget /bin/bash
docker  run -it --net=container:上个ID centos_with_wget bash

none模式 使用--net=none指定    不会配置任何网络
bridge模式,使用--net=bridge指定 默认模式 各自分配一个ip,在同一网段下(不和主机同一网段),
可相互通信类似VMware 的nat模式

docker 配置桥接网络
docker 外部访问容器服务
思路:对于有服务的容器,启动时映射端口,即可访问
docker run -itd -p 5123:80 centos_httpd:fan bash
curl 172.17.42.1:5123/1.html            //访问时添加5123端口,即映射到容器80端口
dockerfile创建镜像
FROM        //指定基于哪个基础镜像 FROM <image>(:<tag>)
MAINTAINER        //指定作者信息 MAINTAINER <name> <@qq.com0>
RUN        //镜像操作命令  RUN <command> / RUN["executable","param1","param2"]
如 RUN yum install httpd / RUN ["/bin/bash","-c","echo hello"]
CMD        //指定容器启动时启动服务用到的命令,只能用一次,最后一个生效
EXPOSE     //指定需要映射出去的端口.    EXPOSE 22 80 8443 等
ENV         //环境变量 ENV PATH /usr/local/mysql/bin:$PATH 添加
ADD         //远程下载包或者把本地文件cp到容器目录里
COPY        //不能远程url
ENTRYPOINT        //类似CMD,最后一条生效.CMD能被docker run 覆盖,ENTRYPOINT不能.
ENTRYPOINT先于CMD执行.
VOLUME   ["/daat"]     //创建一个可以从本机或其他容器挂载的挂载点
USER    name        //指定运行容器的用户
WOEKDIR       /path/to/workdir    //为后续的RUN CMD ENTRYPOINT指定工作目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker