CentOS 7.5 安装Docker 教程
Docker简介
Docker是一个开源的容器引擎,它有助于更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。
使用Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。
Docker的优点如下:
1、简化程序
Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是Docker的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数秒就能完成。
2、避免选择恐惧症
如果你有选择恐惧症,还是资深患者。Docker帮你打包你的纠结!比如Docker镜像;Docker镜像中包含了运行环境和配置,所以Docker可以简化部署多种应用实例工作。比如Web应用、后台应用、数据库应用、大数据应用比如Hadoop集群、消息队列等等都可以打包成一个镜像部署。
3、节省开支
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker改变了高性能必然高价格的思维定势。Docker与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
Docker的架构
Docker daemon(Docker守护进程)
Docker daemon是一个运行在宿主机(DOCKER-HOST)的后台进程。可通过 Docker客户端与之通信。
Client( Docker客户端)
Docker客户端是Docker的用户界面,它可以接受用户命令和配置标识,并与Docker daemon通信。图中,docker build等都是Docker的相关命令。
Images(Docker镜像)
Docker镜像是一个只读模板,它包含创建 Docker容器的说明。它和系统安装光盘有点像,使用系统安装光盘可以安装系统,同理,使用Docker镜像可以运行Docker镜像中的程序。
Container(容器)
容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。可通过Docker API或者CLI命令来启停、移动、删除容器。
Registry
Docker Registry是一个集中存储与分发镜像的服务。构建完 Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,就需要手动复制。此时可借助Docker Registry来避免镜像的手动复制。
一个Docker Registry可包含多个Docker仓库,每个仓库可包含多个镜像标签,每个标签对应一个Docker镜像。这跟Maven的仓库有点类似,如果把Docker Registry比作Maven仓库的话,那么Docker仓库就可理解为某jar包的路径,而镜像标签则可理解为jar包的版本号。
Docker Registry可分为公有Docker Registry和私有Docker Registry。最常用的Docker Registry莫过于官方的Docker Hub,这也是默认的Docker Registry。Docker Hub上存放着大量优秀的镜像,我们可使用Docker命令下载并使用。
Docker 的安装
Docker是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。下面的介绍都针对社区版。
Docker CE的安装请参考官方文档,我们这里以CentOS为例:
1、Docker要求 CentOS 系统的内核版本高于3.10
通过uname -r 命令查看你当前的内核版本
uname -r
查看操作系统版本
cat /etc/redhat-release
2、卸载旧版本(如果安装过旧版本的话)
yum remove docker docker-common docker-selinux docker-engine
3、查看 yum 源地址
yum repolist
4、设置yum源,并更新 yum 的包索引
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
5、可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
6、安装docker
yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是稳定版18.03.1
yum install # 例如:yum -y install docker-ce-18.03.1.ce
7、启动并加入开机启动
systemctl start docker
systemctl enable docker
8、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
docker version
9、卸载docker
yum -y remove docker-engine
Docker常用命令
镜像相关命令
1、搜索镜像
可使用docker search命令搜索存放在Docker Hub中的镜像。执行该命令后,Docker就会在Docker Hub中搜索含有 tomcat 这个关键词的镜像仓库。
以上列表包含五列,含义如下:
-
NAME:镜像仓库名称。
-
DESCRIPTION:镜像仓库描述。
-
STARS:镜像仓库收藏数,表示该镜像仓库的受欢迎程度,类似于 GitHub的 stars0
-
OFFICAL:表示是否为官方仓库,该列标记为[0K]的镜像均由各软件的官方项目组创建和维护。
-
AUTOMATED:表示是否是自动构建的镜像仓库。
2、下载镜像
使用命令docker pull命令即可从Docker Registry上下载镜像,执行该命令后,Docker会从 Docker Hub中的 tomcat仓库下载最新版本的 tomcat镜像。如果要下载指定版本则在tomcat后面加冒号指定版本,例如:docker pull tomcat:7
docker pull tomcat:7
3、列出镜像
使用docker images命令即可列出已下载的镜像
docker images
以上列表含义如下
-
REPOSITORY:镜像所属仓库名称。
-
TAG:镜像标签。默认是 latest,表示最新。
-
IMAGE ID:镜像 ID,表示镜像唯一标识。
-
CREATED:镜像创建时间。
-
SIZE: 镜像大小。
4、删除本地镜像
使用docker rmi命令即可删除指定镜像
docker rmi tomcat:7
容器相关命令
1、新建并启动容器
使用以下docker run命令即可新建并启动一个容器,该命令是最常用的命令,它有很多选项,下面将列举一些常用的选项。
-d选项:表示后台运行
-p选项:指定端口映射,
– hostPort:containerPort
docker run -d -p 8080:8080 tomcat:7
这样就能启动一个 tomcat 容器。在本例中,为docker run添加了两个参数,含义如下:
-d 后台运行
-p 宿主机端口:容器端口
这里是把 容器的8080 端口映射到 虚拟机的8080端口,通过虚拟机自带的浏览器 访问 127.0.0.1:8080 或者 物理机访问 虚拟机的ip:8080 (192.168.126.128:8080)也可以访问,都是一个意思。
访问http://Docker宿主机 IP:8080/,将会看到tomcat的主界面如下:
需要注意的是,使用docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在该名称的镜像, Docker就会自动从Docker Hub下载镜像并启动一个 Docker容器。
2、列出容器
用docker ps命令即可列出 正在运行中的容器
docker ps
如需列出所有容器(包括已停止的容器),可使用-a参数。该列表包含了7列,含义如下
-
CONTAINER_ID:表示容器 ID。
-
IMAGE:表示镜像名称。
-
COMMAND:表示启动容器时运行的命令。
-
CREATED:表示容器的创建时间。
-
STATUS:表示容器运行的状态。UP表示运行中, Exited表示已停止。
-
PORTS:表示容器对外的端口号。
-
NAMES:表示容器名称。该名称默认由 Docker自动生成,也可使用 docker run命令的–name选项自行指定。
3、停止容器
使用 docker stop命令,即可停止容器
docker stop 4dbf26d1624d
其中 4dbf26d1624d 是容器 ID,当然也可使用 docker stop容器名称来停止指定容器
4、启动已停止的容器
使用docker run命令,即可新建并启动一个容器。对于已停止的容器,可使用 docker start命令来启动
docker start 4dbf26d1624d
5、查看容器日志
docker container logs 4dbf26d1624d
6、进入容器
使用docker exec命令用于进入一个正在运行的docker容器。如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令了
docker exec -it 4dbf26d1624d /bin/bash
退出容器
exit
7、删除容器
使用docker rm命令即可删除指定容器
docker rm 4dbf26d1624d
该命令只能删除已停止的容器,如需删除正在运行的容器,可使用-f参数
Docker虚拟化原理
传统虚拟化和容器技术结构比较:
传统虚拟化技术是在硬件层面实现虚拟化,增加了系统调用链路的环节,有性能损耗;
容器虚拟化技术以共享Kernel的方式实现,几乎没有性能损耗。