云端技术驾驭DAY06——容器技术概述、镜像与容器管理、定制简单镜像、容器内安装部署服务

往期回顾:
云端技术驾驭DAY01——云计算底层技术奥秘、云服务器磁盘技术、虚拟化管理、公有云概述
云端技术驾驭DAY02——华为云管理、云主机管理、跳板机配置、制作私有镜像模板
云端技术驾驭DAY03——云主机网站部署、web集群部署、Elasticsearch安装
云端技术驾驭DAY04——Logstash安装部署及插件模块

容器技术探秘

容器概述

容器技术起源
  • Linux容器的起源
    – 容器的起源可以追溯到1979年UNIX系统中的chroot命令,容器最初的设计是为了隔离计算机中的各类资源,以便降低软件开发、测试阶段的风险,或者充当蜜罐、吸引黑客的攻击,以便监视黑客的行为
    – 最初的容器是以chroot为代表的文件隔离技术,但这并不完美,如主机名、网络、系统进程、用户等都无法个隔离
  • 名称空间与控制组
    – 为了实现完美的隔离机制,2002年Linux引入了一种由内核直接提供的全局资源封装的全新隔离机制(名称空间)用来解决隔离的问题,至2009年,Linux内核已经支持了UTS、IPC、PID、NETWORK、MOUNT等多个名称空间
    – Linux解决资源配额的方案是控制组(Cgroups),它与名称空间一样直接由内核提供功能,用于隔离或者说分配并限制某个进程组能够使用的资源量,包括占用CPU时间、内存大小、磁盘I/O速度等等
  • 容器诞生
    – 当文件系统、访问、资源都可以被隔离后,容器已经有它降生所需的全部条件,Linux内核开始提供Cgroups的同一时间,就马上发布了名为LXC的系统级虚拟化功能
    – LXC带着令人瞩目的光环登场,但是LXC眼中的容器是一种封装系统的轻量级虚拟机,这种局限的思想也决定了LXC不可能形成今天的容器生态的,所以接下来舞台的聚光灯终于落到了Docker身上
docker概述
  • 2013年3月,一个名为Docker的项目宣布开源
    – 它的出现促使“容器”逐渐走向整个IT舞台的中央,数年时间,就已经成为开发、测试、部署等各个环节都难以或缺的基础支撑。
  • Docker的容器理念
    – 促使Docker的一问世就惊艳世间的,不是什么黑科技式的秘密武器,而是其符合历史潮流的创意与设计理念,还有充分开放的生态环境
    – 早期的容器技术是一种封装系统的轻量级虚拟化、Docker严重的“容器技术”是一种以应用为核心,对程序文件、运行时环境、软件依赖包都可以封装打包、部署的技术手段
    Docker的容器中没有系统
  • 开放的理念
    – 2014年,Docker开源了自己用Golang开发的Libcontainer
    – 2015年,在Docker的主导和倡议下,多家公司联合制定了“开放容器交互标准(OCI)”,这是一个关于容器格式和运行时的规范文件,其中包含:运行时标准、容器镜像标准、镜像分发标准
  • 三大概念
    – 容器:容器是一个运行在隔离环境中的程序
    – 镜像:镜像是只读的模板,包含了创建容器所需的所有文件和配置信息
    – 仓库:仓库是用来存储、分发、管理镜像的地方

docker安装部署

环境准备
主机名IP配置
docker-0001192.168.1.312vCPUs,4GiB内存
docker-0002192.168.1.322vCPUs,4GiB内存
docker安装
  1. 下载docker相关软件,并添加到跳板机的自定义yum仓库中
[root@ecs-proxy ~]# ls docker/   // 实验所需软件包
containerd.io-1.6.12-3.1.el8.x86_64.rpm              docker-compose-plugin-2.12.2-3.el8.x86_64.rpm
docker-ce-20.10.21-3.el8.x86_64.rpm                  docker-distribution-2.6.2-2.git48294d9.el8.x86_64.rpm
docker-ce-cli-20.10.21-3.el8.x86_64.rpm              docker-scan-plugin-0.21.0-3.el8.x86_64.rpm
docker-ce-rootless-extras-20.10.21-3.el8.x86_64.rpm
[root@ecs-proxy ~]# rsync -av docker/ /var/localrepo/docker/
[root@ecs-proxy ~]# createrepo --update /var/localrepo
  1. 在docker-0001和docker-0002安装docker(只演示一台)
[root@docker-0001 ~]# echo 'net.ipv4.ip_forward = 1' >>/etc/sysctl.conf   // 开启路由转发
[root@docker-0001 ~]# sysctl -p
[root@docker-0001 ~]# dnf -y install docker-ce
[root@docker-0001 ~]# systemctl enable docker --now
[root@docker-0001 ~]# docker version   // 查看服务器与客户端版本
  • 查询版本信息
