1.Docker简介
Docker是一个开源应用容器引擎,可以将应用打包到容器中,并移植到任何流行的Linux机器上。
Docker是一个开源应用容器引擎,是为开发者和系统管理员设计的,用来发布和运行分布式应用程序的一个开放性平台,开发者可以将应用及其所依赖的包打包到容器中,并移植到任何流行的Linux机器上。与虚拟机实现操作系统级别的隔离不同,Docker实现的是应用程序级别的隔离,利用namespace实现系统环境的隔离,利用cgroup实现资源的隔离,利用镜像实现目录环境的隔离。docker利用的是宿主机的内核,运行在docker上的程序可以直接使用物理机上的硬件资源,因此加载一个docker容器只需要几秒钟,一台物理机上只能建立几个虚拟机,但可以很容易的创建成百上千个docker容器。
Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
Docker缺点:
-
Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用
-
LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的
-
隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库
-
网络管理相对简单,主要是基于namespace隔离
-
cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)
-
docker对disk的管理比较有限
-
container随着用户进程的停止而销毁,container中的log等用户数据不便收集
Docker实例是无状态的。这意味着它们不应该承载任何交易数据,所有数据应该保存在数据库服务器中。
作为sandbox大概是container的最基本想法了 - 轻量级的隔离机制, 快速重建和销毁, 占用资源少。用docker在开发者的单机环境下模拟分布式软件部署和调试,可谓又快又好。
2.Docker常用命令
2.1 查看Docker信息
Docker版本:docker version
Docker系统信息:docker info
2.2 对镜像的操作
检索image:docker search image_name
拉取镜像:docker pull image_name
列出镜像列表:docker images
删除镜像:docker rmi image_name
显示一个镜像的历史:docker history image_name
根据Dockerfile构建镜像:docker build -t image_name Dockerfile_path
镜像生成容器:docker run -i -t -p 58080:80 -v /root/software/:/mnt/software/ --name test 25c5298b1a36 /bin/bash /root/run.sh
-i:表示以“交互模式”运行容器
-t:表示容器启动后会进入其命令行
-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
-d:容器将会运行在后台模式
-p:设置端口映射
--name:设置容器名称
--rm:容器结束时自动清理其所产生的数据
--restart=always:机器启动就自动运行容器
--privileged:容器内部root拥有外部root权限
保存镜像到一个tar包:docker save image_name -o file_path
docker save image_name > xx.tar
加载一个tar格式的镜像:docker load < /home/save.tar
登录发布镜像:docker login
docker push new_image_name
2.3 对容器的操作
容器默认存放位置:/var/lib/docker/containers
查看所有正在运行的容器:docker ps
查看所有容器:docker ps –a
查看最近一次启动的容器:docker ps –l
保存对容器的修改:docker commit ID new_image_name
删除容器:docker rm Name/ID
删除所有容器:docker rm `docker ps -a -q`
启动容器:docker start Name/ID
停止容器:docker stop Name/ID
重启容器:docker restart Name/ID
杀死容器:docker kill Name/ID
从容器中获取日志:docker logs Name/ID
列出容器中被改变的文件或目录:docker diff Name/ID
显示容器中的进程信息:docker top Name/ID
从容器中拷贝文件到本地:docker cp ID:/container_path to_path
附着到运行的容器上,操作会同步显示到所有附着到此容器的终端上:docker attach ID
进入到运行的容器中:docker exec –ti Name/ID /bin/bash
查看docker 容器pid:docker inspect -f "{{.State.Pid}}" ID
查看容器ip地址:docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID