一、Docker简介
Docker (访问官网) 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。(以上信息来源于百度百科)好吧,读完之后,对于初学者来说,没有任何*用,依然不知所云。下面介绍一下Docker中最基本的几个概念,就直接来安装使用一下。
Docker镜像:
Docker镜像(image)类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了 文件系统。镜像是创建容器的基础,通过版本管理和增量的文件系统,Docker提供了一套很简单的机制来创建和更新现有镜像,也可以直接从网上下载制作好的镜像, 使用成本很小。
Docker容器:
Docker容器(container)类似于一个轻量级的沙箱,Docker应用容器来使用和隔离应用。容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。
镜像自身是只读的,容器从镜像启动时, Docker会在镜像的最上层创建一个可写层,镜像本身将不会改变。
Docker仓库:
Docker仓库(repository)类似于代码仓库,是Docker集中存放镜像的场所。注意,注册服务器(registry)并不是一个东西,实际上,注册服务器上存放仓库的地方。
目前,最大的公开仓库是Docker Hub,存放了大量的image供用户下载,国内的有Docker Pool等,可以提供稳定的访问,当然我们也可以创建自己的私有仓库。
二、Docker安装
Docker在Windows、Mac、Linux系统上都提供了相应的支持,可以在这三种平台上安装,这里主要介绍在Linux系统上的安装,使用的是Ubutnu16.04的系统。
1、安装虚拟机和OS
使用虚拟机来产生和我们所用的不一样的系统,笔者使用的是Windows的系统,装上了VMware虚拟机后,在虚拟机里面装上Ubuntu系统,整个过程很简单,在这里不做过多叙述。
注意的是,在安装虚拟机之后,需要我们开启CPU的虚拟化技术。首先要在虚拟机设置中打开如下“虚拟机引擎”中的虚拟化功能,如下所示;然后,还需要在BIOS中enable虚拟化,不同的电脑可能会有不同的BIOS选项。
2、在Ubuntu中安装docker
在Linux中安装Docker也不复杂,这里主要参考了Docker官方文档来安装。基本步骤如下:
- 卸载旧的版本(如果有的话)
apt-get remove docker docker-engine docker.io
- 由于Ubutnu系统支持相关的文件系统,这里略过相关的检查(详细信息)。更新软件源:
sudo apt-get update
- 安装Docker,这里选择的是ce版本的最新版:
sudo apt-get install docker-ce
,如果报错,可以按照提示更改,如运行apt install docker.io
进行安装
安装完成后,运行docker --version
,如果正常输出版本信息,则表示安装成功。
3、hello world
按照惯例,我们需要运行一个hello world来检验一下。在终端中输入,docker run hello-world
之后,可以看到如下输出:
这条命令下载了一个image,并在一个container中启动了它,输出信息后又退出了。
三、Docker基础命令使用
Docker支持的命令有很多,任何操作都要通过命令行来完成,可以运行docker run --help
来查看支持的所有命令。其输出如下:
Usage: docker [Options] COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default
"/home/xu/.docker")
-D, --debug Enable debug mode
--help Print usage
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level
......此处省略大量输出
可以看到命令非常的多,但是也是有规律可循的。下面这张图简单的描述了docker的常用命令。可以看见,主要是容器、镜像、注册服务器之间的互相操作。
1、镜像相关命令
获取镜像:
docker pull NAME[:Tag]
这里的意思是从Docker Hub中下载镜像,如果不加Tag,则下载其最新版(latest),如下所示下载了一个叫做selenium/hub的镜像,默认其最新版,注意要在root权限下操作。
查看镜像信息:
docker images
其输出信息如下:
REPOSITORY TAG IMAGE ID CREATED SIZE
#镜像来源的仓库 、标签 、镜像ID(唯一的)、创建时间、 镜像大小
搜索镜像:
docker search IMAGE_NAME
删除镜像:
docker rmi NAME[:Tag]
需要注意的是,有时使用镜像ID去删除镜像,会提示镜像间有依赖而无法删除。
存出&载入和上传镜像:
存出:docker save -o OUTPUT_NAME.tar image_name
载入:docker load --input tar_name
用docker push命令上传image到仓库。
创建镜像:
镜像的操作里面操作镜像是比较重要的,有3种方式:
- 基于已有镜像容器创建
- 基于本地模本导入
- 基于dockerfile创建
方式2就是上一条命令,存出和载入镜像;用dockerfile文件创建镜像,会涉及到其他的一系列命令;这里我们说一说基于已有容器创建镜像:
我们对已有的镜像操作时,是对其的一个实例容器在进行操作,已Ubuntu为例,我们进如系统中进行操作之后(比如安装了JDK),如果此时用exit命令退出,那么我们测操作并不会被保存下来,而是丢掉了(即下次使用Ubuntu时仍需要我们安装JDK)。
这时我们可以使用docker commit
命令来提交在容器里的操作,以形成新的image。而旧的image我们可以将其删掉以节省空间。常用格式如下:docker commit [-a 作者信息] [-m 提交信息] container_id new_image_name
2、容器相关命令
创建和启动容器: docker create
: 新建的容器处于停止状态,可以使用docker start命令来启动它。 docker run
,相当于先docker create,再docker start启动它,常用的命令格式:docker run -it image_name command,-i 表示让容器的标准输入保持打开,-t 选项让docker分配一个伪终端,并绑定到容器的标准输入上,可以简单的认为-it就是让容器以交互的方式运行。进入容器之后,可以用Ctrl+D或者exit来退出容器。-d 后台运行(守护态)
终止容器:
docker stop container_name
进入容器:
使用-d让容器以守护态运行的时候,无法看到容器中的信息,如果需要进入容器中的话,可以用以下几种方法:
docker attach container_name/id
docker exec -it container_name/id command
删除容器: docker rm container
,-f 强行删除
查看容器状态:
docker ps 查看容器状态,可以添加的选项很多:
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
–format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
–no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
常用操作命令行如下:
杀死所有容器:docker kill $(docker ps -a -q )
删除所有容器:docker rm -f $(docker ps -a -q)
监控所有容器数量:docker ps -a -q | wc -l
正在运行的容器的数量:docker ps -q | wc -l