【网络安全---docker】kali上安装docker,CentOS上安装docker,docker命令详解
学网安的A 2024-07-03 11:07:04 阅读 58
首先分享一个自己做的很不错的网路安全笔记,内容详细介绍了许多知识
分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取:
超详细的网络安全学习笔记
https://m.tb.cn/h.gU0B0pz?tk=fx3VWyN8gIa%20HU0025
不知道怎么获取的可以私信联系我,欢迎技术交流!
一,docker概念理解
1-1 docker是什么?
docker是一个软件,是一个运行与linux和windows上的软件,用于创建、管理和编排容器;docker平台就是一个软件集装箱化平台,是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,也可以实现虚拟化,并且容器之间不会有任何接口。
我们一般安装软件的步骤是 下载压缩包----解压----安装-----运行,有时候我们觉得繁琐,效率不高,有没有一种技术可以快速安装运行软件呢,所以docker技术给我们提供了这样的便利
1-2 什么是镜像?
docker 远程镜像仓库网址:
https://hub.docker.com/
https://hub.docker.com/
镜像就是别人安装好软件,我们可以直接从远程镜像仓库下载,运行,免去了解压流程;
下载到本地的叫本地镜像(images),下载好的镜像运行以后就叫容器(container);
或者远程镜像可以直接一个命令下载直接运行成容器;
1-3 什么是容器
镜像运行之后就叫容器
1-4 docker客户端和服务端
我们安装docker时客户端和服务端一起安装了,启动客户端以后可以用docker命令操作服务端从远程镜像仓库下载镜像,然后运行
二,docker安装
1-1 CentOS中安装docker
<code># centos7上面用yum安装
yum install docker -y
#启动docker
systemctl start docker
#设置开机自启
systemctl enable docker
1-2 Kali上安装docker
#添加docker的gpg密钥,签名用的
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -
#添加docker的apt源
echo 'deb https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/ buster stable' | sudo tee /etc/apt/sources.list.d/docker.list
#更新apt缓存
apt update
#安装docker
sudo apt-get install docker docker-compose -y
或
sudo apt-get install docker.io
#安装完成之后,docker就自动启动了
systemctl status docker
#查看docker版本
docker -v
我在kali2022主机上进行演示安装
1,添加docker的gpc秘钥,签名用的
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -
Warning 不用管,看到OK就说明成功了
2,添加docker的apt源
<code>echo 'deb https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/ buster stable' | sudo tee /etc/apt/sources.list.d/docker.list
3,更新apt缓存
<code>apt update
4,安装docker 和 docker-compose
注:root用户不用加sudo
用apt-get install docker.io 安装 docker
<code>## 安装docker
sudo apt-get install docker.io
## 安装docker-compose
apt-get install docker-compose -y
用 apt install docker-compose
5,查看版本
<code>docker -v
docker-compose -v
三,docker 镜像 常用命令
3-1 docker run 命令
用于从远程仓库下载镜像,并直接运行(一个命令就可以下载,运行)
-p 端口映射 #例子: -p 宿主机端口:容器端口
--name 指定容器的名字 # docker run -it --name jaden 镜像id或者名称
--link 关联另一个容器 # 了解即可
-e MYSQL_ROOT_PASSWORD #设置容器的一些属性,了解一下即可
-it #是给运行起来的这个容器分配一个终端,就可以进入到容器内部操作了
3-1-1 案例:下载Nginx并运行
-d ## 后台运行
-p ## 指定端口映射
因为每个镜像他都是有自己的端口的比如nginx镜像默认是80端口,这个端口跟本机端口是两回事,我们需要用本机的端口进行映射,比如把本机80端口映射到Nginx的80端口;
<code>docker run -d -p 80:80 nginx
Nginx已经下载好,并运行起来了
浏览器访问192.168.31.20:80
3-1-2 下载指定版本的ngixn
注意:本机的80端口映射给了上一个下载的Nginx,这个1.16版本的话本机81端口映射给镜像的80端口
<code>docker run -d -p 81:80 nginx:1.16
Nginx1.16 已经下载好,并运行起来了
浏览器访问192.168.31.20:81
大家有没有发现下载的时候有一句提示
Unable to find image "nginx1.16" locally
是因为docker run命令下载镜像的时候先判断这个镜像在本地存不存在(有没有已经下载好),如果没有则从远程仓库下载,如果本地有,则直接运行本地下载好的镜像
3-2 docker search 命令
用于搜索镜像,有时候想下载镜像,但想看看有有哪些镜像,就可以用这个命令去查看
<code>docker search nginx
docker search httpd
docker search mysql
下载的时候就可以下载自己想下载的镜像了,比如
<code>docker run -d -p 3306:3306 mariadb
# 不指定版本号默认下载最新的
3-3 docker images 命令
查看本地镜像列表(下载了哪些镜像)
因为我就下了两个,所以就显示两个
有个 IMAGE ID 就是这个镜像的ID值
3-4 docker pull 命令
(docker run 命令时下载直接运行镜像,而我们只想下载,不想运行怎么办?)
docker pull 作用把远程镜像拉取到本地
<code>docker pull httpd
如果不指定版本号默认下载最新版本
docker imges 查看发现已经下载到本地了
3-5 docker push 命令
#上传镜像,推送镜像,推到官方仓库,推送不是那么简单的,不然早就满了,需要在本地登录一下官方账号才能推,后面再演示
感兴趣自己了解一下吧,不多讲了,docker 镜像仓库网址
https://hub.docker.com/
3-6 docker rmi 命令
remoove iamge 删除本地镜像(注意已经运行的镜像不能删除,比如我删除已经运行的nginx)
<code>docker rmi nginx:1.16
报错了说这个镜像不能删除,因为容器42ccd25441d9 是 被镜像 dfcfd8e9a5d3 运行起来的 ;
镜像 dfcfd8e9a5d3 指的是 nginx:16(docker images 可以查看镜像ID) ,他运行起来以后叫容器 分配容器ID;
注意:镜像是镜像,容器是容器,不是说镜像运行起来以后身份变了成了容器;而是镜像运行起来以后镜像还在,可以说产生了一个容器,所以说一个镜像可以运行多个独立的容器
删除镜像可以用名字,也可以用他的IMAGE ID
<code>docker rmi httpd
或
docker rmi 7860e7628717
可以同时删除多个镜像:
格式就是如下,通过空格隔开可以删除多个容器
<code>docker rmi tomcat:latest tomcat:jre17-temurin-jammy httpd mysql
3-7 docker save
导出镜像,如果我们想要把镜像导出,放到另一个主机里导入然后运行,比如:
docker save nginx:1.16 -o docker.nginx1.16.tar.gz
3-8 docker load
导入镜像,可以导入导出的镜像,
注:因为我nginx:1.16 一直运行这而且已经在本地存在,所以我得删除才能导入,要不然呢或冲突的
已经删除了nginx:1.16 现在可以导入刚才导出的了(会自动解压的)
<code>docker load -i docker.nginx1.16.tar.gz
四,docker 容器 常用命令
4-1 docker run
run 作用不仅是从远程仓库下载并运行镜像,我们说过他会先判断这个镜像在不在本地,不在本地的话再从远程仓库下载运行,所以本地镜像可以也用run 命令运行
比如说运行刚导入的nginx:16
<code>docker run -d -p 83:80 nginx:1.16
已经运行起来了,可以访问看看
4-2 docker ps
查看已经运行的容器列表
docker ps =========== docker container ls
-a ## all 的意思,显示所有容器(运行起来以后停掉的也算容器)
CONTAINER ID : 容器ID,删除容器都是通过ID或者NAMES删除的;
IMAGES:镜像,就是从哪个镜像启动的
CREATED:什么时候创建的
STATUS:状态,up 表示在运行,Exited表示停止运行了,上面Nginx1.16有两个说明一个镜像可以多次运行称为多个容器;
NAMES:表示镜像列表,运行的时候可以--name参数起名字,如果不起名字就随机分配一个名字;我们没有起名字所以NAMES都是随机的
-q ## 只显示容器的ID
docker ps -a ## 列出所有容器的详细信息(已经运行的+运行完停掉的)
docker ps -q ## 只列出容器的ID号
docker ps -a -q ## 列出所容器的ID号
4-3 docker stop
停止运行的容器(只能根据container ID 或者 NAMES 删除)
<code>docker stop c0a4f676add2
表示停止成功了
停止所有在运行的容器
<code>docker stop `docker ps -q`
4-4 docker start
启动容器(根据容器的ID或者名字)
先 docker ps -a 查看一下,哪些容器没启动,全都没启动,因为上一步我用 docker stop `docker ps -q`停掉了所有容器
<code>docker start e932acc39242
docker ps 查看一下有没有启动成功,发现已经启动了,就在 15秒之前
4-5 docker restar
重启容器(根据容器的ID或者名字)
<code>docker restart e932acc39242
4-6 docker rm
删除容器,只能删除已经停掉的容器(docker rm -f 强制删除也能删除在运行的容器)
先 docker ps -a 查看所有容器,根据ID号(或者NAMES)删除没在运行的容器
docker rm 容器id或者容器名字,同时删除多个,就空格隔开,处于up状态是不能直接删除的,强制删除是可以删除up状态的容器的
docker rm -f `docker ps -a -q` #删除所有容器,-q是只显示容器id,反引号中的指令优先执行
4-7 docker top
查看容器内的进程(根据容器的ID或者名字)
4-8 docker stats
查看容器的资源占用情况
<code>docker stats e932acc39242
4-9 docker exec
进入容器内部
docker exec -it 容器id或者容器名字
# 直接交互指令:docker exec -it 76738703b7b2 ls # 执行ls指令
# 进入终端:docker exec -it 76738703b7b2 /bin/bash或者/bin/sh #/bin/bash打开一个终端窗口,exit指令退出终端,但是docker容器内容一般不会安装额外的软件,所以导致大量的指令是用不了的,比如ifconfig、ps、ip addr等
五, docker-compose
5-1 docker-compose 配置文件
一般项目中一个容器还不够,则需要多个容器,难道就一个个下载,运行吗?这样还是麻烦,有没有一种办法,同时启动多个容器呢?那就是通过docker-compose 技术可以做到同时启动多个容器
<code>yum install epel-release.noarch -y
yum install docker-compose -y
#kali安装docker-compose
apt install docker-compose -y
# 查看版本
docker-compose -v
这里给大家补充个点 systemctl restart docker 重启docker服务会自动关闭所有的容器。
#启动容器的时候,如果加上了--restart=always,那么重启服务之后,这个容器会自动启动
docker run -it -d --restart=always nginx:1.16 # 实现了开机自启动的效果
想要启动多个容器,则需要配置一个docker-compose.yml文件
# 为了避免端口冲突,我们可以先关闭所有docker容器
docker stop `docker ps -a -q`
# 为了演示方便,我们可以先创建一个wordpress文件夹,进入到里面创建一个docker-compose.yml名字的文件
mkdir wordpress
cd wordpress/
touch docker-compose.yml
vim docker-compose.yml
# 将如下内容拷贝到文件中保存退出,注意拷贝的时候,把里面我标记的注释去掉。
# 注意,下面这个文件内容是严格要求格式的,多一个空格都不行,通过缩进来表示等级关系,下面的这种配置语法叫做yaml语法
version: '3' # 版本随便起名字
services: ## 固定格式
db: #容器名称,可以随便指定名字
image: mysql:5.7
restart: always # 开机自启动的意思
environment: ## 一些配置参数
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: 123456 # 和下面的WORDPRESS_DB_PASSWORD值要对应上
wordpress:
depends_on: ## 对db容器关联,因为wordpress需要数据库
- db
image: wordpress:5.6
ports:
- "83:80" # 端口映射
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: 123456
5-2 docker-compose 常用命令
#创建并启动
docker-compose up -d # 启动之后就可以通过浏览器访问了
#停止并删除
docker-compose down
#重启
docker-compose restart
#停止
docker-compose stop
#启动
docker-compose start
有了docker-compose.yml配置文件,可以使用docker-compose up -d 指令按照配置文件里的容器和配置项去下载,执行相应的容器
注意:执行 docker-compose up -d 的时候必须在这个配置文件路径下运行,如果别的路径则不能识别出来,
创建一个wd文件夹,进入以后vim docker-compose.yml(这个文件夹不存在的,会自动创建)
把配置内容复制粘贴到里面
查看配置好的内容
然后就在有docker-compose.yml目录下运行即可
yml语法格式校验很严格的,我的估计格式有问题,所以报错了,大家可以自行百度一下其格式;
配置文件格式无误后,可以按照配置文件下载相应镜像并运行起来了,项目中通过这个方法,可以很便捷的启动我们需要的容器了;
关于docker常见操作就这些,如果遇到问题欢迎留言,或者技术交流
首先分享一个自己做的很不错的网路安全笔记,内容详细介绍了许多知识
分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取:
超详细的网络安全学习笔记
https://m.tb.cn/h.gU0B0pz?tk=fx3VWyN8gIa%20HU0025
不知道怎么获取的可以私信联系我,欢迎技术交流!
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。