docker私有仓库搭建,卷和网络拓扑

把容器作为镜像的步骤
1.创建容器
docker run -it docker.io/centos:latest
2.修改配置
配置yum源
3.安装软件包
安装日常使用软件包
4.把容器做成镜像
docker commit c2dd02ea96ed docker.io/myos:latest
5.验证
Dockerfile语法结构
FROM:基础镜像
MAINTAINER:镜像创建者信息
EXPOSE:开放端口
ENV:设置变量
ADD:复制文件到镜像
RUN:制作镜像时执行的命令,可以有多个
WORKDIR:定义容器默认工作目录
CMD:容器启动时执行的命令,仅可以有一条CMD

Dockerfile执行创建容器:
]#mkdir f1
]#cd f1
]#touch Dockerfile
]#vim Dockerfile
FROM docker.io/centos:latest
RUN rm -rf /etc/yum.repos.d/*
ADD local.repo /etc/yum.repos.d/local.repo
RUN yum install -y bash-completion net-tools vim iproute psmisc
]#docker build -t myos:http .
dockerfile中cd命令无法使用
可以使用WORKDIR替代
案例:
在这里插入图片描述
RUN touch f1
WORKDIR /tmp #相当于cd /tmp
RUN touch f2
案例:
1.创建一个apache的服务镜像
2.设置默认的工作目录为/var/www/html
3.设置默认首页hello world到index.html
]#mkdir f2
]#cd f2
]#touch Dockerfile
]#vim Dockerfile
FROM docker.io/myos:latest
RUN yum -y install httpd
WORKDIR /var/www/html
RUN echo “hello world " > index.html
ENV EnvironmentFile=/etc/sysconfig/httpd
EXPOSE 80
CMD [”/usr/sbin/httpd","-DFOREGROUND"]
]#docker build -t myos:http .
创建docker镜像仓库
1.创建私有仓库
服务端:192.168.1.30
1)安装软件包
yum install docker-distribution
2)启动私有仓库,并设置开机自启
systemctl start docker-distribution
systemctl enable docker-distribution
3)查询5000端口
ss -nutlp | grep 5000
4)验证服务
curl 192.168.1.30:5000/v2/

 客户端:192.168.1.31,192.168.1.32
 2.让docker使用私有仓库
  1)修改配置文件 /etc/sysconfig/docker
   ]#vim /etc/sysconfig/docker
      ADD_REGISTRY='--add-registry 192.168.1.30:5000'#docker仓库地址
       INSECURE_REGISTRY='--insecure-registry 192.168.1.30:5000'
                                        #允许非加密方式访问仓库
   2)重启docker服务
    ]#System restart docker
 3.上传镜像到私有仓库
    1)为镜像创建标签:
      docker tag  镜像:标签 IP:5000/镜像:latest
     ]#docker tag docker.io/centos 192.168.1.30:5000/centos:latest
    2)上传镜像的标签内包含地址和端口号
     ]# docker push 192.168.1.30:5000/centos:latest
 4.自定义私有仓库
    1)查看私有镜像仓库中的镜像名称
     curl http://仓库IP:5000/v2/_catalog
     curl http://192.168.1.30:5000/v2/_catalog
    2)查看某一仓库的标签
     curl http://仓库IP:5000/v2/<repo>/tags/list
     curl http://192.168.1.30:5000/v2/centos/tags/list
    3)私有仓库数据存储目录
      /var/lib/registry
    4)客户端运行私有仓库镜像
     ]# docker run -itd 192.168.1.30:5000/nginx

卷的概念:
1)docker容器不保持任何数据
2)重要的数据使用外部卷存储
3)容器可以挂在真实机目录或共享存储为卷
主机卷的映射
将真实机目录挂在到容器中提供持久化存储
1)目录不存在就自动创建
2)目录存在就直接覆盖掉
]#docker run -v /data:/data -it docker.io/centos /bin/bash
]#vim index.html
hello world
]#docker run -v /root:/usr/local/nginx/html -it docker.io/nginx /bin/bash
通过共享存储给docker主机使用
案例:

准备3台虚拟机:192.168.1.21,docker1,docker2
1)配置nfs服务器
21]#]# yum -y install nfs-utils
21]# mkdir /content
21]# vim /etc/exports
/content 192.168.1.0/24(rw,no_root_squash)
#no_root_squash:当登录NFS主机使用共享目录的使用者是root时,
其权限将被转换成为匿名使用者,通常它的UID与GID都会变成nobody身份
2)写入共享内容
21]#echo “hello world” > /content/index.html
3)启动nfs服务
21]#systemctl restart nfs-server
21]# systemctl restart nfs-secure
4)配置客户端
docker1]#yum -y install nfs-utils
docker1]#systemctl restart nfs-server
docker1]#mkdir /mnt/qq
docker1]#vim /etc/fstab
192.168.1.21:/content /mnt/qq nfs defaults 0 0
5)docker1运行http容器
]# docker run -itd -p 80:80 -v /mnt/qq:/var/www/html
docker.io/myos:http
6)访问验证
curl 192.168.1.30
7)docker2操作跟docker1一致,不过docker2运行nginx容器
]# docker run -itd -p 80:80 -v /mnt/qq:/usr/share/nginx/html
docker.io/myos:nginx

Docker网络拓扑
1.查看默认docker创建的网络模型
]# docker network list
2.新建docker网络模型
]#docker network create --subnet=10.10.10.0/24
3.启动容器使用刚才创建的自定义网桥
]# docker run --network=docker1 -itd myos:http
]# docker run --network=docker1 -itd docker.io/centos
4.查看自定义网桥底层信息
]#docker network inspect docker1
5)可以查看到IP地址,并可以和外界网络ping通
客户端访问容器内的资源
1)使用-p 参数把容器端口和宿主机端口绑定
2)-p 宿主机端口:容器端口
案例:把docker1变成httpd
]#docker run -itd -p 80:80 docker.io/myos:httpd
案例:把docker1变成nginx
]#docker run -itd -p 80:80 docker.io/nginx:latest

发布了5 篇原创文章 · 获赞 1 · 访问量 318

猜你喜欢

转载自blog.csdn.net/weixin_46271204/article/details/104415119