docker

docker

1.安装

官网镜像仓库为:hub.docker.com

我使用的系统为kail2023

相关工具链接 :

https://pan.baidu.com/s/1IoxEZRYxBTcs3A9gvBdeYA 提取码: e3wb

当前时间:2024/12/19

注意:

  • Red Hat 系列,eg:CentOS 使用 yum 安装软件包
  • Debian 系列,eg:Ubuntu,kail 使用 apt 来安装软件包
# #####################################安装docker#####################################

# 更新apt源,即注释掉原来的源,换新的源
vim /etc/apt/sources.list

#阿里云
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib

# 保存退出
:wq

# 更新软件列表
apt-get update
apt-get upgrade
apt-get dist-upgrade
apt-get clean
apt-get autoclean

# 安装docker
优先用:
apt-get install docker.io -y
apt-get install docker-ce


# 查看docker版本
docker --version


# ##################################### 安装docker-compose #####################################
# 将docker-compose文件拖动到/usr/local/bin/【docker-compose文件链接我有分享】
cd /usr/local/bin

# 加执行权限
chmod +x /usr/local/bin/docker-compose

# 查看docker-compose版本
docker-compose -v

# 更新docker源
cd /etc/docker

# 将daemon文件拖动到该目录

# 然后执行以下两条命令
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
# 安装nginx
docker run -d -p 80:80 nginx

现在,简单用docker部署一个站点。

简单示例:

docker container ls
docker run -d -p 80:80 nginx:1.16
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run -d --link mysql:mysql -p 86:80 wordpress:5.6

访问本机ip:86,出现以下界面

"""
刨析命令
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

docker run 						运行一个新容器
--name mysql 				    为容器指定名称为mysql
-e MYSQL_ROOT_PASSWORD=123456   设置环境变量    为 MySQL 数据库的 root 用户 设置密码为 123456
-d								让容器在后台运行 如果没有 -d 参数,容器会在前台运行并显示日志输出。
mysql:5.7						指定了容器使用的镜像是 mysql,并且指定了版本为 5.7。优先从本地拉取,没有就从Docker Hub 拉取该镜像。
"""


# 查看所有的docker
docker ps -a

2.使用

2.1 镜像常用命令

# 搜索官方仓库【目前国内环境无法使用】
docker search nginx


# 列出本地所有容器(包括运行中和已停止的容器)
docker ps -a

# 显示本地运行中的容器
docker ps

# 列出本地镜像
"""
镜像库		   标签		ID			  创建时间			镜像大小
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        1.16      dfcfd8e9a5d3   4 years ago     127MB
redis        latest    b5e874b32a79   2 months ago    117MB

"""
docker images

# 拉取镜像
docker pull   
eg:
	拉取redis:docker pull redis
	
# 删除镜像,有两种方式,分别是:
"""
# 注意:删除的前提是容器得停止,不能在运行中,用docker ps -a 来检查  docker stop ID   docker rm ID
方式一:
docker rmi 镜像库:标签
eg:删除nginx 1.16版本
		docker rmi nginx:1.16
		
方式二:
docker rmi ID
eg:删除redis最新版
		docker rmi b5e874b32a79
"""

# 导出镜像
docker save 镜像名称:版本 -o docker.xx.tar.gz
eg:docker save tomcat:latest -o docker.tomcat.tar.gz

# 加载tar.gz镜像包
docker load -i xx.tar.gz

2.2 容器常用命令

# 停止容器,有两种方式
docker stop ID/name

# 启动容器,有两种方式
docker start ID/name

# 删除容器【注意:正在运行的容器无法删除,除非强制删除】
docker rm ID/name 

# 强制删除
docker rm -f ID/name

# 启动新容器,有很多的参数
"""
-d 后台运行
-p 做端口映射
--name 指定容器的名字
--link 关联另外一个容器
-e 设置容器的一些属性
-it 给运行起来的容器分配一个终端
--restart=always  开机自启动
"""
docker run 

# 删除所有容器【不是所有镜像】
docker rm -f `docker ps -a -q`

# 查看容器内的进程
docker top ID/name

# 查看容器的资源占用情况	
docker stats ID

# 与容器进行交互
"""
分为内部和外部:
	内部:
		docker exec -it ecc3141415b1 ls
	外部:
		docker exec -it ecc3141415b1 /bin/bash
"""

# 列出所有容器的名称和对应的 IP 地址【docker容器类似于一个微型虚拟机,每个容器都有自己的ip地址】
docker inspect -f '{{.Name}} => {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

# curl -i ip,可以看到http响应数据
curl -i ip

# 显示容器网络连接、监听端口等信息
netstat -lntup

# 重启docker服务【注意:重启docker服务会自动关闭所有的容器】
systemctl restart docker

3. 制作docker并上传

下面演示拉取debian系统,并在里面封装了nginx,然后打包上传。

# 拉取镜像
docker pull debian:latest

# 查看镜像ID
docker images

# 运行一个容器
docker run -it --name john_nginx -p 85:80 镜像ID

# 现在以及进入到容器了

# 安装nginx
apt update  			# 更新apt缓存
apt install nginx -y    # 安装nginx
nginx -v 				# 查看nginx版本

# 打包之前做好先停止容器
exit
docker stop john_nginx   # 如果停止了,这行命令就不用执行了

# john_nginx表示容器名称 				jyppxn表示用户名 		debian表示上传到docker后镜像的名称  	v1 表示镜像的标签
docker commit john_nginx jyppxn/debian:v1     

# 上传到官方仓库 【接下来输入用户名和密码就好了】
docker login     # 登录官方仓库

# 推送到仓库
docker push jyppxn/debian:v1

4. docker-compose

docker-compose是批量管理docker容器的工具

4.1 常用指令

# centos7 安装docker-compose
yum install epel-release.noarch -y
yum install docker-compose -y

# kail 安装docker-compose
apt install docker-compose -y

# 查看docker-compose版本
docker-compose -v

配置docker-compose.yml文件,以此来控制多个容器,下面是安装mysql以及wordpress的一个案例

# 配置之前,关闭掉所有的docker容器
docker stop `docker ps -a -q`

# 创建一个wordpress文件夹,里面创建一个docker-compose.yml名字的文件
mkdir wordpress
vim docker-compose.yml

# 添加以下内容

version: '3'  # docker-compose.yml的文件格式版本

services:
  db: 
    image: mysql:5.7  # 使用的镜像,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
    image: wordpress:5.6
    ports:
      - "83:80"  # 端口映射
    restart: always
    environment:
      WORDPRESS_DB_HOST: db  # WordPress应用连接的MySQL数据库的主机名(在这个配置中是db容器的名称)
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: 123456


# 创建并启动
docker-compose up -d

# 访问
直接访问ip:83

docker-compose xx 这些命令都是针对docker-compose.yml这个配置文件的相关容器来操作的

# 停止并删除所有的容器、网络、卷和镜像
docker-compose down

# 重新启动所有容器
docker-compose restart

# 停止服务,但不会删除容器
docker-compose stop

# 启动 docker-compose.yml 中定义的所有服务容器。
docker-compose start

其实,可以尝试安装一下zabbix这是跟监控挂钩的,支持docker安装

5.使用docker部署vulhub靶场

https://vulhub.org/

我的环境:kail2023

注意:

  • 由于使用docker来部署靶场,那就必须先安装 docker,docker-compose,上面有写安装步骤,这里就不重复写了

  • 其次,安装前建议停止正在 运行的容器

    docker rm -f `docker ps -a -q`
    

现在,开始部署vulhub,官方地址为:https://vulhub.org/

步骤一:安装vulhub

接下来做以下动作

cd /opt
将压缩包从宿主机拖动到当前目录
unzip
cd vulhub-master
cd nginx
cd nginx_parsing_vulnerability/

此时,继续进行以下动作:

步骤二:启动容器

# 此时,就开始拉取镜像,然后在本地运行容器
docker-compose up -d

步骤三:复现漏洞

开始复现漏洞,访问:http://your-ip/uploadfiles/nginx.png
注意:your-ip换成虚拟机的ip ,效果如下:

此时,看起来是张图片,但是再访问:http://your-ip/uploadfiles/nginx.png/.php
注意:your-ip换成虚拟机的ip ,就可看到效果。

posted @ 2024-12-20 22:19  清风拂山岗(小高同学)  阅读(14)  评论(1编辑  收藏  举报