docker容器管理及网络管理

2023-05-08,,

防火墙规则——

INPUT 主要用于主机防火墙,设置规则屏蔽处理进入本机的数据包
示例:禁止10.180.100.141这个机器访问我本机的web服务
iptables -t filter -A INPUT -s 10.180.100.141 -p tcp --dport 80 -j DROP

FORWARD 主要用于网络防火墙,设置规则处理穿过本机的数据包
示例:禁止10.180.100.141的机器穿过防火墙访问后端的机器
iptables -t filter -A FORWARD -s 10.180.100.141 -j DROP

nat防火墙,需要打开内核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 防火墙外网ip

PERROUTING 目的地址转换
示例:所有防火墙10022端口的请求都转发给后端的10.180.100.141的22端口
iptables -t nat -A PERROUTING -p tcp --dport 10022 -j DNAT --to-destination 10.180.100.141:22

docker 容器管理
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 centos
docker ps
docker 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               NAMES
4576e60e1b56        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             SIZE
mycentos            latest              10bb17e15bd2        44 seconds ago      197.2 MB
docker.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]# ls
Dockerfile  xx.sh
[root@x build]# cat Dockerfile
FROM mycentos(使用自定义的镜像)
MAINTAINER xxsec 1520029989@qq.com(作者信息)
ENV NAME=xxsec
ENV environment=xxsec
WORKDIR /var/www/html
ADD xx.sh /root/xx.sh
RUN mkdir /dockerfile
RUN echo "xxsec" > dockerfile/file.txt
RUN yum -y install httpd
RUN echo "xxsec" > /var/www/html/index.html
EXPOSE 80
CMD ["httpd", "-DFOREGROUND"]
[root@x build]# ls
Dockerfile  xx.sh
[root@x build]# docker build -t xxsec .(.在当前目录执行,)
[root@x ~]# docker images(查看生成的镜像)
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
xxsec              <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

查看远程镜像的tag
http://容器镜像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 nfs
docker主机(注意是宿主机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-br0
TYPE=Bridge
BOOTPROTO=static
... ...
NAME=eth0
DEVICE=eth0
BRIDGE=br0
NOBOOT=yes
IPADDR=192.168.230.168

[root@xxsec ~] cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
... ...
NAME=eth0
DEVICE=eth0
BRIDGE=br0
NOBOOT=yes
IPADDR=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(启动容器,使用刚创建的网桥)

docker容器管理及网络管理的相关教程结束。

《docker容器管理及网络管理.doc》

下载本文的Word格式文档,以方便收藏与打印。