项目需要使用Docker,所以自学了几天,仅提供给新手…写该博客一是希望能够帮助像我这样刚学习Docker的新人,二是加深自己的印象,如果忘了也可以再看看,有些片段是从其他博客、文档和书籍学习来的,但都是自己理解的,一些没有理解的就没有写出来,如有问题希望大家能够批评指正,由衷的表示感谢。
主要运行环境:centos7
Docker的官网是:http://www.docker.com/
1. Docker介绍
- Docker简介
简单的说Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。使用Docker需要先了解容器、镜像和仓库的概念(当然还有其他更底层些的)。
- Docker的容器
Docker的容器就是“软件界的集装箱”,它可以安装任意的软件和库文件,做任何的运行环境部署。白痴点说,我们可以在Docker的容器中配置centos环境、安装配置jdk、tomcat等。这功能类似虚拟机,不过Docker容器与主机共享操作系统内核,不同的容器之间可以共享部分系统资源,因此容器更加轻量级,消耗的资源也更少。而虚拟机会独占分配给自己的资源,几乎不存在资源共享,各个虚拟机实例之间近乎完全隔离,因此虚拟机更加重量级,消耗更多的资源。
Docker的镜像
Docker的镜像类似虚拟机的镜像,但是可以从镜像仓库下载,Docker公司提供了很多镜像下载,我们也可以自己创建镜像(很简单)并提供给别人下载使用。Docker的镜像是分层的,最底层的叫做基础镜像,而一个镜像可以放到另一个镜像的顶部(类似继承的概念),比如我们在内核、引导文件系统的基础上创建一个centos系统的镜像,又在这个centos上面创建了一个配置jdk的镜像,又在这个jdk的镜像上面创建了一个配置tomcat的镜像。这些镜像是只读的,当我们从一个镜像启动容器时,Docker会在该镜像的最顶层加载一个读写文件系统,我们操作Docker的就是在这读写层中执行。Docker容器和镜像的关系
Docker镜像和容器的关系类似:我先创建一个“人”类(镜像),然后我们来实例化这个“人”类叫做“程序员”(容器),我们在“人”类(镜像)的基础上,教这个“程序员”(容器)java,并让他输出“hello world”。Docker的仓库
Docker的仓库,如果大家用过git或者maven等就会很好理解,一般我们写完代码都会push到git的仓库中,提供给其他开发人员使用,或者直接从git上pull下来其他人写好的代码,而Docker的仓库管理的不仅仅是代码,而是整个开发的环境,包括我们的系统、环境变量、软件包和运行时执行的命令等。
2、Docker安装
我使用的是centos7,其他的系统请参考自己系统命令。
- Docker安装
yum -y install docker
- Docker服务
启动服务(停止、查看状态类似)
systemctl start docker.service
- Docker帮助
docker --help
- 查看Docker信息
包括:容器、镜像、配置的详细信息
docker info
3、使用Docker容器
虽然现在我们还没有镜像,但是我们可以使用Docker提供给我们的镜像来运行容器。
- 运行Docker容器
docker run -it centos /bin/bash
Docker的命令都是docker开头,docker run就是运行容器的命令,-i参数标志保证容器中的STDIN是开启的,就是持久交互(…)的标准输入;-t参数告诉Docker为要创建的容器分配一个伪tty终端,这样新创建的容器就能提供一个交互式的shell,而不是一个运行在后台服务的容器;centos是我们要使用的镜像名称,它由Docker公司提供,运行该命令的时候会首先在我们的宿主机上找centos的镜像,如果有就直接使用,如果没有就从Docker Hub Registry上下载该镜像,类似的还有ubuntu、fedora甚至类似redis(配置好redis)和java(配置好java)的镜像;/bin/bash,是我们告诉Docker在容器中要运行/bin/bash命令启动一个Bash shell。运行这个