Docker 技术

Docker 是什么

docker是可以以极低资源运行的一个独立于文件系统的一个空间

几个基本概念

  • image 镜像, 类似于类的概念
  • container 容器, 类似于实例的概念

docker 在windows下的使用

docker一般是Linux系统下的工具,但是当windows出了个WSL后,docker就以一个WSL在windows下运行了。

每一个WSL在windows中都是独立的vhdx文件

可以通过wsl -l -v 查看docker文件, 通过wsl -d docker-desktop进入

windows下的配置

修改存储位置

原理是将dockerexport出来后,import到新的地方

我保存的地方是D:\Subsystem\docker-desktop-data

关于image到底存在哪里

windows是按照虚拟机的方式存储,而要进入这个虚拟机是通过各个images,命令如下:

docker run -it --privileged --pid=host <image> nsenter -t 1 -m -u -i bash

而每个image其实是通过底下一层image叠加上来的,所以可以找到/var/lib/docker/overlay2中每一层叠加的内容

CentOS7 安装 docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

使用官方脚本自动安装

systemctl enable --now docker

docker 常用命令

获取镜像

在获取镜像前,可以通过docker search 来镜像查找相关内容。但是有的是需要特定版本的,这个需要先在hub.docker.com上确认版本。

  • docker pull <镜像>:<版本>

创建自己的镜像

方法是使用Dockerfile,在里面写好后使用

docker build -t <image_name> . 创建

查看

  • docker ps 查看运行中的容器
  • docker ps -a 查看所有容器
  • docker images 查看存在的镜像

启动容器

docker run开头

参数 描述
--name <alias> 容器别名
-v <主机文件>:<容器文件> 挂载如果没有文件会自动创建
-it 交互界面
-d 后台运行
-p <主机端口>:<容器端口> 将主机的端口映射到容器的端口中
-e <环境变量=Value> 设置环境变量

例子:

docker run --name  myphp-fpm -v ~/nginx/www:/www  -d php:5.6-fpm
docker run --name apache -v $PWD:/usr/local/apache2/htdocs -p 8088:80  -it httpd /bin/bash
docker run -it httpd /bin/bash

php这样的可能会立马就退出了,所以需要打开一个Shell来保活。

docker run -itd php bash

容器执行命令

docker exec 开头

  • -it 交互

例子:

  • docker exec apache ls /usr/local/apache2/htdocs
  • docker exec -it apache /bin/bash

删除

当创建了容器后会一直保留,所以需要删除

  • 删除所有退出的容器

    docker rm -v `docker ps -aq -f status=exited`
    
  • 删除镜像

    docker rmi <image ID>
    

docker 提供了更为简单的方法

docker system prune #将对没有用的容器的网络进行删除
docker container prune # 删除所有退出状态的容器
docker volume prune # 删除未被使用的数据卷
docker image prune # 删除 dangling 或所有未被使用的镜像

Commit容器

杂项

  • Ctrl + P + Q 退出并后台运行

Docker 容器间的通讯

原理是docker内置了Bridge网桥组件,各个容器会分配IP地址,但是只有自定义的Bridge网络才能互相通讯

  • 创建自定义Bridge网络

    • docker network create --driver bridge busybox_bridge
  • 将容器绑定到自定义Bridge网络中

    • docker run -itd --network busybox_bridge --name busybox5 busybox

Docker Compose

docker-compose是可以将多个镜像通过一套制定的规则统一运行起来的工具。极大的方便了每次启动docker需要麻烦配置的动作。

使用YAML文件配置

这篇介绍了如何使用docker-compose来搭建PHP + Apache + MySql的环境

技巧

Docker 容器的端口修改

  1. 关闭容器 docker stop <container>

  2. 进入镜像的存储地方

    • docker run -it --privileged --pid=host <image> nsenter -t 1 -m -u -i bash
  3. 找到存储的容器点

    • cd /var/lib/docker/containers/<contian ID>
  4. 修改hostconfig.json 和 config.v2.json

# vim hostconfig.json

"PortBindings":{"5711/tcp":[{"HostIp":"","HostPort":"5711"}]}
#vim config.v2.json
"ExposedPorts":{"5711/tcp":{}}
"Ports":{"5711/tcp":[{"HostIp":"0.0.0.0","HostPort":"5711"}]}
  1. 重启服务 systemctl restart docker

docker 连接 hackthebox

问题1:
/dev/net/tun: not the file

docker run -it --privileged mykali /bin/bash

加入所有权限,或者只加入一个能力--cap-add SYS_NET_ADMIN --device /dev/net/tun

问题2:
Linux can't add IPv6 to interface tun0

没有开启ipv6

  • --sysctl net.ipv6.conf.all.disable_ipv6=0

Docker kali connect to hackthebox

端口转发

socat TCP4-LISTEN:1633,reuseaddr,fork TCP4:10.10.10.28:80

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 365433079@qq.com