运维脚手架之docker
Posted 明码实架
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运维脚手架之docker相关的知识,希望对你有一定的参考价值。
以前有句玩笑话,JAVA是跨平台的,一次编写,到处编译
!诚然,java的程序在部署方面是比较复杂和难以调试的,如果是多地部署要考虑的东西很多,而打包成一个镜像,连操作系统都是完全统一
的,这样在99%的情况下是可以做到一次编译到处运行
的,用法简单、非常的爽!
一、什么是docker
简单讲就是,Docker让基础设施像应用程序般轻松管理
,方便快速
进行集成、测试和封装,极大的减少交付的延误
!
Docker原理
前面该吹的都吹了,这边不讲深奥原理(主要也没翻过源代码,讲不出来),docker其实也是一个虚拟机的变种
,类似更高级的程序,用java术语讲,封装、抽象更具体,操作系统层面的文件能共用的都共用了,所以整体容量更小,占用更少资源。
下图是容器化和虚拟化的结构对比图,docker的运行单位是容器
,运行在docker引擎上,主要依赖linux内核特性,可以部署很多平台上,但docker engine上只能跑 linux容器!
为什么使用 Docker
从商业角度来说,主要是快,天下武功唯快不破,这可以解决(忽略)很多问题!
另外,docker的设计思想是一个容器一个应用
,最好是无状态
的,这样在削峰填谷的时候可以全自动的伸缩!
完全微服务
的理念,所以几乎是标配!当然,超密集应用还有更大生态圈,不是仅仅一个docker能解决的!
应在何时使用 Docker
如果开始考虑上微服务、迭代非常迅速,甚至一日多更,完全建议上docker!大不了最终交付改传统模式即可。
二、怎么安装docker
上文讲解了docker的设计和使用理念,这边补充下docker的使用结构
docker结构再分析
借用一下官方的图,中间是docker引擎和上面的容器应用,左边是cli客户端、同样位于宿主机上,右边是远程仓库(或局域网仓库)
这里有几个概念要补充下:
- 容器是docker运行的最小单位,资源来自于镜像,与镜像的区别在于有差异化文件,如程序jar、配置信息等,是有运行时态的数据沉淀,当容器删除时,内在数据被删除!
- 镜像来源于仓库,分层存储(复用、减少容量、不深究),最原始的镜像只是个小型化的OS,常见的镜像在这上面增加应用,形成新的镜像,如搭载nginx的web应用镜像
- 仓库,中央公共仓库来自于官方,因网络质量和数据安全等原因,可在局域网搭建私有化仓库,常见有官方的Registry和Vmware公司的Harbor等产品。
- 数据卷,前面说了docker的设计理念,希望容器是无状态的,这些有状态的数据文件就通过数据卷挂载到容器中,容器的销毁、克隆不影响也可复用!
docker安装
- 准备好centos服务器/虚拟机后,这里更新系统和docker的源为阿里云的官方源,并安装docker-ce、设置开机自启、关闭防火墙等一系列操作!
cd /etc/yum.repos.d/
rename .repo .repbak ./*
wget -O /etc/yum.repos.d/aliyun-centos7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/aliyun-centos-docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all
yum makecache fast
yum update -y
yum repolist
yum install -y yum-utils device-mapper-persistent-data lvm2
yum install -y docker-ce
systemctl stop firewalld
systemctl disable firewalld
systemctl enable docker
systemctl start docker
- 设置阿里云加速源,方便后续的镜像拉取,这里需要提前到阿里云注册,使用专属加速器地址!
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-EOF
"registry-mirrors": ["https://XXXXXXX.mirror.aliyuncs.com"]
EOF
systemctl daemon-reload
systemctl restart docker
docker --version
- docker-compose安装
docker compose主要用来稍大一些应用的组合使用
,比如web+mysql组合应用,一个文件搞定所有配置,并方便更新和卸载老应用
!
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
三、拉个web应用玩玩
这边将做三个不同的场景演示:
- 传统拉镜像、挂载html文件目录、启动应用并访问
- 使用docker file脚本,打成镜像,存放在本地仓库,并拉取执行,这是制作自己专属产品镜像的方法
- 使用compose脚本,组合使用,方便后期更换版本、调整配置,更高级的做法!
- 最后补充了dockerFile和compose的组合使用!
总算到了翻代码的时候了,坚持住!
场景1:hello world
docker pull nginx:stable
docker run -it --rm -d -p 8081:80 --name web -d nginx:stable
mkdir -p /usr/local/docker/nginx_docker/html
echo "<center>风里雨里,我们在厦门等你!</center>" > /usr/local/docker/nginx_docker/html/index.html
docker run -it --rm --name web\\
-v /usr/local/docker/nginx_docker/html:/usr/share/nginx/html \\
-p 8081:80 \\
-d nginx:stable
docker stop web
场景2:dockerFile
# prepare
docker pull nginx:stable
mkdir -p /usr/local/docker/nginx_docker/html
cd /usr/local/docker/nginx_docker/
echo "<center>hello world</center>" > /usr/local/docker/nginx_docker/html/index.html
tee Dockerfile <<-EOF
FROM nginx:stable
MAINTAINER linzhihui <linzhihui@hotmail.com>
COPY ./html/index.html /usr/share/nginx/html
EOF
docker build -t mynginx:v1.0.1 .
docker tag mynginx:v1.0.1 mynginx:latest
docker run -it --rm --name web\\
-p 8081:80 \\
-d mynginx:latest
docker stop web
场景3:compose
mkdir -p /usr/local/docker/nginx_docker/html
echo "<center>hello linbaba2</center>" > /usr/local/docker/nginx_docker/html/index.html
tee /usr/local/docker/nginx_docker/docker-compose.yml <<-EOF
version: "3.1"
services:
nginx:
image: nginx
volumes:
- ./html:/usr/share/nginx/html
ports:
- "8082:80"
environment:
- NGINX_HOST=foobar.com
- NGINX_PORT=80
container_name: nginx
EOF
cd /usr/local/docker/nginx_docker/
docker-compose up -d # -d后台启动
docker-compose down # 停止容器并移除
docker-compose stop # 停止
docker-compose start # 启动
docker-compose restart # 重启
场景4:Dockerfile和compose组合使用
这里用到了非markdown标准语法,主要是好看,自用,所以截了个图,供参考!
写在最后
好的工具、稳定的开发环境可以大幅提高工作效率,作者将自己日常积累的经验分享出来希望能帮助更多的朋友!
【求评论、求点赞、求收藏】
以上是关于运维脚手架之docker的主要内容,如果未能解决你的问题,请参考以下文章