Docker是一种容器技术,通过Docker你可以做到:
下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
Docker 包括三个基本概念
镜像是分层存储的
类似Git,一个文件对此修改,之后的修改是对上次修改的补丁,一层层的覆盖。
镜像也一样,它不像ISO那样的打包文件,由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。
镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。
容器
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
注意:容器中的数据非持久的,容器的生命周期结束了, 容器中的文件也就没有了,所以容器运行时,不应当往容器本身的存储层(文件系统)中写数据,而是应当用数据卷(Volume)。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器可以随意删除、重新 run,数据却不会丢失。
仓库
用于集中的存储、分发镜像。
公开服务:Docker官方的镜像存储服务器,一般比较慢,但可以使用国内的加速器。
私有的服务:Docker Registry可以自己搭建, Docker 官方也提供了搭建Docker Registry的官方镜像
下图是Docker 的总结图
Mac下安装Docker:
https://download.docker.com/mac/stable/Docker.dmg
或者https://download.docker.com/mac/stable/Docker.dmg
或者https://docs.docker.com/docker-for-mac/
和一般的应用安装应用一样,安装完后如下:
设置加速:
https://ftheyftp.mirror.aliyuncs.com
在Centos6.5中。只需要修改 /etc/sysconfig/docker文件,加上下面这句
other_args=--registry-mirror=https://0yrztjfu.mirror.aliyuncs.com并重启docker就好了
镜像的搜索:
docker search Name
镜像的获取:
docker pull Name:Tag
镜像的查看:
docker images
镜像的标签:
一个镜像可以定义多个标签
docker tag REPOSITORY:TAG MY_REPOSITORY:TAG;
镜像的删除:
删除可以是REPOSITORY:TAG, 也可以是镜像的ID
按tag删除时,一个镜像还有其他标签是,这个镜像不会完全删除,直到这个是最后的标签。
docker rmi CONTAINERID
docker rmi NAME:TAG
docker rmi $(docker images -q)
Docker 的导出:
docker save -o ~/Documents/99temp/onlyoffice_doc_server.tar onlyoffice:0.1
Docker的载入:
docker load < onlyoffice_doc_server.tar
Docker保存镜像:
docker commit -m 'add chinese fonts' -a 'demo' 629c927b43b3 onlyoffice:0.1
查看容器:
docker ps
docker create # 创建容器,但不运行
docker run 创建容器,并且运行
典型的命名:
docker run -i -t -d -p 8080:80 -h onlyofficeweb --name onlyoffice --restart=always onlyoffice/documentserver
#-it 参数保存标准输入打开,并分配一个伪终端
#--restart=always 异常情况下总是重新启,包括:不可知的错误(内存溢出等)、docker服务启动时
进入容器:
docker attach ContainerID/ContainerNamedocker exec -it ContainerID bash
#-it 是必选的
容器的启动、停止:
docker start CONTAINER
docker stop CONTAINER
删除容器:
docker rm CONTAINER
docker rm $(docker ps -aq)
-a:列出全部容器包括没有运行的;-q:列出容器的id
重命名
docker rename CONTAINER NEWNAME
输出容器的特定信息
docker inspect -f "{{ .Mounts }}” web1
docker inspect -f '{{ (index .Mounts 0).Source }}' containerid
创建并启动一个nginx, 新建数据卷/web
docker run -it -d -P --name web -h web1 -v /web nginx
bind 绑定一个本地目录为容器的数据卷:
docker run -it -d -P --name -h web1 web -v /Users/demo/Documents/workspace/docker/volumes/web1:/web nginx
数据共享: #web2 会共享web1中所用的数据卷
docker run -it -d -P -h demoweb2 --name web2 --volumes-from web1 nginx
-P 随机分配端口映射(49000 ~ 49900)
-p 8000:80 本机的8000端口映射到容器的80端口
docker run -it -d -P --name web -h web1 -v /web nginx
docker run -it -d -p8000:80 --name web -h web1 -v /web nginx
docker run -it -d -P -h web1 --name web --link db:db nginx
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。