docker容器的相关环境及创建镜像1

news2024/10/5 16:29:31

一、容器管理工具介绍


LXC
2008
是第一套完整的容器管理解决方案
不需要任何补丁直接运行在linux内核之上管理容器。创建容器慢,不方便移植

Docker
是在LXC基础上发展起来的。拥有一套容器管理生态系统
生态系统包含︰容器镜像、注册表、RESTFUL API及命令行操作界面

Docker版本
2017年的3月1号之后,Docker的版本命名开始发生变化,同时将CE版本和EE版本进行分开。
Docker社区版(CE)∶为了开发人员或小团队创建基于容器的应用,与团队成员分享和自动化的开发管道。docker-ce提供了简单的安装和快速的安装,以便可以立即开始开发。docker-ce集成和优化,基础设施。
Docker企业版(EE)∶专为企业的发展和IT团队建立。docker-ee为企业提供最安全的容器平台,以应用为中心的平台。

二、部署docker

用于管理容器,官网地址:www.docker.com

谷歌开发的基于golang语言

1、获取docker-ce的yum

 

 按照官方文档去安装docker

安装之前必须卸载旧版docker,直接复制粘贴

yum list | grep docker  查看是否安装了docker

检测yum源是否配置成功,ls  /etc/yum.repos.d,查看是否存在docker-ce.repo

 2、安装docker

yum repolist   查看yum仓库是否有docker-ce-stable的软件包

 yum -y install docker-ce  直接安装,也可以复制粘贴文档

安装特定版本可以看官方文档

 设置docker开机自启 systemctl enable docker,启动docker,systemctl start docker

 如果报错daemon守护进程没有开启,就是没有开docker服务

 3、容器、镜像、仓库之间的关系

registry是仓库,但实际上是注册表的意思,里面可以放镜像

 docker客户端收到命令发送给docker daemon守护进程,假如命令是调用CentOS镜像资源。

daemon就会在本地找是否有对应的镜像,如果没有就会在Registry仓库下载。

最后才通过对应的镜像images创建容器

安装的软件其实是在容器中,就比如字帖,就是一个模板。写字的时候需要加一张纸在上面,所以软件安装到容器中效率高,还可以用完就删,不会对镜像产生影响。

4、启动容器

第一步:查看本地是否有镜像

 第二步:搜索镜像docker search 镜像名称

 第三步:下载镜像

docker pull centos  下载centos镜像,默认是latest。可以在后面添加指定的版本号

docker pull centos:7.5  docker pull mysql:8.0.2

 查看镜像是否下载完成docker images

 第四步:运行容器

 --name=c1是给容器命名,只不过二进制代码才是容器的真正的名称

 uptime是容器启动时间  还有用户和1到15分钟的 负载均衡
 

在容器中安装apache、iproute

 在本地可以访问容器ip并获取资源,exit退出之后就无法访问了,ps可以查看容器中的进程

5、docker daemon管理

远程管理docker daemon充分条件
可以把docker client与docker daemon分开部署

可以通过第三方软件管理docker daemon创建的容器

第一步:关闭docker daemon守护进程并修改daemon配置文件

 修改后只保留dockerd

 修改之后必须reload

 第二步:重新启动docker

systemclt  start  docker

第三步:添加远程配置文件管理docker daemon

 默认情况,/etc/docker下没有daemon.json

键值对的配置规则:hosts   对应" "," " 

远程管理docker daemon 必须写2375端口

重启docker

第四步:远程连接测试

注意是远程主机的ip,不是容器的ip。

 网页访问的时候要加端口号

可以通过远程命令pull下载镜像

6、docker命令行命令介绍

docker --help

可以分为docker管理命令和普通命令,管理命令是普通命令的补充

例如image ,普通命令是docker images  但是管理类命令是docker image ls

pull下载镜像

 6.1、容器镜像传输

