1.概述
1.简介
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,
然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker的英文本意是“搬运工”,在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,
开发者通过Docker可以将App变成一种标准化的、可移植的、自管理的组件,可以在任何主流系统中开发、调试和运行。
说白了,docker是一种用了新颖方式实现的轻量级虚拟机,类似于VM,但是在原理和应用上和VM的差别还是很大的.并且docker的专业叫法是应用容器(Application Container)。
一个完整的Docker有以下几个部分组成:
Docker Client #客户端
Docker Daemon #守护进程
Docker Image #镜像
Docker Container #容器
2.基本概念
Docker包括三个基本概念:
镜像(Image)
容器(Container)
仓库(Repository)
(1).镜像
Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等) 。
镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像构建时,会一层层构建,前一层是后一层的基础。
每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。
(2).容器
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。
容器可以被创建、启动、停止、删除、暂停等。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。
因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,
使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
(3).仓库
镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,
Docker Registry 就是这样的服务。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
2.基础命令
1.docker的启动、停止、重启
systemctl start docker #启动docker服务
service docker start
systemctl stop docker #关闭docker服务
service docker stop
systemctl restart docker #重启docker服务
service docker restart
systemctl daemon-reload #重载守护进程
chkconfig docker on #开机自启docker
2.容器管理
docker run -it --name vm1 ubuntu bash #创建并运行一个新的容器(run=create+start) -it 表示交互式行
docker run -d --name vm1 nginx #创建并运行一个新的容器;-d表示打入后台
docker info #显示docker系统信息,包括镜像和容器数等
docker version #查看docker容器版本
docker search ... #搜索符合条件的镜像
docker ps -a #查看所有容器状态
docker ps #查看正在运行的容器进程
docker pull nginx #拉取镜像
docker push #将镜像推送至远程仓库
docker history nginx #查看指定镜像的创建历史
docker attach vm1 #连接容器
docker top vm1 #查看容器进程
docker logs vm1 #查看容器指令输出; -f表示可以实时查看
docker inspect vm1 #查看容器的参数(获取容器元数据)
docker stats vm1 #查看容器资源使用率
docker diff vm1 #查看容器修改
docker start vm1 #启动容器
docker stop vm1 #停止容器
docker restart vm1 #重启容器
docker kill vm1 #强制杀死容器
docker pause vm1 #暂停容器
docker unpause vm1 #恢复容器
docker rm vm1 #删除容器; -f表示强制删除
docker export vm1 > vm1.tar #导出容器
docker import vm1.tar image #导入容器为镜像image
3.镜像管理
镜像用来创建容器,是容器的只读模板,默认可以从 docker hub 上下载。docker 的镜像是
增量修改,每次创建新的镜像都会在父镜像上构建一个增量的层,基于 AUFS 技术。
docker search #查询镜像
docker pull #拉取镜像
docker push #推送镜像
docker inspect #查看镜像详情
docker images #列出本地已有的所有镜像
docker save ubuntu > ubuntu.tar #导出镜像
docker load -i ubuntu.tar #导入镜像
docker commit #更新镜像
docker rmi #删除镜像
docker build #创建镜像
4.网络管理
ip netns add [name] #添加一个 namespace(虚拟网络空间)
ip netns exec [name] ip link set lo up #在 namespace 中启用一个设备
ip link set [dev-name] netns [name] #在 namespace 中新加一个设备
ip netns exec [name] ip link set [dev-name] up #启用设备
ip netns exec [name] ip addr show [dev-name] permanent scope global #查看指定namespace中指定设备的参数信息
ip netns exec [name] ip -4 addr add 192.168.1.2/24 brd 192.168.1.255 scope global dev [dev-name] #为namespace中指定设备设置ip
ip netns list #查看所有network namespace
ip netns exec [name] ping 192.168.1.3 #ping 虚拟机实例