一、知识点:
1) docker commit
使用镜像启动容器,在该容器基础上修改;另存为另一个镜像。
#docker run -itd centos bash
#docker ps
#docker exec -it IDs bash (修改 ,增删改数据、安装软件、修改配置文件等)
#docker commit IDs name:label
#docker images
- 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
- 创建虚拟网桥
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 网络拓扑
- 查看默认Docker创建的网络模型
1. #docker network list
#ip a s docker0
#brctl show docker0 //启动容器会绑定该网桥