打包本地镜像用save命令

 删除镜像之前必须删除容器rm 容器名称或者container id

 容器哪怕是退出状态也会占用镜像

 docker  images  查看镜像

把镜像导入本地用load -i tar包名称

启动容器,run是普通命令,container是管理命令

容器可以随便创建,所以不用在意容器,它的作用其实就是用来跑服务的。

echo "container webpage" >> /var/www/html/index/html

 容器安装httpd服务之后用决定路径命令启动

为了方便使用,可以把容器保存成tar包,也就是基于容器生成容器镜像

 导入容器镜像tar包用import -m 事务标签 容器镜像tar包  容器镜像标签 

 可以用history 命令查看容器镜像的历史信息,之前创建了哪些容器镜像

方便通过标签tag去识别之前安装的容器镜像

创建一个新的容器c4可以直接使用导入的容器镜像

 之前安装一个软件需要重复在多台服务器上安装,容器镜像保存并导入之后就不用重复安装了

每创建一个新的容器都可以直接使用导入的容器镜像

二、查看容器ip的方法

第一种:exec 容器的名称 ip a s

查看正在运行的容器的ip,不用进入容器中,直接在终端就能查看

run是创建一个新的容器

 第二种:不需要和容器进行交互,直接用 docker  inspect  容器名称  

inspect可以查看容器的 所有信息

 第三种:需要进入容器的,必须安装iproute

 容器的ip地址是由docker0网桥自动分配的 

2.1、停止正在运行的容器

docker ps 是查看正在运行的容器  docker ps -a  是查看所有存在的容器

删除容器之前必须stop

 关闭和开启多个容器

 通过attach附加参数进入进入容器,前提是容器必须是开启状态

 删除容器之前必须停止stop

2.2、容器端口映射

容器的配置是一次性的,无法修改,只能删除之后释放容器空间。

停止容器之后rm容器,重新配置端口等信息

 197服务器上的容器映射主机80端口

 容器端口映射

 

合法的端口,全世界都能访问

less /etc/services

 主机的端口有多少个?

分情况,tcp协议有多少个,udp协议有多少个,然后每个ip又都有tcp和udp

端口号的范围:1 ~ 65535

一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议;

一种是发送以后就不管了,不去确认信息是否到达,这种方式大多采用UDP协议。对应这两种协议的服务提供的端口,也就分为TCP端口和UDP端口。

三、数据持久化存储

3.1、容器使用docker主机存储数据

第一步∶在Docker Host创建用于存储的目录

docker  --help  查看-v命令是创建一个volume

挂载一个volume,随时随地可以把容器中的数据保存到docker主机

 创建容器时自动就创建了data目录到/目录下,所以docker主机创建的目录就可以自动挂载到data

进入正在运行的容器并以命令行交互,attach进入容器之后才能touch

案例:运行在容器中的http服务,使用docker host的/web目录中的网页文件,并能够在doker host上进行修改,修改后立即生效。
第一步︰创建/web并添加网页文件

第二步:启动容器对/web目录进行挂载

 也就是把docker主机创建的web目录挂载到容器c200使用

第三步:安装好http服务之后访问8080端口

httpd -k start   开启http服务,然后使用另外的主机访问docker主机ip:8080就可以访问到web目录 

ctrl + p +q 退出容器不停止运行容器之后可以修改主机的web目录内容

容器时间同步

docker run -it -v /etc/localtime:/etc/localtime --name 容器名称 centos:latest /bin/bash

把docker host的时间同步到容器

在容器外执行容器内命令

exec 是在容器中打开新的终端,并且可以启动新的进程。用exit退出,不会导致容器的停止。

容器内的命令ls, docker ip a s  不是容器内的命令

 容器间使用link互联

 容器的编排其实就是每个服务的启动顺序,例如lnmp架构中如果有调度器,必须先启动数据库服务再启动web服务器。web服务器是调度服务器的依赖,数据库服务器又是web服务器的依赖

