一、Docker相关概念
1.Docker:
namespace,cgroup:
解决方案:
lxc,openvz
lxc:linux containers
docker最初就是lxc的封装版本。
docker engine/docker server:输出一个api,用于接受外部请求
接受到client请求,借助于lxc虚拟化技术,在lxc上创建一个虚拟机实例。
docker借助于外部的dockerhub,实现image
后台docker不再使用lxc,使用libcontainer[centos 7],隔离用户空间的引擎
在前端使用没有区别
2.容器虚拟化
例如kvm也需要images,有一个完整的OS
而容器所需的images,并非完整的OS,只拥有FS,没有内核
借助于AUFS技术对映像文件进行分层,容器运行一个独立的FS上
运行nginx需要nginx依赖的库,运行mysql需要依赖mysql的库
把FS做成一个base image,再做几个专用的image,例如nginx专用的,MySQl专用的
[docker hub]
/
/
[cn1][cn2]...
[API] [docker engine ]
=======================
Hypervisor
=============
Host OS
==============
【硬件】
3.核心组件;
docker client:docker的client工具,用户使用docker的接口,docker client与docker daemon通信。并将结果返回给client
docker daemon:运行在宿主机,Docker的守护进程,用户可通过docker client与其交互;
image :只读的,基于aufs或者UnionFS叠加在一起,用来创建container
一个镜像可以运行多个container;镜像文件可以通过Dockerfile创建,也可以从docker hub/registry 下载
repository
公共仓库 //提供有base image Docuer hub/registry
私有仓库 //docker repository
docker container:docker的运行实例,容器是一个隔离环境
另外两个重要组件:
docker link:各docker之间的通信,openvswtich,netns构建,
docker volume:容器中的数据的持久化
二、安装Docker:
centos6 ;epel
centos7: extra
docker-engine
安装Docker:
https://mirrors.aliyun.com/docker-engine/yum/repo/main/centos/7/
yum install docker-engine
[root@node1 ~]# rpm -ql docker-engine |egrep -v "share"
/etc/udev/rules.d/80-docker.rules
/usr/bin/docker
/usr/bin/docker-containerd
/usr/bin/docker-containerd-ctr
/usr/bin/docker-containerd-shim
/usr/bin/docker-init
/usr/bin/docker-proxy
/usr/bin/docker-run
/usr/bin/dockerd
/usr/lib/systemd/system/docker.service
docker子命令有很多
systemctl start docker.service
docker images //查看镜像
docker search centos
Name DESCRIPTION STARS STARS OFFICAL AUTOMATED
星 自动生成
darksheer/centos //用户名:镜像名
docker search busybox
docker pull busybox //拉取官方镜像 base iamge
tag : lastest //最新版本,默认最新版本
docker pull hub.mt.com:5000/busybox //执行私有仓库获取image,必须支持ssl。或者禁止使用tls
docker help run //运行
docker run [OPTIONS] IMAGS [COMMAND] [AEG,...]
//image应该有一个运行起来后,默认运行的命令。
-t --tty=false 分配一个默认的伪终端
-i --interactive=false 打开之后运行在交互式
[root@node1 ~]# docker run -it busybox:latest /bin/sh
docker ps //查看正在运行的 docker
需要借助于外 volume 保存创建的数据。
docker help commit //基于当前容器的所有修改,创建一个新的images
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
三、docker常用命令:
1.环境信息相关
info
version
2.系统维护相关
images
inspect :容器的详细信息
build:基于dockerfile创建image文件
commit:基于运行中的容器创建映像文件
pause:暂停
unpause
rm
rmi //删除映像文件
run //基于image运行一个容器
start/stop/restart
top //资源占用情况
ps
kill
...
3.日志相关
events;
hisgory;
logs;
4.Docker hub 相关
login
logout
pull
push
search
基本操作:
获取映像:pull
启动容器:run
-i,-t
docker run -it centos:latest /bin/bash
ifconfig //docker0 一个虚拟接口
一半在虚拟机, 一半在宿主机
docker kill c98dac012556 //kill 掉容器,容器ID
docker ps -a //可以查看所有的
关闭后,默认还是会占用内存,可以在启动的时候
docker run --rm //退出则,rm自动移除容器
docker rm c98dac012556 //删除该容器
docker image的创建:
1.基于dockerfile
2.基于运行中的容器修改
//仅仅是打包最上面一层,只有最上面一层是可写的。
实验:commit,保存文件
[root@node1 ~]# docker run -it centos:latest /bin/bash
在home中 useradd centos
[root@node1 ~]# docker commit faecb4def9d5 centos:newuser
[root@node1 ~]# docker images
有 newuser
[root@node1 ~]# docker kill faecb4def9d5
[root@node1 ~]# docker rm faecb4def9d5
[root@node1 ~]# docker ps -a
没有之前的容器了
[root@node1 ~]# docker run -it --rm centos:newuser /bin/bash
rm用于关闭后,就删除容器
[root@3f20a3c7f5df /]# id centos
uid=1000(centos) gid=1000(centos) groups=1000(centos)
[root@3f20a3c7f5df /]# exit
[root@node1 ~]# docker ps -a //将没有容器运行
原文地址:http://hmtk520.blog.51cto.com/12595610/1946362