Docker

Docker

Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源.Docker 是通过内核虚拟化技术(namespaces及cgroups等,这里的内核技术指的是Linux内核)来提供容器的资源隔离与安全保证等。由于Docker通过操作系统层的虚拟化实现资源隔离,所以Docker容器在运行时,不需要额外的虚拟化管理程序(VMM(Virtual Machine Monitor),以及hyperisor)支持,他是内核级虚拟化,可以实现更高的性能,同时对资源的额外需求很低。最本质特征docker是通过隔离来进行创建容器,而KVM等均为通过模拟方式创建虚拟机

安装

前提配置好CentOS7的YUM源
yum install -y docker
systemctl start docker
docker pull centos

运行

docker images查看所有镜像

REPOSITORY #镜像所属仓库
TAG #镜像版本号(标识符)
IMAGE ID #镜像唯一ID
CREATED #创建时间
VIRTUAL SIZE #镜像大小
docker rmi 镜像/id #删除镜像,后面接镜像名或者id名

docker svae centos > /opt/centos.tar.gz 导出镜像
docker load < /opt/centos 导入镜像

!!!创建了容器的镜像无法删除

 

创建容器

docker run centos(镜像名称) /bin/echo "hello world!"

docker run --name mydocker -t(分配伪终端TTY) -i(和-t一起使用) centos /bin/bash
使用centos镜像启动容器

docker start container-id(由docker ps -a获得)重新启动容器

进入容器docker attach container-id

nsenter(yum install util-linux)

获取状态的PID(用于nsenter命令进入容器)
docker inspect --format "{{.State.Pid}}" container-id
nsenter -t {{.State.Pid}} -u -i -n -p

 

docker的网络

安装之后docker会默认创建docker0的网卡,用于NAT转发

 

随机端口映射

docker run --rm -it -P nginx
相比以前只多了一个新的参数-P(大写),P 就代表着随机映射。这条命令的意思就是启动一个镜像为nginx的容器,分配一个伪终端。并在物理机随机映射端口到容器的80端口,且在容器停止时删除。在者里多说一句如果没采用-it的模式而是采用了-d的后台模式,如果想要访问日志的话可以采取
docker logs 容器名/id
查看端口随机映射
docker ps -a

指定端口映射

1、docker run --rm -it -p 81:80 nginx
把物理机的81端口映射到了容器里的80端口。
2、docker run --rm -it -p 192.168.56.20:81:80 nginx
将192.168.56.20的81端口映射到容器的80端口(默认是0.0.0.0即全部IP),针对宿主机多ip
3、docker run --rm -it -p 192.168.56.20::80 nginx
将192.168.56.20的随机端口映射到容器的80端口(注意这回可是两个:),主要针对宿主机多ip且需要随机映射端口
4、docker run --rm -it -p 81:80/tcp nginx
将宿主机的81端口的tcp请求转发到容器的80端口
5、docker run --rm -it -p 192.168.56:81:80/tcp nginx
将192.168.56.20的81端口的tcp请求转发到容器的80端口,除了tcp还有udp请求一样可以转发

 

docker的存储

  数据卷

docker的其他容器都能进行对其中的数据进行访问(类似于NFS)
docker run --rm -it --name volume -v /data centos
创建一个镜像为centos的容器且容器名为volume并在容器内部挂载/data 分区然后在停止容器时自动删除
docker inspect 容器名/id #这样就可以获取关于容器的所有信息,自然包括挂载点,但是由于包含信息是在太多,所以在这里提供一条简便语句方便大家使用
docker inspect 容器名/id|grep Source|awk -F '[:,]' '{print $2}'


存储路径:
/var/lib/docker/volumes/crypted-code/_data

指定挂载路径
建立容器,并挂载
docker run --rm --name volume1 -v /volume/:/test1 -it centos

当然既然是挂载我们可以在挂载时指定权限例如读写、只读等(默认为读写权限)
docker run --rm --name volume1 -v /volume/:/test1:ro -it centos #只读
docker run --rm --name volume1 -v /volume/:/test1:rw -it centos #读写
在这里有必要提一下,有时候大家可能只想挂载一个文件,而不想挂载整个目录。其实这种情况docker也有所考虑。复用之前的命令,只需要把文件夹替换成文件即可
docker run --rm --name volume2 -v /1.txt:/1.txt -it centos

 

数据卷容器

即一个容器访问另一个容器的卷。
docker run --rm -it --name volumeA -v /volume:/data centos
创建容器volumeA 并将宿主机的/volueme挂在到自身的/data目录
docker run --rm -it --name volumeB --volumes-from volumeA centos
创建容器volumeB并挂载volumeA中的挂载目录
为了验证是否正确,我们可以采取在宿主机的/volume中创建文件,分别观察volumeA和volumeB中是否存在相同文件

posted on 2016-03-29 22:48  曦字号  阅读(230)  评论(0)    收藏  举报

导航