乐趣区

关于docker:运维脚手架之docker

以前有句玩笑话,JAVA 是跨平台的,一次编写,到处编译 !诚然,java 的程序在部署方面是比较复杂和难以调试的,如果是多地部署要思考的货色很多,而打包成一个镜像,连 操作系统都是齐全对立 的,这样在 99% 的状况下是能够做到 一次编译到处运行 的,用法简略、十分的爽

一、什么是 docker

援用官网阐明:Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.

简略讲就是,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 装置

Docker 发行版有 CE 社区和 EE 商业两种版本,CE 收费反对周期是 7 个月,倡议采纳 stable 稳定版。
要求宿主机内核最低应不小于 3.10 版本,这边采纳 CentOS7 最新版示例。

  • 筹备好 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
  • 设置阿里云减速源,不便后续的镜像拉取,这里须要提前到阿里云注册,应用专属加速器地址!

    • 注册地址:阿里云容器镜像服务 (aliyun.com)
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 组合利用,一个文件搞定所有配置,并 不便更新和卸载老利用

因网络问题,目前的支流都是应用 daocloud 的减速计划,DaoCloud/docker-mirror: docker hub mirror, Docker 镜像加速器 (github.com)

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 规范语法,次要是难看,自用,所以截了个图,供参考!

写在最初

好的工具、稳固的开发环境能够大幅提高工作效率,作者将本人日常积攒的教训分享进去心愿能帮忙更多的敌人!

【求评论、求点赞、求珍藏】

退出移动版