命令解释
docker version查看服务器与客户端版本
docker info查看 docker 服务配置信息

镜像与容器

镜像管理

镜像概述
  • 概述
    – 镜像是创建容器的核心
    – 镜像使用CoW技术
    – 镜像采用分层设计
    – 镜像始终都是只读
  • 如何创建容器
    – 首先使用CoW为镜像创建一个读写层,容器在读写层运行
    – 这种方式可以让一个镜像创建无数个容器
镜像管理命令
  • 指定镜像的方法
    – 每一个镜像都对应唯一的镜像id
    – 每一个镜像都有标签,默认标签为latest
    – 我们在调用镜像的时候,如果没有指定标签,也是latest
命令解释
docker images查看本机镜像
docker pull 镜像名称:标签下载镜像
docker push 镜像名称:标签上传镜像
docker save 镜像名称:标签备份镜像为tar包
docker load -i 备份文件名称导入备份的镜像文件
docker history 镜像名称:标签查看镜像分层历史
docker tag 镜像ID:标签 镜像名称:新的标签创建新的镜像名称和标签
docker rmi 镜像名称:标签删除镜像(必须先删除该镜像启动的所有容器)
获取镜像
  • 镜像可以从官方镜像仓库下载,也可以自己制作

  • 官方镜像仓库:docker.com

  • 官方下载较慢,可以使用国内的镜像站加速
    在这里插入图片描述
    在这里插入图片描述

  • 添加镜像加速

[root@docker-0001 ~]# vim /etc/docker/daemon.json
{
    "registry-mirrors": ["这里添加上图获取的镜像仓库加速器地址"],
    "insecure-registries":[]
}

[root@docker-0001 ~]# systemctl restart docker
[root@docker-0001 ~]# docker info   // 查看docker服务配置信息
  • 下载镜像
[root@docker-0001 ~]# docker pull busybox:latest
镜像的备份与恢复
  • 备份busybox:latest镜像为tar包
[root@docker-0001 ~]# docker save busybox:latest -o busybox.tar
  • 使用备份文件恢复镜像
[root@docker-0001 ~]# docker load -i myos.tar.xz
  • 案例:在docker-0001备份rockylinux:8.5,在docker-0002恢复
[root@docker-0001 ~]# docker save rockylinux:8.5 -o rockylinux.tar
[root@docker-0001 ~]# rsync -avX rockylinux.tar 192.168.1.32:
[root@docker-0002 ~]# docker load -i rockylinux.tar
  • 删除镜像
    – docker rmi (-f 强制删除) 镜像名称/ID
    – 如果镜像创建了容器,就不能被删除
[root@docker-0001 ~]# docker rmi -f busybox:latest   // 强制删除
  • 给镜像设置一个新的名称标签
    – docker tag 镜像 新名称:标签

容器管理

创建容器
  • 如何创建容器?
    – 使用docker run命令创建容器
  • 命令详解
    – 语法格式:docker run -参数 镜像名称:镜像标签
  • docker run常用参数
参数解释
-i交互式
-t分配终端
-d后台运行
–name容器名称
–rm创建内存容器(容器结束后自动删除)
  • 启动容器
[root@docker-0001 ~]# docker run -it busybox:latest
  • 服务型容器需要放在后台运行
[root@docker-0001 ~]# docker run -itd myos:httpd
  • 给容器起名字,方便管理
[root@docker-0001 ~]# docker run -itd --name web1 myos:httpd
容器管理命令
  • 查看容器:
docker ps   // 查看运行中的容器
docker ps -a   // 查看所有容器
docker ps -aq   //-q选项意思是只显示id
  • 启动、关闭、重启
docker start|stop|restart 容器ID
  • docker使用技巧:批量启动、关闭、重启
docker stop $(docker ps -aq)
  • 查询详细信息
    – docker inspect 镜像名称/容器ID
docker inspect myos:httpd   // 查询镜像
docker inspect dc2edbdb98a6   // 查询容器
  • 在容器内执行命令
    – docker exec -it 容器ID 命令
[root@docker-0001 ~]# docker exec -it dc2edbdb98a6 ls -l   // 执行非交互命令
[root@docker-0001 ~]# docker exec -it dc2edbdb98a6 /bin/bash   // 执行交互命令
  • 拷贝文件
    – 上传:docker cp 本机文件路径 容器ID:容器内路径
    – 下载:docker cp 容器ID:容器内路径 容器ID:容器内路径
    容器内文件必须使用绝对路径
[root@docker-0001 ~]# docker cp dc2edbdb98a6:/var/www ./   // 拷贝容器内文件到本地
[root@docker-0001 ~]# docker cp /etc/passwd dc2edbdb98a6:/root/pwd   // 拷贝本地文件到容器内
  • 删除容器
    – 管理命令:docker rm (-f 强制删除) 容器ID