第一步︰创建被依赖容器

第二步:创建依赖于源容器的容器

也就是说想启动容器,必须先启动被依赖的容器c202,才能启动c203

容器202和203被自动映射到了/etc/hosts中

 哪怕停止运行容器之后新增一个容器去抢占了原有的ip也不会影响容器的编排关系

容器的ip还是会自动映射到/etc/hosts文件中

只能先启动被依赖的容器,才能启动依赖于源容器的容器

四、docker容器镜像

 4.1、容器镜像介绍

Docker镜像就是一组只读的目录,或者叫只读的Docker容器模板,镜像中含有一个Docker容器运行所需要的文件系统,所以我们说Docker镜像是启动一个Docker容器的基础。
可以将Docker镜像看成是Docker容器的静态时,也可将Docker容器看成是Docker镜像的运行时。
从Docker的官方文档来看,Docker容器的定义和Docker镜像的定义几乎是相同,Docker容器和Docker镜像的区别主要在于docker容器多出了一个可写层。
 

联合文件系统(UnionFS )是一种轻量级的高性能分层文件系统,它支持将文件系统中的修改信息作为一次提交,并层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,应用看到的是挂载的最终结果。
联合文件系统是实现Docker镜像的技术基础。Docker镜像可以通过分层来进行继承。例如,用户基于基础镜像(用来生成其他镜像的基础,不是centos操作系统,只是复刻了相同的文件系统目录结构)来制作各种不同的应用镜像(tomcat、apache)。这些镜像共享同一个基础镜像层,提高了存储效率。此外,当用户改变了一个Docker镜像(比如升级程序到新的版本),则会创建一个新的层
( layer )。因此,用户不用替换整个原镜像或者重新建立,只需要添加新层即可。用户分发镜像的时候,也只需要分发被改动的新层内容(增量部分)。这让Docker的镜像管理变得十分轻量级和快速。
 

镜像是静态的只读状态,但是镜像开启的 容器可以在里面读写并安装服务

还可以把容器镜像打包之后放到其他docker主机上运行

 docker client向docker daemon发起创建容器的请求

docker daemon查找有无客户端需要的镜像
如无,则到容器的镜像仓库中下载需要的镜像
拿到容器镜像后再启动容器

容器镜像就是文件系统,用来保存和启动容器的

4.2基础镜像


1.部署一台最小化软件安装操作系统

2.把最小化软件安装操作系统根目录进行打包
每台计算机的映射都是不一样的,会自动映射键盘鼠标等,如果镜像迁移到另外一台计算机,一定会报错。所以打包镜像必须排除进程目录/proc和内核目录/sys

 --numeric-owner   总是以数字代表用户/组的名称(打包的镜像里面用户和组的名称和id一定不一样)

-cvf 创建可显示的文件,就是把/目录打包成tar包  

3.使用docker import导入至容器运行主机
 

 用scp命令把打包的基础镜像拷贝到另外一台主机的/root

docker import tar包名称 自定义名称

导入镜像成功之后docker images 查看或者 docker image ls

运行容器docker run -it --name 

 proc进程目录是容器本身的目录和镜像没关系

4.3、应用镜像

在基础镜像运行的容器中安装apache,如果报错就yum clean all再安装

然后使用commit提交镜像

docker commit 容器名称 自定义应用镜像名称:tag标签

 应用镜像就是在基础镜像运行的容器中安装软件,然后commit成一个应用镜像

运行应用镜像,也就是运行安装的软件对应的服务,永远杀不死,一直运行。

 

4.4、Dockerfile的关键字

FROM(指定基础image )
MAINTAINER(用来指定镜像创建者信息)

RUN(运行命令)
CMD(设置container启动时执行的操作)
如果容器镜像中有此命令,启动容器时,不要手动让容器执行其它命令

ENTRYPOINT(设置container启动时执行的操作)进入点
 USER(设置container容器的用户)
