docker容器

docker容器

一、docker容器是什么

软件的打包技术,就是将算乱的多个文件打包为一个整体,打包技术在没有docker容器之前,一直是有这种需求的,比如上节课我把我安 装的虚拟机给你们打包了,前面的这种打包方式是将整个虚拟机打包了,对吧,这样打包出来的体积太大了,而且如果你只是单纯的想要 一个安装好的程序,比如sqlserver数据库,不想自己安装,就想要个安装好的,按照之前的打包方式,太费事费力的,你打包个安装了 sqlserver数据库的虚拟机,光虚拟机本身的操作系统可能就占用了20个G,sqlserver本身可能也就1个G,这是不是就太不合适了,当然 我们自己不会或者不想安装sqlserver的时候,可以选择找个哥们帮你安装一下,但是如果100个人都找你安装,你是不是累死了,所以在 这种情况,容器技术就诞生了,容器技术中的依依者,就是docker,它的底层实现原理我们现在不用纠结。用它来打包出来的软件,体积 会非常小。比如如果在一个虚拟机上安装了nginx,那么这个虚拟机怎么也要1G以上,但是用docker打包的已经安装好的nginx,可能也 就100M左右,体积小很多。接下来我们感受一下docker的使用。后面我们可以将很多部署起来很繁琐的靶场环境都通过docker来打包。 所以现在网上也有很多使用docker跑起来的靶场,复用性非常好,别人打包好的,你直接拿来就用。而且docker有个东西叫做仓库,打 包的东西直接放在仓库里面,全世界都可以共享。docker是2013年诞生的。

docker打包出来的每个软件,称之为docker镜像。可以说整个IT领域,不管是哪个工种,都需要好好学习docker。

docker是CS架构的程序,客户端控制服务端来做各种事情。

image-20260319145717347

二、docker的安装

centos用yum安装,kali用apt安装,kali属于debian系列的操作系统

CentOS7安装docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# centos7上面用yum安装
yum install docker -y
#启动docker
systemctl start docker
#设置开机自启
systemctl enable docker

#体验docker版nginx最新版
docker run -d -p 80:80 nginx
#体验docker版nginx 1.16
docker run -d -p 81:80 nginx:1.16

#体验wordpress
docker run --name mysql -e MYSQL_ROOT_PASSWORD=1234565 -d mysql:5.7
docker run -d --link mysql:mysql -p 86:80 wordpress:5.6

Kali安装docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#添加docker的gpg密钥,签名用的(连接docker仓库所需要的密钥)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
wget https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg
apt-key add gpg

#添加docker的apt源
vi /etc/apt/sources.list
以下内容替换文件里的所有内容
deb [trusted=yes] http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb [trusted=yes] http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb [trusted=yes] http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb [trusted=yes] http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

#更新apt缓存
apt update

#安装docker
sudo apt-get instal1 docker docker-compose -y

sudo apt-get install docker.io

#安装完成之后,docker就自动启动了
systemctl status docker

#查看docker版本
docker -v

网络安全有一项工作叫做漏洞复现,有些软件、框架、webserver等等他们某些版本会有各种漏洞,官方看到之后肯定会修复升级,但是
某个使用了这些软件的公司可能并没有升级,那么就需要我们检测一下是否真的存在这个漏洞,不能直接再生产环境上去测试,需要在测
试环境或者开发环境或者自己搭建的环境中进行漏洞测试,这就是漏洞复现的工作。所以我们好多时候都需要自己来搭建相同版本的软件
环境来进行漏洞复现,搭建的环境的时候我们就可以使用docker,很方便。

1
2
3
4
5
6
#用docker下载安装最新版本的nginx
#前面的80端口是主机的80端口,后面的80端口是docker容器的80端口。
docker run -d -p 80:80 nginx

#后面可跟版本号,若不跟则默认是最新版本
docker run -d -p 80:80 nginx:1.16

这里需要使用国内的镜像加速器

1
2
#编辑配置文件
sudo nano /etc/docker/daemon.jason

复制以下内容到文件里

1
2
3
4
5
6
7
8
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://huecker.io",
"https://dockerhub.timeweb.cloud",
"https://noohub.net"
]
}

保存重启docker服务

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

验证是否生效,执行 docker info,在输出中查看 Registry Mirrors 列表是否包含了你刚才配置的地址。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#体验wordpress,需要启动两个docker镜像,一个数据的,一个代码程序,这个比较大,所以速度可能会慢一些
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 # 5.7版本的MySQL,镜像名称是mysql
docker run -d --link mysql:mysql -p 86:80 wordpress:5.6
#5.6版本的wordpress,最新版本应该已经到了6.x了,但是值得说明的一点就是封装wordpress的人为了将镜像做的比较小,没有安装中文包,所以只能是看英文的了,他会自动连接数据库。如果你发现你安装的镜像不是你要的版本,那么可能是版本指定错误了,或者是官方镜像仓库中的wordpress镜像版本有点问题了。

#可以更改docker镜像库的源
cd /etc/docker
vim docker.json
#添加如下内容,并保存退出
{
"registry-mirrors":["https://registry.docker-cn.com"]
}
#可以重启docker服务
systemctl restart docker
systemctl start docker
systemctl enable docker
systemctl stop docker

docker run首先检测本地是否已经有了软件镜像,如果没有,它会自动去下载镜像,然后运行,运行起来的镜像,我们称之为容器,可以理解为每个软件都安装在了一个自己的小空间里面。

docker 镜像 容器

镜像——>安装了某些特定程序的文件——>压缩文件

容器——>镜像运行起来之后,就叫做容器(而不叫进程)

三、镜像常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
docker search
#搜索镜像(只会搜索官方仓库的,官方仓库地址:hub.docker.com)
# docker search tomcat
# docker search apache
# 拉取的镜像tomcat\apache等名宇很短,这都是官方仓库中的官方镜像,官方仓库中支持用户上传自已封装的镜像,用户镜像和官方镜像的差别在名字上面,比如我们可以去docker官方去注册一个账号,用户白己的镜像前面都会有作者的用户名或者用户所在组织的名字,比如jaden/nginx、jaden/tomcat等。

docker images
#查看本地镜像列表,image就是镜像的意思
#本地有的镜像,就不用再去下载了,而且可以将本地镜像导出来分享给其他人

docker pull
#下载镜像,拉取镜像
# docker pull tomcat:latest
# docker images

docker push
#上床镜像,推送镜像,推到官方仓库(需要本地登录一下官方仓库才能推送)

docker rmi
#删除镜像,rm image的意思,直接rm不加i表示要删除容器,可以通过名称加版本来删除,或者直接通过镜像id值来删除