[root@docker-0001 ~]# docker rm -f dc2edbdb98a6   // 强制删除运行中的容器
[root@docker-0001 ~]# docker rm $(docker ps -aq)   // 删除所有容器
  • 查看容器日志
    – docker logs 容器ID
[root@docker-0001 ~]# docker logs a3b3ad23248d
  • 管理命令总结
命令解释
docker run -it(d) 镜像名称:标签创建容器
docker ps查看容器的信息
docker [start/stop/restart] 容器id启动、停止、重启容器
docker inspect 镜像名称容器名称 查询(容器/镜像)的详细信息
docker exec -it 容器ID 启动命令在容器内执行命令
docker cp 路径1 路径2拷贝文件:路径格式(本机路径、容器ID/路径)
docker rm 容器ID删除容器
docker logs 容器ID查看容器日志
快捷键:CTRL-P+CTRL-Q转入后台运行

镜像与服务

自定义镜像
  • 镜像采用分层设计在这里插入图片描述

  • 创建读写层

  • 修改配置

  • 重新打包

  • 使用现有镜像启动容器,在该容器基础上修改

  • 使用commit制作新镜像

[root@docker-0001 ~]# docker run -itd --name linux rockylinux:8.5
[root@docker-0001 ~]# docker exec -it linux rm -rf /etc/yum.repos.d/
[root@docker-0001 ~]# docker cp /etc/yum.repos.d/ linux:/etc/yum.repos.d/
[root@docker-0001 ~]# docker exec -it linux dnf -y install net-tools vim-enhanced tree bash-completion iproute procps-ng psmisc   // 安装常用软件包
[root@docker-0001 ~]# docker exec -it linux dnf clean all   // 清理缓存文件
[root@docker-0001 ~]# docker stop linux
[root@docker-0001 ~]# docker commit linux mylinux:latest   // 把容器制作成镜像
[root@docker-0001 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
mylinux      latest    e048abdba77b   32 seconds ago   250MB
rockylinux   8.5       210996f98b85   2 years ago      205MB
[root@docker-0001 ~]# docker rm -f linux   // 删除用于制作镜像的临时容器
容器服务原理
  • 什么是上帝进程?
    – 简单的说就是系统创建之初产生的第一个进程
  • 特点:
    – 没有父进程,PID==1
    – 是所有程序的根进程
    上帝进程死亡,系统实例也就关闭了
  • 容器有没有上帝进程?
    – 容器的启动进程就是上帝进程
    – 如果容器的启动进程关闭等同于容器关闭
  • 前台服务与后台服务
    – 前台服务是占有控制端的进程,可以在终端与用户交互式的访问与操作,一旦终端关闭,这个进程也随之消失
    – 后台进程也叫守护进程,不受终端控制,它不需要交互
    后台进程的本质是向系统托管进程服务
容器内部署应用
  • 目标:在容器中安装部署apache服务
  • 如何在容器内启动服务?
    – 由于容器内没有system,参考服务文件手工执行启动程序
    – 服务文件路径:/usr/lib/systemd/system/httpd.service
    – 查看服务文件,设置环境变量执行服务启动程序
[root@docker ~]# docker run -it --rm --name myweb mylinux:latest   // 创建一个名为myweb的容器
[root@a7f9d0c3e3e2 /]# dnf -y install httpd
[root@a7f9d0c3e3e2 /]# echo "Hello World ." >/var/www/html/index.html
[root@a7f9d0c3e3e2 /]# cat /usr/lib/systemd/system/httpd.service
[root@a7f9d0c3e3e2 /]# export LANG=C   // 设置语言,防止乱码
[root@a7f9d0c3e3e2 /]# /usr/sbin/httpd -DFOREGROUND   // 让httpd在前台运行,开启新终端访问验证
  • 为apache添加解析php文件支持
[root@a7f9d0c3e3e2 /]# dnf install -y php
[root@a7f9d0c3e3e2 /]# vim /etc/httpd/conf.modules.d/00-mpm.conf
11: LoadModule mpm_prefork_module ... ...   // 去掉注释 
23: # LoadModule mpm_event_module ... ...   // 注释配置 
[root@a7f9d0c3e3e2 /]# /usr/sbin/httpd -DFOREGROUND
  • 验证配置
// 在另一个终端拷贝info.php 到 docker 主机的html目录
[root@docker-0001 ~]# docker cp info.php myweb:/var/www/html/
[root@docker-0001 ~]# curl http://172.17.0.2/info.php
<pre>
Array
(
    [REMOTE_ADDR] => 172.17.0.1
    [REQUEST_METHOD] => GET
    [HTTP_USER_AGENT] => curl/7.61.1
    [REQUEST_URI] => /info.php
)
php_host:   616e75df56ae
1229
  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值