其他分享
首页 > 其他分享> > 【运维脚手架】之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安装

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

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

因网络问题,目前的主流都是使用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应用玩玩

这边将做三个不同的场景演示:

场景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

image-20211015114029297

场景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标准语法,主要是好看,自用,所以截了个图,供参考!

写在最后

好的工具、稳定的开发环境可以大幅提高工作效率,作者将自己日常积累的经验分享出来希望能帮助更多的朋友!

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

标签:compose,运维,nginx,html,usr,镜像,docker,脚手架
来源: https://www.cnblogs.com/linzhihui/p/16424275.html