docker
docker
1.安装
官网镜像仓库为:hub.docker.com
我使用的系统为kail2023
相关工具链接 :
当前时间: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靶场
我的环境: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 ,就可看到效果。