首页 > 其他分享 >关于docker技术的学习

关于docker技术的学习

时间:2022-11-30 12:12:35浏览次数:72  
标签:容器 虚拟机 sudo 学习 关于 镜像 docker Docker

一、docker的介绍

1、什么是docker

Docker是一种轻量虚拟化的容器技术,提供类似虚拟机的隔离功能。 Docker 容器将软件以及它运行
安装所需的一切文件(代码、运行时、系统工具、系统库)打包到一起,这就保证了不管是在什么样的
运行环境,总是能以相同的方式运行。一次镜像,处处运行。
每个容器内运行一个应用,不同的容器之间相互隔离,容器之间也可以建立通信机制。容器的创建和停
止都十分快速,资源需求远远低于虚拟机。

2、Docker与虚拟机的比较

传统虚拟机技术:

虚拟机(Virtual machine)就是带环境安装的一种解决方案。
传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统(如Vmware和VirtualBox),创建虚拟机
(虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用程序。应用程序
对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文
件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,
操作系统和硬件三者之间的逻辑不变。
简言之,传统虚拟化方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。

Win10 VMWare Centos7 各种cpu、内存网络额配置+各种软件 虚拟机实例

虚拟机的缺点:

1  资源占用多
2  冗余步骤多
3  启动慢
容器虚拟化技术

由于前面虚拟机存在某些缺点,Linux发展出了另一种虚拟化技术:
操作系统级的虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。docker
以及其他容器技术就属于此范畴。
容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部
文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具
有可移植性和一致性。
Linux 容器不是模拟一个完整的操作系统而是对进程进行隔离。有了容器,就可以将软件运行所需的所
有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所
需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机操作系统,体积小,运行速度快。
//每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资
源。

image-20221130090843672

3、虚拟机与容器之对比

1-传统虚拟化方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。 而docker容器是在操作系统层面上实现虚拟化,直接复用本地主机操作系统,更加轻量。

2- 容器和宿主机共享内核,如果容器中的应用导致Linux内核崩溃,那么整个系统可能就会崩溃。这与虚拟机是不同的。虚拟机并没有与主机共享内核 ,虚拟机崩溃一般不会导致宿主机崩溃。

image-20221130091135345

4、要素

Docker的三大核心概念:镜像、容器、仓库

镜像:类似虚拟机的镜像、用俗话说就是安装文件。 iso image

容器:类似linux系统环境,运行和隔离应用。容器是从镜像创建应用运行实例,可以将其启动、开始、停止、删除、而这些容器都是相互隔离、互不可见的。容器从镜像启动的时候,docker会在镜像的最上一层创建一个可写层,镜像本身是只读的,保持不变。

img

仓库:类似代码仓库,是Docker集中存放镜像文件的场所。

三者的关系

image-20221130091511408

5、工作原理

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,就是我们前面说到的集装箱。可以对比mysql。

image-20221130091605995

image-20221130091634762

二、docker部署

1.docker常用命令

启动docker:
$sudo systemctl start docker
$sudo systemctl enable docker

卸载docker,容器
yum remove docker-ce  //删除安装包
rm -rf /var/lib/docker //删除镜像、容器、配置文件等内容
sudo docker rm -f CONTAINER ID //删除指定容器
sudo docker container prune //删除所有处于终止状态的的容器
sudo docker system prune -a //删除所有镜像

搜索镜像 :
docker search 关键字

获取镜像:
docker pull  仓库名称[:标签]

查看获取的镜像信息:
docker images

创建容器并运行·:
docker run --name 容器名 -d -p 9002:80 镜像
sudo docker start  CONTAINER ID //启动已停止的容器
docker start 容器id  //启动容器

查看容器状态:
docker ps    #查看正在运行的容器
docker ps -a  #查看所有容器

进入容器
docker exec -it 容器ID/名称    /bin/bash
或
docker exec -it 容器ID/名称    sh

退出容器
exit

停止容器:
sudo docker stop CONTAINER ID

将文件从主机复制到docker
sudo docker cp file CONTAINER ID:Destination_directory



下面是进行docker安装已经靶场的安装测试

2.1 安装docker。

2.1.1 使用官方安装脚本自动安装
安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh
2.1.2 手动安装

安装 Docker Engine-Community

使用 Docker 仓库进行安装

设置仓库

安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

image-20221129113051520

使用以下命令来设置稳定的仓库

使用官方源地址(比较慢)
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
可以选择国内的一些源地址:

阿里云
$ sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
清华大学源
$ sudo yum-config-manager \
    --add-repo \
    https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

image-20221129113853397

2.2 安装Docker Engine-Community

命令:

$ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

image-20221129114106123

2.2.1 docker启动
$sudo systemctl start docker
$sudo systemctl enable docker

通过运行 hello-world 镜像来验证是否正确安装了 Docker Engine-Community 。

$ sudo docker run hello-world

image-20221129114330791

2.3卸载docker

卸载 docker

删除安装包:

yum remove docker-ce

删除镜像、容器、配置文件等内容:

rm -rf /var/lib/docker

2.4利用docker技术部署靶场

1.搜索镜像
命令:docker search 关键字

使用docker search命令搜索官房仓库中的共享镜像。

image-20221129114946858

2.获取镜像
命令:docker pull  仓库名称[:标签]
对于Docker镜像来说,如果下载镜像时不指定标签,默认会下载仓库中最新版本的镜像,即选择
标签latest。
[root@Samba-hhn1~]#docker pull area39/pikachu

image-20221129164449537

镜像加速
  1. 镜像加速
    镜像拉取速度慢,可以使用镜像加速
    
    1. 打开docker/daemon.json
       vi /etc/docker/daemon.json
    2. 指定镜像
       {
         "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
       }
       
       ailiyuun:https://个人ID.mirror.aliyuncs.com
    3. 重启docker
       systemctl daemon-reload
       systemctl restart docker
       
    

阿里云镜像加速获速获取:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrorsimg

查看获取的镜像信息
#:docker images

image-20221129165008233

创建容器并运行
[root@Samba-hhn1~]#docker run --name piakchu -d -p 9002:80 area39/pikachu
//CentOS8下需要开户

image-20221129165245049

image-20221129165509070

docker run 命令创建窗口时,Docker在后台的标准运行过程如下。
(1)检查本地是否存在指定的镜像,若镜像不存在,会从公共仓库下载。
(2)利用镜像创建并启动一个容器。
(3)分配一个文件系统给容器,在只读的镜像层外面挂载一个可读写层。
(4)从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中。
(5)分配一个地址池中的IP地址给容器。
(6)执行用户指定的应用程序。
docker run常见参数
-d:让容器在后台运行。
-p9002:80,容器的80端口,映射到宿主主机的9002端口。
-P:将容器内部使用的网络端口随机映射到我们使用的主机上。

image-20221129165645473

开启IPV4转发功能
vim /usr/lib/sysctl.d/00-system.conf
#添加如下代码:
net.ipv4.ip_forward=1
重启网卡
systemctl restart network
映射多个端口
[root@Samba-hhn1~]#docker run --name piakchu2 -d -p 9003:80 -p 3306:3306 area39/pikachu
//再创建一个Pikachup容器,将MySQL的3306端口也映射到宿主机上,可以从外网访问MySQL服务

image-20221129170123198

查看容器的运行状态
docker ps    #查看正在运行的容器
docker ps -a  #查看所有容器
[root@Samba-hhn1 ~]# docker ps -a

image-20221129170257091

启动容器:
runoob@runoob:~#docker start 474e431cc706//启动容器
进入容器
命令格式:docker exec -it 容器ID/名称    /bin/bash
另一种进入终端的格式:
docker exec -it 容器ID/名称    sh

image-20221129170540710

image-20221129170636958

如果缺少终端则会报错

image-20221129170758684

--docker run 和 docker exec 的差异
docker run :根据镜像创建一个容器并运行一个命令,操作的对象是镜像;
docker exec :在运行的容器中执行命令,操作的对象是容器。
docker run的操作过程:
runoob@runoob:~#docker pull training/webapp#载入镜像
runoob@runoob:~#docker ps -a
runoob@runoob:~#docker start 474e431cc706//启动容器
docker exec的操作过程:
runoob@runoob:~#docker exec- it 474e431cc706 /bin/bash
退出容器
exit
停止容器
sudo docker stop CONTAINER ID
将文件从主机复制到docker
sudo docker cp file CONTAINER ID:Destination_directory
windows访问测试:

image-20221129171417596

靶场部署成功。

2.5使用Vulhub一键搭建漏洞测试靶场

1.安装工具
yum install -y python3
curl -s https://bootstrap.pypa.io/pip/3.6/get-pip.py | python3
pip install docker-compose
安装pip:
yum install -y epel-release
yum-config-manager --enable epel
yum install python-pip

image-20221130115409557

image-20221130115454128

网站下载漏洞源码:https://vulhub.org/#/docs/download-vulhub/

传入centos7,解压

进入随机一个漏洞的目录下面

cd flask/ssti

image-20221130115716468

安装docker-compose命令命令
1、curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose      //下载最新版的 docker-compose 二进制执行文件。
2、chmod +x /usr/local/bin/docker-compose  //chmod +x /usr/local/bin/docker-compose
3、docker-compose --version        

image-20221130115900684

编译漏洞环境
docker-compose up -d

image-20221130120006248

访问测试

http://ip:8000/?name={{2*2}}

image-20221130120119892

部署成功

标签:容器,虚拟机,sudo,学习,关于,镜像,docker,Docker
From: https://www.cnblogs.com/GTL-JU/p/16938028.html

相关文章

  • java学习笔记DOM4J解析(7)
    DOM4J即DocumentObjectModelforJava使用java技术以文档方式解析XML数据的模型。DOM4J是开源组织提供的一个免费的、强大的XML解析工具,如果开发者需要在项目中使用那么需......
  • Java学习笔记XML(3)
    XML简介XML即可扩展的标记语言。因此该语言中所有的标签都是没有预先定义的,开发者可以自己随意的指定。目前为止所有的标记的语言都属于开源的语言。由W3C组织进行一个基本......
  • WDA学习(26):Phase Indicator使用
    1.19UIElement:PhaseIndicator使用本实例测试创建PhaseIndicator;运行结果: 1.创建Component,View:V_PHASE_IND;2.创建Context节点;创建NODE:NODE_PHASE_STATUS,......
  • WDA学习(27):RoadMap使用
    1.20UIElement:RoadMap使用本实例测试创建RoadMap;运行结果:点击2,Input显示输入航班Id 点击3,根据input输入,查询航班信息 1.创建Component,View:V_ROADMAP;2.......
  • PS学习的一些快捷键
    Ctrl+T调整对象大小,尺寸角度等Ctrl+Del填充背景色Ctrl+D取消对象选择Alt+Del填充前景色Alt......
  • 个人翻译Introduction to Linear Algebra, 5th Edition 9.2节(仅用于交流学习,非盈利)
    本书的翻译仅为交流学习!才疏学浅,不当的地方还望指正。请勿于其它用途!PDF文件 链接一:   https://pan.baidu.com/s/1a3L_TIETS7onC38F2qE_OQ提取码:teh5 链接二:htt......
  • 怎样找到更好的学习资源
    怎样去找更好的学习资源。说到这个问题,我就想起一个很有意思的社会新闻:有一个年轻人,在北京打拼了几年之后,回到了自己的家乡。这是一个还算不错的三线城市,她也找到了一份比较......
  • Ant Design Pro 学习 (1) - 创建项目
    AntDesignPro学习(1)-创建项目前言我是.NET出身,前端只熟悉HTML+JQuery+CSS。一天忽然有了心思要做一个.NETCore+React前后端分离的网站,后端相对熟悉一些,学习成......
  • 李宏毅机器学习笔记:从0到写AI
    part1.基本介绍1.机器学习的三个任务一般情况下,我们在机器学习中有三个基本任务,分别是RegressionClassification和StructuredRegression是计算数值解而Classification......
  • 记一次开发:关于在口译模块中修改对讲和广播的逻辑中出现的问题,和如何在主框架中插入应
    一、记一次不是很理想的Debug这次改bug改的我心力憔悴,本以为是很简单的功能,结果改了整整两天,因为担心错过现场的问题急得晚上觉都没睡好,最后也才改了几行代码,陶工也看了半......