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端口是否被使用

 

posted @ 2023-04-02 11:42  RichardMrZ  阅读(25)  评论(0编辑  收藏  举报