Docker 是世界领先的软件容器平台。Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
而 Linux 容器是 Linux 发展出的另一种虚拟化技术。Linux系统提供了Namespace和Cgroup技术实现环境隔离和资源控制.。
把这两种技术结合起来,就能构造一个用户空间独立且限定了资源的对象,这样的对象称为liunx容器。
1、更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
2、更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
3、更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
4、更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
镜像是只读的,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个container;镜像可以通过Dockerfile创建,也可以从Docker hub(最大的公开仓库)/registry(仓库注册服务器)上下载。
Docker利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、 删除。每 个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境 (包括 root 用户 权限,进程空间,用户空间和网络空间等) 和运行在其中的应用程序。
注: 镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
仓库是集中存放镜像文件的场所。
有时候会把仓库和仓库注册服务器( Registry)混为一谈,并不严格区分。 实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签( tag)。 仓库分为公开仓库( Public)和私有仓库( Private) 两种形式。 最大的公开仓库是 Docker Hub,存放了数量 庞大的镜像供用户下载。 国内的公开仓库包括阿里云, 腾讯云, 网易蜂巢, daocloud等。当然,用户也可 以在本地网络内创建一个私有仓库。 用户可以将自己的镜像使用push命令上传到公有或者私有仓库, 下 次使用这个镜像时候, 只需要从仓库上 pull下来就可以了。
Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。
创建和管理容器的工具,通过读取镜像来生成容器,并负责从仓库拉取镜像或提交镜像到仓库中
Docker仓库用于存放Docker镜像, 用户可以从仓库pull镜像到本机, 或从本机push镜像到仓库 通过Docker镜像来创建Docker容器
1、清理环境(关闭防火墙, SELINUX)
[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled
[root@localhost ~]# systemctl stop firewalld
2、配置Docker源
[root@localhost ~]# curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
3、安装合适版本的Docker
1、查看Docker版本
[root@localhost ~]# yum list docker-ce --showduplicates| grep "^docker"
2、安装合适版本的Docker
[root@localhost ~]# yum -y install docker-ce-18.06.0.ce
4、配置加速器
可以登录阿里云控制台, 搜索容器镜像服务, 来获取自己的镜像加速地址
[root@localhost ~]# mkdir /etc/docker
[root@localhost ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://jqcrbrq3.mirror.aliyuncs.com"]
}
5、启动Docker
[root@localhost ~]# systemctl enable docker //设置开机启动
[root@localhost ~]# systemctl start docker //启动Docker
查看配置是否成功
[root@docker ~]# docker info
docker search centos //在docker官方仓库查找所需镜像
docker pull centos //从默认仓库拉取centos镜像最新版
docker image ls //查看本机已有镜像
docker images //同上
docker image rm <镜像> //删除指定镜像. <镜像> 指 镜像ID 或 镜像名称:tag
docker rmi <镜像> //同上
docker inspect <镜像> //查看镜像的详细信息
docker run [选项] 镜像 // 从指定镜像运行一个容器 常用选项:
-i // 允许你对容器内的标准输入 (STDIN) 进行交互
-t // 在新容器内指定一个伪终端或终端
-d // 在后台运行容器,返回容器ID
-h // 指定容器的主机名,如果不指定,会随机生成一个
--rm // 容器停止后删除掉,默认不会删除
--name // 指定容器的名称
--network // 指定容器的网络连接方式,默认为NAT.
--ip // 指定容器的IP地址
-p <宿主端口>:<容器端口> // 端口映射,将容器指定端口映射到宿主机的指定端口.
-p 80 // 将容器的80端口映射到宿主机的随机端口
-P // 将容器的所有已声明端口映射到宿主机的随机端口
-v <宿主目录>:<容器目录> //将宿主机的指定目录映射到容器的指定目录
常见操作:
docker run -itd -h centos.qf.com --name centos centos //运行容器
docker ps [-a] //查看运行的容器 [-a 所有容器]
docker top 容器 // 查看容器的进程信息
docker stop|start|restart|kill 容器 // 启停容器
docker pause|unpause 容器 // 暂停|恢复容器
docker rm 容器 // 删除容器
docker rm `docker ps -a -q` // 删除所有容器
docker logs 容器 //查看容器日志
docker cp container:src_file dst_path //将容器中的文件复制到宿主机上
docker cp src_file container:dst_path // 将宿主机上的文件复制到容器中
docker inspect [选项] 容器 // 以json格式显示出容器的具体信息
docker exec -it centos /bin/bash //连接容易可用exit命令退出,不影响容器
docker commit -m "描述信息" 容器 镜像名[:tag] //将修改过的容器打包成镜像
基于镜像:
docker save centos > /bak/docker-centos_latest.bak //备份到/bak目录中
docker load < /bak/docker-centos_latest.bak //从备份中恢复
基于容器:
docker export centos7 > /bak/docker-centos7.bak //导出
docker import /bak/centos7.bak centos7 //导入了镜像