一、Docker的介绍和安装
1. Docker是什么
百度百科的介绍:
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
简单地说:
Docker是一个管理容器的引擎工具。它包含一个服务端和客户端,服务端是一个管理着所有容器和文件系统的服务进程,客户端则是一个服务端的控制器,用来控制docker的服务端进程。至于容器,主要指的是包含了一些特定应用的运行实例,既保证了当前应用的运行环境独立,又能保证容器相互之间的独立。
2. Docker的优势
一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发者,我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。
Docker提供了一套虚拟化和文件系统的支持,可以让专业人员自由组装需要的运行环境到容器中,并提供容器运行时的隔离。就像一个大型油轮,承载着一个个集装箱,每个集装箱我们可以理解为我们的容器,这个容器中的内容完全由组装人员自定义。
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
具体说来,Docker 在如下几个方面具有较大的优势。
2.1、更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
2.2、更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
2.3、更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
2.4、更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
3. Docker的架构
Docker使用一个客户端服务器架构。Docker客户端和Docker守护进程交流,Docker守护进程做非常重要的工作,构建,运行和分发你的Docker容器。Docker客户端和守护进程可以运行在同样的系统上,或者是你可以连接一个Docker客户端到一个远程Docker守护进程中。Docker客户端和守护进程通过sockets或通过RESTful API进行沟通交流。
Docker client::Docker 命令行工具,是用户使用Docker的主要方式,Docker client与Docker daemon通信并将结果返回给用户,Docker client也可以通过socket或者RESTful api访问远程的Docker daemon
Docker daemon: Docker守护进程,运行在宿主机上,用户通过Docker client(Docker命令)与Docker daemon交互
Docker container:容器是Docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。
Docker image:镜像是只读的,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个container;镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载。
Docker hub/registry::共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry。
4. Docker和Linux的关系
5. docker安装
5.1 执行安装命令:yum -y install docker-io
最初执行的时候报找不到docker的镜像
已加载插件:fastestmirror, refresh-packagekit, security
设置安装进程
Loading mirror speeds from cached hostfile
* base: mirrors.cqu.edu.cn
* extras: mirrors.njupt.edu.cn
* updates: mirrors.njupt.edu.cn
No package docker available.
这个时候需要更新epel第三方软件库,运行命令:sudo yum install epel-release
更新完第三方软件库以后继续执行安装命令:yum -y install docker-io,安装成功
5.2 查看安装的docker的版本
命令:docker version
5.3 启动docker
命令:
# systemctl start docker //centos7及以后版本
# service docker start //centos6及之前的版本
5.4 修改系统中docker对应的镜像加速器方便我们快速下载和上传镜像,如下:
vim /etc/docker/daemon.json
#添加后
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"live-restore": true
}
注意:新版本的docker没有daemon.json,需要自己建一个
重启docker
卸载docker:
Rpm方式卸载旧docker
# rpm -qa | grep -i docker //查找已经安装docker
# rpm -e [module1][module2][.....] //卸载docker
5.5 从镜像库拉取镜像
命令:docker pull library/hello-world
说明:
docker pull是抓取 image 文件的命令。library/hello-world是 image 文件在仓库里面的位置,其中library是 image 文件所在的组,hello-world是 image 文件的名字。
5.6 查看本机都有哪些镜像
命令:docker images
5.7 运行镜像文件
命令:
docker run hello-world
说明:
输出这段提示以后,hello world就会停止运行,容器自动终止。有些容器不会自动终止,因为提供的是服务,比如Mysql镜像等。
到此docker已经安装完成!!!!
5.8 docker常用命令
拉取docker镜像
docker pull image_name
查看宿主机上的镜像,Docker镜像保存在/var/lib/docker目录下:
docker images
删除镜像
docker rmi hello-world 或者 docker rmi 3535063d9957
查看当前有哪些容器正在运行
docker ps
查看所有容器
docker ps -a
创建docker 容器(可以根据一个镜像创建多个容器)
docker run -tid 镜像ID /bin/bash //非centos7
docker run -tid 镜像ID /usr/sbin/init //centos7版本。使用/usr/sbin/init解决systemctl报错不能使用的问题
删除容器的命令:
docker rm container_name/container_id
启动、停止、重启容器命令:
docker start container_name/container_id docker stop container_name/container_id docker restart container_name/container_id
重命名容器:
docker rename dreamy_albattani mysql_master
后台启动一个容器后,如果想进入到这个容器,可以使用attach命令:
docker attach container_name/container_id 或者 docker exec -it container_name/container_id /bin/bash
退出容器
exit
查看当前系统Docker信息
docker info
从Docker hub上下载某个镜像:
docker pull centos:latest
执行docker pull centos会将Centos这个仓库下面的所有镜像下载到本地repository。
参考文章:
1. docker入门介绍:http://www.cnblogs.com/ityouknow/p/8520296.html
2. docker入门介绍:https://www.cnblogs.com/osscoder/p/6553733.html
3. docker安装:https://www.cnblogs.com/maodot/p/7654918.html