容器
没有集装箱,就没有全球化
什么是容器?容器的英文为 container
,这个词除了有容器的意思,还有集装箱的意思。对于运输,集装箱有着重大的意义,在《集装箱改变世界》 这本书中,提出了“没有集装箱,就没有全球化”的观点,下面引用其中一段文字:
经济全球化的基础就是现代运输体系,而一个高度自动化、低成本和低复杂性的货物运输系统的核心就是集装箱。在1956年集装箱出现之前,人们很难想象美国的沃尔玛能够遍地开花。而在集装箱出现之后,以至于某件东半球的产品运至纽约销售,远比在纽约近郊生产该产品更划算。毫不起眼的集装箱降低了货物运输的成本,实现了货物运输的标准化,以此为基础逐步建立全球范围内的船舶、港口、航线、公路、中转站、桥梁、隧道、多式联运相配套的物流系统,世界经济形态因此而改变。
集装箱运输能够获得成功,可以概括出如下几个特点:
- 可移植性:集装箱可以被任何类型支持的船舶使用
- 包容性:支持多种类型的货物,这些货物都可以被打包在集装箱内
- 标准大小:标准大小的集装箱可以被完美的组合在一起
- 共存:多个集装箱可以放到同一个船上
- 隔离:不同集装箱的货物间彼此隔离
这些特点同样适用于软件领域的容器:
- 可移植性:容器可以被任何类型支持的操作系统安装使用
- 包容性:支持多种类型的软件,这些软件都可以被打包在容器内
- 标准格式
- 共存:多个容器可以运行在同一个物理机上
- 隔离:不同容器的软件间彼此隔离
因此,可以说容器是集装箱思路在软件领域的实现,容器是软件的一个标准单元,可以将代码和依赖打包在一起、能够运行在多种操作系统和环境之上、多个容器能够在同一台物理机器上运行。
image目前一说到容器,大家最容易想到的就是 Docker
docker启动
systemctl start docker
service docker start
重启docker服务
systemctl restart docker
sudo service docker restart
关闭docker
systemctl stop docker
service docker stop
查看是否启动成功
docker ps -a
Docker
本身并不是容器,它是创建容器的工具,是应用容器引擎
另:docker教程
长话短说,这里我就不对
docker
进行系统的介绍说明了,网上很多介绍文章,我想新手的话可以先网上大概了解一下docker
的基本概念。有一个模糊的、大概的感觉就行了。多看资料文档,有百利而无一害。
Docker
不是虚拟机
很多人一开始学习Docker
的时候,感觉Docker
很像虚拟机,误以为Docker
就是虚拟机。其实Docker
不是虚拟机!这个千万不要搞错了!先记下这个硬性结果,后续真正搞环境搭建、项目部署的时候,就会明白了~不要着急,也不用担心_。
对Docker
有一个感官的感受吧
- 比如公司买了一台新服务器,系统是
centos
,你要想把项目部署到服务器上,而且项目中使用到了mysql
、redis
、activemq
、zookeeper
等技术,要想项目能在服务器上正常运行,必须在新的服务器上搭建好mysql、redis、activemq、zookeeper
服务环境。这样的话,在环境搭建和配置上就要花费太多的时间了(因为需要配置很多的配置文件、需要手动启动服务等)。 - 又或者每次重装一次系统或者换一个机器,你就要把环境重装一次,东西越多花费的时间越多、很麻烦、浪费时间和精力。
- 而使用
Docker
的话,你只需要一条命令,你就可以在你的centos
系统上运行你需要的软件,比如mysql、tomcat、jdk、redis
等。
光文字介绍,无法直观的感受到docker
的强大之处,那就举两个例子看看吧~
【示例1】:Docker
上安装mysql
你需要MySQL
服务,那么在docker
中通过简单的命令就可以安装一个MySQL
数据库服务:
docker pull mysql
哇!mysql
就这样安装好了? my god!太简单快捷了吧!
那如何启动mysql呢?命令如下:
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
很简单吧,一个mysql
服务就启动完成了,就可以正常使用了。可以通过mysql
客户端(Navicat、DataGrip
等)连接这个mysql
数据库。
目前你可以不用去知道具体的命令以及参数的含义,感官上感觉一下docker
的强大就行了。后面具体的环境部署搭建会详细说明。
【示例2】:Docker
上安装jdk
你需要JDK
环境,那么在Docker
中通过简单的命令安装一个JDK
的镜像, 然后通过一条命令启动这个容器就行了,容器会自动给你安装配置好JDK
环境。
同样的,一条命令就可以完成:
docker pull java
就这么简单的一条命令,JDK
就安装好了。你可以在Docker
容器的命令行中通过java -version
来检测jdk
是否安装成功。
镜像、容器
对于新手而言,或许有点不明白镜像和容器分别是个什么东东,还是有点不明白。
你可以这样感官的理解:
镜像 —— 相当于ISO
操作系统的安装包,ISO
镜像的内容是固定的,不会发生改变,可以重复使用。
容器 —— 类似于使用ISO
镜像安装的新的操作系统,可以使用一个相同的ISO
镜像,安装很多操作系统。
你也可以制作属于自己的镜像哦
-
你可以在某个
Docker
镜像的基础之上,对Docker
容器进行修改。比如添加了一些你自己的软件或修改一些配置文件,然后执行commit
命令,这样你就把这个容器制作成了一个新的镜像(也就是自定义镜像),以后你就可以用这个镜像创建出N个
一模一样环境的容器。 -
比如你要学习搭载
Redis
集群,那么你可以下载一个Redis
的镜像,然后启动容器,进入这个容器的文件系统里面,在这个容器里面把redis
集群的配置都设置好后,然后通过commit
命令提交这个容器生成新的镜像,以后就可以使用这个镜像运行出更多的redis
集群环境的容器了,而且环境也都是一模一样的,就无需再去从头搭建redis
集群环境了。 -
具体的环境搭建,这里不做过多的说明,后面会讲解。
-
Docker
占用的资源很小。启动一个容器一般都是秒级的。
Docker
的优缺点
这里不多做描述,随着学习后面的Docker
容器启动、项目部署等教程,你自然就会感受到Docker
的优势以及存在的不足。
网友评论