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到底存在哪里
- 这篇文章讲述了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 容器的端口修改
关闭容器
docker stop <container>
进入镜像的存储地方
docker run -it --privileged --pid=host <image> nsenter -t 1 -m -u -i bash
找到存储的容器点
cd /var/lib/docker/containers/<contian ID>
修改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"}]}
- 重启服务
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