EXPOSE(指定容器需要映射到宿主机器的端口)暴露端口号

ENV(用于设置环境变量)
ADD(从src复制文件到container的dest路径)

VOLUME(指定挂载点)
WORKDIR(切换目录)

4.5、docker build 通过Dockerfile 创建应用镜像的过程分析

通过Dockerfile创建一个可以在启动容器时就直接启动httpd应用的镜像
步骤∶
1、创建一个文件夹(目录)
2、在文件夹(目录)中创建Dockerfile文件及其它文件

3、使用docker build命令创建镜像
4、使用创建的镜像启动容器


目的︰通过Dockerfile创建一个可以在启动容器时就直接启动httpd应用的镜像步骤︰
创建一个目录,用于存储Dockerfile所使用的文件
在此目录中创建Dockerfile文件及制作镜像所使用到的文件
在此目录中使用docker build创建镜像(读取Dockerfile文件)

使用创建的镜像启动容器

思考︰
1.基础镜像是谁? centos7u62.安装httpd
3.yum -y install httpd
4.安装完成后如何启动httpd?编写一个把httpd启动的脚本文件

5.把httpd放在前端执行还是后端执行?前端
6.暴露端口? tcp80
7.添加一个测试文件,用于验证httpd是否可用?
 

4.6、使用Dockerfile创建应用镜像

 创建一个test目录之后编辑一个脚本

vim run-httpd.sh

删掉apache的pid

前端运行httpd服务 foreground前景

 直接创建一个index.html

然后再创建Dockerfile文件

vim Dockerfile

注意必须把index.html 文件add到项目文件目录下面/var/www/html/

如果安装过程中报错还可以添加 rpm --rebuilddb  重建数据库

 

 使用docker build 创建应用镜像

-t 指定应用镜像的名称,自定义的需要tag

-d 后台运行应用镜像时不能在后面加 /bin/bash ,因为脚本中的CMD会被覆盖

验证直接用inspect 应用镜像id 查看IP,就能访问到写入的index.html内容

Dockerfile创建的 应用镜像更换项目内容

 在test目录创建一个目录挂载到项目目录就可以实现网站内容更换

 

4.6.1、Dockerfile工作原理

在Dockerfile定义所要执行的命令,使用docker build创建镜像,过程中会按照Dockerfile所定义的内容打开临时性容器(使用docker commit进行提交),把Dockerfile文件中的命令全部执行完成,就得到了一个容器应用镜像。

4.6.2、通过Dockerfile安装nginx应用镜像

 前提都是在docker服务器上有基础镜像

第一步:创建一个目录并在目录中创建相关的文件

 报错是因为echo '单引号'

第二步:vim Dockerfile

 第三步:通过docker build 创建nginx镜像

 镜像都是创建到当前目录的

容器是不支持做数据持久化的,所以才关闭nginx的后台运行,不关闭的话

容器会产生访问日志,只能收集,无法保存

docker images验证镜像是否创建成功

第四步:后台启动nginx应用镜像容器

 通过docker inspect 容器id 查看容器的ip

curl http://ip 访问容器的项目文件内容

五、docker存储数据的位置和方法

docker info 尽可能显示docker系统信息

 存储的驱动overlay2

 AUFS联合文件系统是乌班图   统一文件系统是CentOS

 容器镜像就是把系统的 /目录打包

下载镜像之后会发现镜像的存储位置是overlay2

 查看镜像可以diff看到根目录的结构

overlay2中的l文件本来是空的,但是创建镜像之后就会产生于软链接去挂载镜像

因为镜像的字符长度超了

 5.1 Overlay及Overlay2原理


OverlayFS将单个Linux主机上的两个目录合并成一个目录。这些目录被称为层,统一过程被称为联合挂载。OverlayFS底层目录称为lowerdir,高层目录称为upperdir。合并统一视图称为merged。当需要修改一个文件时,使用CoW将文件从只读的Lower复制到可写的Upper进行修改,结果也保存在Upper层。在Docker中,底下的只读层就是image,可写层就是Container。


