防火墙规则——
INPUT 主要用于主机防火墙,设置规则屏蔽处理进入本机的数据包示例:禁止10.180.100.141这个机器访问我本机的web服务iptables -t filter -A INPUT -s 10.180.100.141 -p tcp --dport 80 -j DROPFORWARD 主要用于网络防火墙,设置规则处理穿过本机的数据包示例:禁止10.180.100.141的机器穿过防火墙访问后端的机器iptables -t filter -A FORWARD -s 10.180.100.141 -j DROPnat防火墙,需要打开内核ip转发(systel -w net.ipv4.ip_forward=1)POSTROUTING 源地址伪装示例:通过伪装10.180.100.0网段的机器上网,首先防火墙本机可以访问互联网iptables -t nat -A POSTROUTING -s 10.180.100.0 -j SNAT --to-source 防火墙外网ipPERROUTING 目的地址转换示例:所有防火墙10022端口的请求都转发给后端的10.180.100.141的22端口iptables -t nat -A PERROUTING -p tcp --dport 10022 -j DNAT --to-destination 10.180.100.141:22docker 容器管理docker怎么连上容器?可以映射端口,比如我在容器创建一个apache和mysql,我们就把容器的端口映射到宿主机的80端口和3306端口。实例[root@x ~]# docker run -p 222:22 -itd centos(使用宿主机的222端口,映射容器的22端口)[root@x ~]# ssh 192.168.230.168:222(然后输入密码就可以链接到容器)自定义镜像与仓库使用commit创建新镜像文件——使用镜像启动容器,在该容器基础上修改,另存为另一个镜像docker run itd centosdocker psdocker exec CONTAINER ID(在这里进行增删改查,安装卸载软件等等)docker commit CONTAINER ID name:latest(默认卷边就是latest)docker images示例:[root@x ~]# docker run -itd centos(运行一个容器)[root@x ~]# docker ps(查看容器)CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4576e60e1b56 centos [root@x ~]# docker exec -it 4576e60e1b56 bash(进入容器)[root@4576e60e1b56 /]# yum -y install mysql..........(安装软件,修改配置文件等)[root@x ~]# docker commit 4576e60e1b56 mycentos(另存为修改后的镜像名字为mycentos)sha256:10bb17e15bd2b7ce98fc0dd8db1c6c1729da8fe39e0c0faed201fd8eaa4b488d[root@x ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZEmycentos latest 10bb17e15bd2 44 seconds ago 197.2 MBdocker.io/nginx latest 7f70b30f2cc6 2 days ago 108.7 MB使用Dockerfile文件创建新镜像文件Dockerfile语法格式——FROM:基础镜像MAINTAINER:镜像创建者信息EXPOSE:开放的端口ENV:环境变量ADD:复制文件到镜像RUN:制作镜像时执行的命令,可以有多个WORKDIR:定义容器默认的工作目录CMD:启动容器时执行的命令,仅可以有一条cmd工作流程——mkdir xx(创建一个文件夹),vim Dockerfile(创建Dockerfile文件)docker xx -t imagename Dockerfile示例:[root@x ~]# mkdir build(创建一个build,继续创建一个脚本,内容随意并赋予执行权限)[root@x build]# lsDockerfile xx.sh[root@x build]# cat DockerfileFROM mycentos(使用自定义的镜像)MAINTAINER xxsec 1520029989@qq.com(作者信息)ENV NAME=xxsecENV environment=xxsecWORKDIR /var/www/htmlADD xx.sh /root/xx.shRUN mkdir /dockerfileRUN echo "xxsec" > dockerfile/file.txtRUN yum -y install httpdRUN echo "xxsec" > /var/www/html/index.htmlEXPOSE 80CMD ["httpd", "-DFOREGROUND"][root@x build]# lsDockerfile xx.sh[root@x build]# docker build -t xxsec .(.在当前目录执行,)[root@x ~]# docker images(查看生成的镜像)REPOSITORY TAG IMAGE ID CREATED SIZExxsec <none> 7acc6beb85a2 About a minute ago 197.2 MB自定义仓库——registry基本概念共享镜像的一台服务器(镜像化的一台服务器)自定义私有仓库[root@xxsec ~] docker pull docker.io/registry[root@xxsec ~] vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/.dockerd --insecure-registry=ip:5000[root@xxsec ~] systemctl daemon-reload[root@xxsec ~] systemctl restart docker[root@xxsec ~] docker run -id -p 5000:5000 registry[root@xxsec ~] docker tar 镜像 镜像容器ip:5000/镜像:latest(打标签)[root@xxsec ~] docker push 镜像容器ip:5000/镜像:latest(上传)进入registry容器查看[root@xxsec ~] cat /etc/docker/registry/config.yml验证:使用远程镜像启动容器[root@xxsec ~] docker run -it 镜像容器ip:5000/镜像名查看远程仓库上有什么镜像http://容器镜像ip:5000/v2/_catalog查看远程镜像的taghttp://容器镜像ip:5000/v2/<name>/tags/list持久化存储——存储卷:卷的概念docker容器不保存任何数据,重要的数据使用外部卷存储(存储持久化),容器可以挂在真实机目录或共享存储为卷共享存储:一台共享存储服务器可以提供给所有的Docker主机使用,共享存储服务器(NAS,SAN,DAS等),如使用NFS创建共享存储服务器,客户端挂载NFS共享,并最终映射到容器中。存储卷示例;主机卷的映射,将真实机目录挂在到容器中提供持久性存储[root@x ~]# docker run -it -v /var/data:/data centos bash共享存储示例:服务器端:[root@xxsec ~] yum -y install nfs-utils [root@xxsec ~] vim /etc/exports [root@xxsec ~] systemctl start nfsdocker主机(注意是宿主机mount)mount挂载共享,运行容器时,使用-v选项映射磁盘到容器中docker网络管理查看默认docker创建的网络模型[root@xxsec ~] docker network list[root@xxsec ~] ip a s docker0[root@xxsec ~] brctl show docker0(启动容器会绑定该网桥)新建docker网络模型[root@xxsec ~] docker network create --driver bridge xx01[root@xxsec ~] docker network list[root@xxsec ~] ip a s[root@xxsec ~] docker network inspect xx01创建虚拟网桥——[root@xxsec ~] cat /etc/sysconfig/network-scripts/ifcfg-br0TYPE=BridgeBOOTPROTO=static... ...NAME=eth0DEVICE=eth0BRIDGE=br0NOBOOT=yesIPADDR=192.168.230.168[root@xxsec ~] cat /etc/sysconfig/network-scripts/ifcfg-eth0TYPE=EthernetBOOTPROTO=static... ...NAME=eth0DEVICE=eth0BRIDGE=br0NOBOOT=yesIPADDR=192.168.230.168[root@xxsec ~] brctl show(显示网桥)docker自定义网桥[root@xxsec ~] docker network create --subnet=192.168.230.176/24 xx01(创建网桥)[root@xxsec ~] docker run --network=bridge|host|none[root@xxsec ~] docker run --network=xx01 -id nginx(启动容器,使用刚创建的网桥)