容器技术之Docker
现代软件开发到完成大致都要经历三个阶段、既代码编写、测试、运维。在这个过程中最为麻烦的一件事就是环境配置。各个阶段想要运行这个软件就必须要配置相应的环境(如各种包、库、组件)。那么又没有一种办法可以让我们“多快好省”呢!在容器技术没有出来以前,十分简单粗暴的方法就是在VMware上整个虚拟系统、然后把环境都配置好、谁需要就直接把整个虚拟的环境考走。然后在自己的VMware里面加载考来的环境就可以了。这种办法确实十分有效。现在我也经常用。虚拟技术通过将应用程序部署在不同的虚拟机中从而实现隔离。
虚拟技术实现隔离不是挺好的嘛!那我们为什么还要使用容器技术呢?事情是这样的,假如我们现在有一台这样的物理机,内存为8G。我们开了三个虚拟机,我们需要在三个虚拟机上各布置一个应用。好家伙,总的内存才8G,虚拟机自己就独占4G,占用达到了50%,要知道我们的目的是布置应用程序而不是那些虚拟出来的操作系统。所以我们的需求也就很明白了。我们需要的是能将部署的应用程序进行隔离、这个隔离工具最好比较小巧、启动也要快。那么容器技术就应运而生了。
什么是容器技术
容器技术是指只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统的一种打包技术。
容器技术与虚拟技术的区别
- 虚拟机是在同一个硬件资源的计算机上通过虚拟出不同的操作系统从而实现隔离
- 容器技术是在同一个操作系统的基础上只隔离应用程序的运行时环境(如各种库及配置)
- 容器更加的轻量级且占用的资源更少、与操作系统动辄几G的内存占用相比,容器技术只需数M空间,因此我们可以在同样规格的硬件上大量部署容器,这是虚拟机所不能比拟的。
- 容器几乎瞬时启动,操作系统至少需要数分钟才能启动起。
如何使用容器技术
容器技术是一种通用的技术、Docker只是其中一种具体实现。说到如何使用容器技术,就要说如何使用Docker
这里我以搭建了一个halo博客为例子,详细说明一下Dock的使用
1.创建工作目录
mkdir ~/.halo && cd ~/.halo
2.下载示例配置文件到 工作目录
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
3.编辑配置文件,配置数据库或者端口等
vim application.yaml
4.拉取你需要的镜像到halo目录下,这里我以取最新的 Halo 镜像为例
docker pull halohub/halo:1.5.4
- 创建容器
docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.5.4
注意:此命令默认使用自带的 H2 Database 数据库。如需使用 MySQL,请参考:使用 Docker 部署 Halo 和 MySQL
-it: 开启输入功能并连接伪终端
-d: 后台运行容器
–name: 为容器指定一个名称
-p: 端口映射,格式为 主机(宿主)端口:容器端口 ,可在 application.yaml 配置。
-v: 工作目录映射。形式为:-v 宿主机路径:/root/.halo,后者不能修改。
–restart: 建议设置为 unless-stopped,在 Docker 启动的时候自动启动 Halo 容器。
- 启动docker后台服务
sudo systemctl start docker
7.设置Docker自启动 ,服务器关机重启后能自己启动
systemctl enable docker
- 打开 http://ip:端口号 即可看到安装引导界