一、知识点:
1) docker commit
使用镜像启动容器,在该容器基础上修改;另存为另一个镜像。
#docker run -itd centos bash
#docker ps
#docker exec -it IDs bash (修改 ,增删改数据、安装软件、修改配置文件等)
#docker commit IDs name:label
#docker images


  1. Dockerfile
    2.1 )语法格式:
    ——FROM :基础镜像
    ——MAINTAINER :镜像创建者信息
    ——EXPOSE:开放的端口
    ——ENV:设置变量
    ——ADD:复制文件到镜像
    ——RUN:制作镜像时执行的命令,可以有多个
    ——WORKDIR:定义容器默认工作目录
    ——CMD:容器启动时执行的命令,仅可以有一条CMD
    2.2 ) 使用Dockerfile 工作流程
    —— #mkdir dodir ; #cd dodir ; #vim Dockerfile ;
    #docker dodir -t imagename Dockerfile文件夹路径(当前路径用 . 表示)

二、创建一个容器,配置 yum 源,并且安装 ifconfig 命令
自定义镜像
1、创建一个容器 docker run -itd centos
2、进入容器进行修改配置 docker exec -it 容器id bash
2.5 停止容器,不是必须的
3、创建镜像并验证 docker commit 容器id 镜像名称:标签
使用 Dockerfile 编排镜像

FROM centos
 RUN rm -f /etc/yum.repos.d/*.repo
 ADD local.repo /etc/yum.repos.d/local.repo
 RUN yum install net-tools vim-enhanced psmisc iproute -y
 编排命令
 docker build -t myos:latest .
 基于 myos 创建 httpd 的镜像
 FROM myos
 RUN yum install -y httpd
 ENV EnvironmentFile=/etc/sysconfig/httpd
 EXPOSE 80
 CMD ["/usr/sbin/httpd", “-DFOREGROUND”]

三、创建私有仓库
1 添加配置文件

/etc/docker/daemon.json
 touch /etc/docker/daemon.json
 {
 “insecure-registries” : [“192.168.4.10:5000”]
 }


1、重启 docker 服务
systemctl restart docker
2、 启动私有仓库
docker run -d -p 5000:5000 registry
3、 测试上传镜像到私有仓库
3.1 标记一下哪个镜像要上传
docker tag busybox:latest 镜像服务器ip:5000/busybox:latest
3.2 上传镜像
docker images
docker push 镜像服务器ip:5000/busybox:latest
4 、私有仓库的使用
查看私有仓库里面的 镜像
http://192.168.4.10:5000/v2/_catalog 查看私有仓库里面镜像的标签
http://192.168.4.10:5000/v2/myos/tags/list 5 、使用私有仓库运行容器
5.1 添加配置文件

/etc/docker/daemon.json
 touch /etc/docker/daemon.json
 {
 “insecure-registries” : [“192.168.4.10:5000”]
 }


5.2 重启 docker 服务
systemctl restart docker
5.3 启动容器

docker run -itd 192.168.4.10:5000/myos:latest
 docker run -itd 192.168.4.10:5000/myos:python


容器的存储与端口映射
存储卷的映射
docker run -d -v /var/webroot:/var/www/html myos:httpd
扩展实验
目标:使用 nfs 共享,所有容器内的web 页面统一
配置启动一个 apache 的容器
配置 NFS 服务器,使用 docker mount nfs ,利用卷映射到 容器
容器网络
查看 docker 网络配置
docker network list
创建一个网桥 br0
docker network create --driver bridge br0
删除一个网桥 br0
docker network rm br0
创建一个网桥
docker network create --driver bridge --subnet=192.168.1.0/24 br0
在新的网桥上创建容器
docker run -it --network=br0 myos


四、持久化存储
4.1 存储卷
1)docker容器不保持任何数据;任何数据请使用外部卷存储(数据持久化);容器可以挂载真实机目录或共享存储为卷。
2) 主机卷的映射:
将真实机目录挂载到容器中提供持久化存储
#docker run -v /data:/data -it centos bash

4.2 共享存储
一台共享存储服务器可以提供给所有的Docker主机使用,共享存储服务器(NAS、SAN、DAS等)

案例:


五、Docker 网络架构
5.1 Linux 网桥
1) 创建虚拟网卡

#cat /etc/sysconfig/network-scripts/ifcfg-eth0
 #cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:0
 #vim /etc/sysconfig/network-scripts/ifcfg-eth0:0
 TYPE=Ethernet
 BOOTPROTO=static
 NAME=eth0:0
 DEVICE=eth0:0
 ONBOOT=yes
 IPADDR=192.168.4.15
  1. 创建虚拟网桥
2.  #vim /etc/sysconfig/network-scripts/ifcfg-br0
 TYPE=Bridge
 BOOTPROTO=static
 NAME=br0
 DEVICE=br0
 ONBOOT=yes
 IPADDR=192.168.4.15
 #vim /etc/sysconfig/network-scripts/ifcfg-eth0
 TYPE=Ethernet
 BOOTPROTO=static
 NAME=eth0
 DEVICE=eth0
 ONBOOT=yes
 BRIDGE=br0
 IPADDR=192.168.4.15#brctl show

5.2 Docker 网络拓扑

  1. 查看默认Docker创建的网络模型
1.  #docker network list
 #ip a s docker0
 #brctl show docker0 //启动容器会绑定该网桥