【网络安全---docker】kali上安装docker,CentOS上安装docker,docker命令详解

学网安的A 2024-07-03 11:07:04 阅读 58

  

首先分享一个自己做的很不错的网路安全笔记,内容详细介绍了许多知识

分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取:

超详细的网络安全学习笔记

icon-default.png?t=N7T8

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/

icon-default.png?t=N7T8

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 命令

用于从远程仓库下载镜像,并直接运行(一个命令就可以下载,运行)

<code>-d  #放后台运行

-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常见操作就这些,如果遇到问题欢迎留言,或者技术交流

首先分享一个自己做的很不错的网路安全笔记,内容详细介绍了许多知识

分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取:

超详细的网络安全学习笔记

icon-default.png?t=N7T8

https://m.tb.cn/h.gU0B0pz?tk=fx3VWyN8gIa%20HU0025

不知道怎么获取的可以私信联系我,欢迎技术交流!



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。