overlay2是overlay的改进版,只支持4.0以上内核添加了Multiple lower layers in overlayfs的特性,所以overlay2可以直接造成muitiple lower layers不用像overlay一样要通过硬链接的方式(最大128层) centos的话支持3.10.0-514及以上内核版本也有此特性,所以消耗更少的inode

 本质区别是镜像层之间共享数据的方式不用

 overlay共享数据方式是通过硬连接
而overlay2是通过**每层的lower文件*

 overlay2这个目录存储的镜像及数据如果磁盘空间不够了可以

考虑去查找不需要的容器rm删除

docker运行后overlay2目录就会新增数据,运行前只有一条镜像数据


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/426213.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python算法设计 - McCarthy 91

目录一、什么是 McCarthy 91二、有什么用?三、Python算法实现四、作者Info一、什么是 McCarthy 91 McCarthy 91 是一个递归的函数表达式如下 函数的意思是当输入一个大于 100 的数字 n 时返回 n-10,而当输入一个小于等于101的数字 n 时递归的对 n 进行…

QT之widget窗口标题与项目构建目标位置修改

文章目录widget窗口标题修改方法一,直接通过UI界面修改方法二,通过代码修改结果展示,选择其中一种方法即可构建项目生成文件目标位置修改1. 首先选择——>项目,如图所示:2.打开后选择构建设置——>编辑构建位置&…

【VScode】手把手教你如何搭建C/C++开发环境

目录 1.VScode是什么 2.VScode的下载和安装 安装中文插件 3.VScode配置C/C开发环境 3.1 下载MinGW-w64 编译器套件 3.2 配置MinGW-w64 3.3 安装C/C插件 4.在VScode上编写C语言代码并编译成功 4.1打开文件夹 4.2 新建C语言文件,编写C语言代码 4.3设置C/…

vue3项目中使用pinia

vuex 4pinia 小菠萝 vuex和之前vue2使用一致 1.import { createStore } from vuex 引入文件不同vue3组件setup写法vuex提供了hook //组件中操作store import { useStore } from vuex //提交mutations 进行修改 store.commit(increment), //dispatch 触发action 同步或者异步提交…

【C】Process Control

系列连载 【python / C / C】 参考 《C语言程序设计(第四版)谭浩强》【C语言】C语言视频教程《郝斌 C 语言自学教程》 文章目录1 什么是流程控制2 流程控制的分类2.1 顺序执行2.2 选择执行2.3 循环执行2.3.1 for2.3.2 while2.3.3 do...while2.3.4 swi…

[ 汇编语言 (一) ] —— 踩着硬件的鼓点,掌握计算机的精髓

🙌秋名山码民的主页 😂一个打过一年半的oier,写过一年多的Java,现在致力于学习iot应用的普通本科生 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 🙏作者水平有限,如发现…

数据库系统工程师——第二章 程序语言基础知识

文章目录📂 第二章、程序语言基础知识 📁 2.1 程序语言概述 📖 2.1.1 程序语言的基本概念 📖 2.1.2 程序语言的基本成分 📁 2.2 程序语言翻译基础 📖 2.2.1 汇编程序基本原理 📖 2.2.2 编译程序…

算法之归并排序

文章目录一、归并排序(递归版)二、归并排序(非递归版)一、归并排序(递归版) 归并排序思想:将数组划分为两个区间,左区间,右区间 然后对这两个区间内容进行排序 &#xff…

一文讲懂C#、ASP.NET、ASP.NET MVC、ASP.NET web form、asp.net core mvc的区别

微软的命名很糟糕。技术上有两个框架:ASP.NET和ASP.NET Core,它们分别基于.NET Framework和.NET Core构建。 当Microsoft首次尝试创建一个遵循MVC模式的“现代”Web应用程序平台时,它将这个新平台称为“ASP.NET MVC”,以区别于以前…

