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 p_w_picpaths //查看本地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 <p_w_picpath>(:<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指定工作目录