Docker
安装Docker
curl -sSL https://get.daocloud.io/docker | sh
开机启动
sudo systemctl enable docker
配置国内镜像
vim /etc/docker/daemon.json
{ "registry-mirrors" : [ "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn", "https://cr.console.aliyun.com", "https://mirror.ccs.tencentyun.com" ] }
重启
sudo systemctl daemon-reload sudo systemctl restart docker
常用命令
https://hub.docker.com //镜像网站
docker pull mysql:5.7.41 //下载镜像 docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=mysql -d mysql:5.7.41 //创建容器 docker run -it --rm mysql:5.7.41 mysql -h172.17.0.3 -uroot -p //交互式登录容器 docker run --name some-nginx -d -p 8080:80 nginx:1.22
docker images //查看已下载的镜像 docker ps //查看容器状态 docker ps -a //查看所有容器状态 docker stop 容器ID或容器名 //停止容器
docker exec -it 容器ID或容器名 /bin/bash //进入交互模式
Docker网络
查看容器IP:
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名
curl 172.17.0.2:8000 在桥接模式下,宿主机能直接访问容器的ip,容器之间也能相互访问
docker run -it --rm busybox:1.36.0-uclibc
docker network connect my-net mysql
docker network disconnect my-net mysql
docker run -it --rm --network my-net mysql:5.7.41 mysql -hsome-mysql -uroot -p
Docker挂载
docker run --name some-mysql -v /root/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro \ -v /root/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.41
创建卷,将绑定挂载改为卷挂载
docker volume create vol-my-data docker run --name some-mysql-vol -v /root/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro \ -v vol-my-data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.41
创建卷之后,将容器挂载到卷上,容器的数据将保存到卷中,即使删除容器,创建新的容器时重新挂载卷,卷中的配置能再次同步过来:
docker run --name ctfdServer -v ctfd-volume:/opt/CTFd/CTFd -d -p 18000:8000 ctfd/ctfd:3.5.1
容器的数据会保存到卷中,删除容器后,创建新的容器时挂载卷,能再次同步原有的数据到容器里。
docker system df #查看 Docker 的磁盘使用情况 docker volume prune #删除未使用的数据卷 docker network prune #删除没有使用过的网络 docker system prune #删除所有未使用过的资源 docker container prune #删除所有停止的容器 docker image prune -a #删除所有未使用过的镜像 docker container prune --filter "until=24h" #仅删除超过 24 小时的停止容器 du -h --max-depth=1,可以查看当前目录下各文件、文件夹的大小 du -sh 查看当前目录的总大小
iptables -n -L --line
iptables -D DOCKER-USER 1 #删除DOCKER-USER链中的编号为1的规则
按序号插入规则:
iptables -I DOCKER-USER 1 -p tcp -s 172.17.0.12/16 -j ACCEPT
iptables -I DOCKER-USER 2 -p tcp -s 192.168.0.133 -j ACCEPT
iptables -I DOCKER-USER 3 -p tcp -s 172.27.30.92 --dport 4389 -j ACCEPT
iptables -I DOCKER-USER 4 -j REJECT
一定要给容器所在的网段开启访问权限,不然宿主机无法正常访问容器。
实现只允许192.168.0.133访问容器
保存 iptables-save > /etc/iptables/iptables.rules 恢复 iptables–restore < /etc/iptables/iptables.rules
/etc/iptables/iptables.rules 需要创建
touch /etc/iptables/iptables.rules
iptables -I DOCKER-USER 2 -p tcp -s 192.168.0.133 -j ACCEPT
iptables -I INPUT 3 -j REJECT
hosts.allow和hosts.deny支持且只支持使用了libwrap库的服务
使用修改/etc/hosts.allow和/etc/hosts.deny的方法:
service xinetd restart #退出SSH连接后,自动生效,不一定需要重启 xinetd
端口是正常开启的,但是已无法访问SSH。
但是对web服务无效,还是需要结合iptables限制对容器的访问。
lsof -i:22 查看22端口是否被使用