【性能优化】cocoscreator 共享节点-动效复用方案

前言 迷雾散尽,露出了古朴庄严的森林。古老的铁杉,在头顶编成绿色穹顶。 阳光在树叶间破碎成金色顶棚。从树干间远眺,远处的森林渐渐隐去。 用几句话就能描述一片巨大的森林,但是在实时游戏中做这件事就完全是另外一件事了。 当屏…

[数据结构-C语言] 算法的时间复杂度

目录 1.算法的复杂度 2.时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 3、常见时间复杂度计算举例 3.1 冒泡排序 3.2 二分查找 3.3 阶乘递归 3.4 斐波那契数列 1.算法的复杂度 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 …

PS学习记录——自动选择的【图层】/【组】模式说明

PS中,【移动工具】状态下,上方的工具栏有个【自动选择功能】,用于移动图像 自动选择下有【图层】、【组】两种选项 1、自动选择-【图层】 图层模式下,自动选择可以任意移动选中的图像图层,想移动哪个就移动哪个 即便不…

43.CSS grid布局

本节我们学习的初始代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" …

110页智慧农业解决方案(农业信息化解决方案)(ppt可编辑)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 第一部分 智慧农业概述 智慧农业以农业资源为基础、市场为导向、效益为中心、产业化为抓手&#xff0c;面向农业管理部门、农技推广部门、农业企业、农业园区和基地、农业专家…

【C】Pointer

系列连载 【python / C / C】 参考 《C语言程序设计&#xff08;第四版&#xff09;谭浩强》【C语言】C语言视频教程《郝斌 C 语言自学教程》 文章目录一、指针的重要性二、指针的定义三、指针的分类基本类型指针指针和一维数组指针和函数指针和结构体多级指针int * p;// p …

CASS自带数据-绘制地形图

1、打开cass软件&#xff0c;如下图&#xff1a; 2、点击“绘图处理”菜单栏&#xff0c;选择“展野外测点点号”&#xff0c;如下&#xff1a; 3、在命令栏输入绘图比例尺&#xff0c;这里选择默认1:500&#xff0c;点击回车键进入下一步&#xff0c; 4、在弹出的窗口中&#…

单片机通过串口向电脑端发送数据电脑端发送数据控制led

上节课我们学习了串口的理论部分&#xff0c;这节课我们要来学习实操部分。 要想实现单片机通过串口向电脑端发送数据&#xff0c;我们首先要来配置寄存器。 1.配置SCON SCON寄存器中的SM0配置为0&#xff0c;SM1配置为1决定了串口工作在模式一&#xff0c;也就是8位UART&am…

前端透明分栏设计

目前在开发一个基于众包的打分网站&#xff0c;前端遇到的一个需求是&#xff1a; 背景是电影的海报&#xff0c;且不能随着scroll-bar滚动&#xff0c;需要一个蒙版分为两栏&#xff0c;左侧是影视的媒体信息&#xff0c;不随页面滚动右侧是影视的基本信息和评分信息&#xf…

如何使用基于GPT-4的Cursor编辑器提升开发效率

程序员最恨两件事情&#xff1a;一是别人代码不写文档&#xff0c;二是要让自己写文档。随着 GPT-4 的到来这些都不是问题了&#xff0c;顺带可能连程序员都解决了。。。 之前一直觉得 AI 生成的代码也就写个面试题的水平&#xff0c;小打小闹&#xff0c;现在时代可变了。Curs…

@Conditional四个较常用的派生注解总结

该内容是在学习SpringBoot底层的时候&#xff0c;看到SpringBoot的使用&#xff0c;所以这的做一个简单的总结方便以后复习。可能会有一些问题&#xff0c;还望指出共同学习 Conditional注解&#xff1a; 作用&#xff1a;按照一定的条件进行判断&#xff0c;在满足给定条件后…