标签:lob -o rmi nbsp mmu 官网 art project process
Docker 是什么 ? Docker 基于 Go 语言开发,代码托管在 Github 上,并遵循 Apache 2.0 开源协议。 Docker 容器可以封装任何有效负载,几乎可以在任何服务器之间进行一致性运行。换句话说,开发者
构建的应用只需一次构建即可多平台运行。运营人员只需配置他们的服务,即可运行所有的
应用。
为什么要使用 docker?
1 、快速交付应用程序
2 、更容易部署和扩展
3 、效率更高
4 、快速部署也意味着更简单的管理
5、容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是
在硬件层面实现。
Docker 内部:
要理解 Docker 内部构建,需要理解以下三种部件:
Docker 镜像 - Docker images:Docker 镜像是 Docker 容器运行时的只读模板, 镜像可以用来创建 Docker 容器
Docker 仓库 - Docker registeries:Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库
Docker 容器 - Docker containers:Docker 利用容器来运行应用, 一个 Docker 容器包含了所有的某个应用运行所需要的环境,每一个 Docker 容器都是从 Docker 镜像创建的。
Docker 底层技术
docker 底层的 2 个核心技术分别是 Namespaces 和 Control groups,Namespaces 用来隔离各个容器
1)pid namespace: 不同用户的进程就是通过 pid namespace 隔离开的,且不同 namespace 中可以有相同 pid
2) net namespac: 网络隔离是通过 net namespace 实现的,每个 net namespace 有独立的 networkdevices, IP addresses, IP routing tables, /proc/net 目录
3) ipc namespace: container 中进程交互还是采用 linux 常见的进程间交互方法 (interprocess communication -IPC),包括常见的信号量、消息队列和共享内存。 container 的进程间交互实际上还是 host 上具有相同 pid namespace 中的进程间交互
4) mnt namespace: 类似 chroot,将一个进程放到一个特定的目录执行
5) uts namespace: UTS("UNIX Time-sharing System") namespace 允许每个 container 拥有独立的 hostname 和domain name, 使其在网络上可以被视作一个独立的节点而非 Host 上的一个进程
6) user namespace: 每个 container 可以有不同的 user 和 group id, 也就是说可以在 container 内部用container 内部的用户执行程序而非 Host 上的用户
docker的安装:
可通过yum install docker 直接安装(但是有时会有更新或者什么的需要杀死进程才可安装)
也可在官网下载yum源然后直接安装(https://docs.docker.com)
附:也可以按照官方文档安装
1. Log into your machine as a user with sudo or root privileges.
2. Make sure your existing yum packages are up-to-date.
3. Add the yum repo
$ sudo tee /etc/yum.repos.d/docker.repo<<-'EOF'
[dockerrepo]
name=DockerRepository
baseurl=https: //yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https: //yum.dockerproject.org/gpg
systemctl start docker //启动docker
docker info //查看docker详细信息
docker images //查看docker镜像
docker version //查看docker版本
docker pull docker.io/centos //获取centos镜像
docker pull docker.io/jdeathe/centos-httpd //下载镜像
docker search centos //查找镜像
创建自己的镜像:
一:使用docker commit 来扩展一个 image
docker run -it docker.io/centos:centos6 //创建容器
yum -y install httpd //容器中安装服务
docker commint -m “备注” -a “用户信息” 容器ID 镜像名称 //创建镜像
docker run -it centos:httpd /bin/bash // 启动容器
创建完成
二:dockerfile 创建 image
Docker build -t centos:httpd . //创建镜像
Docker tag 源镜像名称/ID 新镜像名称:标签 //修改镜像标签
Docker rmi 镜像名称/ID //删除镜像(-f:强制删除)
Docker save -o centos6.tar centos:6 // 将镜像保存至本地
Docker load --input centos.tar //上传镜像到镜像库
容器:
Run //新建
Exit //退出
Docker run -it centos:6 /bin/bash //创建容器并打开
Docker run -it centos:6 /bin/bash //创建容器并放置后台运行
Docker run centos:6 /bin/echo ‘hello word’ //输出hello word 之后容器终止
当利用 docker run 来创建容器时, Docker 在后台运行的标准操作包括:
1.检查本地是否存在指定的镜像,不存在就从公有仓库下载
2.利用镜像创建并启动一个容器
3.分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
4.从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
5.从地址池配置一个 ip 地址给容器
6.执行用户指定的应用程序
7.执行完毕后容器被终止
Docker ps //查看正在运行的容器
Docker ps -a //查看全部容器
Docker start 容器名称/ID //启动容器
Docker stop 容器名称/ID //终止容器
Docker restart 容器名称/ID //重启容器
Docker inspect 容器名称/ID //查看容器详细信息
进入容器的三种方式:
Docker attach 容器名称/ID //进入容器(不推荐使用当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。)
Docker exec -it 容器名称/ID /bin/bash //进入容器(推荐使用)
Docker rm 容器名称/ID //删除容器(-f:强制)
Docker rm $(docker ps -aq) //批量删除容器
标签:lob -o rmi nbsp mmu 官网 art project process
原文地址:http://blog.51cto.com/13544810/2062719