热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

关于docker技术的学习

一、docker的介绍1、什么是dockerDocker是一种轻量虚拟化的容器技术,提供类似虚拟机的隔离功能。Docker容器将软件以及它运行安装所需的一切文件(代码、运行时、系统

一、docker的介绍


1、什么是docker

Docker是一种轻量虚拟化的容器技术,提供类似虚拟机的隔离功能。 Docker 容器将软件以及它运行

安装所需的一切文件(代码、运行时、系统工具、系统库)打包到一起,这就保证了不管是在什么样的

运行环境,总是能以相同的方式运行。一次镜像,处处运行。

每个容器内运行一个应用,不同的容器之间相互隔离,容器之间也可以建立通信机制。容器的创建和停

止都十分快速,资源需求远远低于虚拟机。


2、Docker与虚拟机的比较


传统虚拟机技术:

虚拟机(Virtual machine)就是带环境安装的一种解决方案。

传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统(如Vmware和VirtualBox),创建虚拟机

(虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用程序。应用程序

对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文

件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,

操作系统和硬件三者之间的逻辑不变。

简言之,传统虚拟化方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。





















Win10VMWareCentos7各种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

靶场部署成功。



推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • (九)Docker常用安装
    一、总体步骤1、搜索镜像2、拉取镜像3、查看镜像4、启动镜像5、停止镜像6、移除镜像二、安装tomcat1、dockerhub上面查找tomcat镜像 dockersearchto ... [详细]
  • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
  • mysql自动打开文件_让docker中的mysql启动时自动执行sql文件
    本文提要本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动My ... [详细]
  • docker增加restart=always, docker重启后自动启动容器的方法
    本文介绍了在运行docker容器时如何添加参数来保证每次docker服务重启后容器也自动重启的方法,以及如何使用命令来更新已启动的容器。 ... [详细]
  • 处理docker容器时间和宿主机时间不一致问题的方法
    本文介绍了处理docker容器时间和宿主机时间不一致问题的方法,包括复制主机的localtime到容器、处理报错情况以及重启容器的步骤。通过这些方法,可以解决docker容器时间和宿主机时间不一致的问题。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 开发笔记:Docker 上安装启动 MySQL
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker上安装启动MySQL相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 本文介绍了Python函数的定义与调用的方法,以及函数的作用,包括增强代码的可读性和重用性。文章详细解释了函数的定义与调用的语法和规则,以及函数的参数和返回值的用法。同时,还介绍了函数返回值的多种情况和多个值的返回方式。通过学习本文,读者可以更好地理解和使用Python函数,提高代码的可读性和重用性。 ... [详细]
  • 本文介绍了Cocos2dx学习笔记中的更新函数scheduleUpdate、进度计时器CCProgressTo和滚动视图CCScrollView的用法。详细介绍了scheduleUpdate函数的作用和使用方法,以及schedule函数的区别。同时,还提供了相关的代码示例。 ... [详细]
author-avatar
kshen24
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有