Dockfile与Docker数据卷

一、Docker镜像

1.1、构建镜像的三种方式

■ dockerfile
■ 基于已有的镜像容器进行创建镜像
■ 基于本地模板进行构建

1.2、docker镜像的分层

■ Dockerfile中的每个指令都会创建一个新的镜像层
■ 镜像层将被缓存和复用
■ 当Dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效
■ 某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效
■ 镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件
在这里插入图片描述

二、Dockerfire

2.1、dockerfile操作指令

在这里插入图片描述
注:ADD与COPY的区别
● COPY:只做复制
● ADD:可以做复制、可以解压、可操作的对象不仅是文件也可以是一个URL

注:CMD与ENTRYPOINT的区别
● CMD:CMD指令是我们自定义的,让容器运行时的一个执行程序,在dockerfile里面如果出现多个CMD指令,只会最后一个生效
● ENTRYPOINT:是指系统在启动时默认运行的第一个执行程序

2.2、使用dockerfile创建apache镜像

[root@docker opt]# mkdir apache
[root@docker opt]# cd apache/
[root@docker apache]# ls
[root@docker apache]# vim Dockerfile
FROM centos                #基于的基础镜像
MAINTAINER apache    #维护镜像的用户信息
RUN yum -y update   #镜像操作指令安装apache软件
RUN yum -y install httpd
EXPOSE 80                        #开启80端口
ADD index.html /var/www/html/index.html        #复制网站首页文件
ADD run.sh /run.sh                                               #将执行脚本复制到镜像中
RUN chmod 755 /run.sh
CMD ["/run.sh"]                #启动容器时执行脚本
[root@docker apache]# vim index.html
[root@docker apache]# vim run.sh
[root@docker apache]# cat index.html 
Hello world!
[root@docker apache]# cat run.sh 
#! /bin/bash
rm -rf /run/httpd/*           #删除apache缓存
exec /usr/sbin/apachectl -D FOREGROUND   #exec执行,apachectl -D守护
[root@docker apache]# docker build -t httpd:centos .  #生成镜像,.表示本地目录

在这里插入图片描述

[root@docker apache]# docker run -d -p 1216:80 httpd:centos  # -p:表示指定的端口映射
   -P:表示随机映射的端口
[root@docker apache]# docker ps -a

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3、基于已有的镜像容器进行创建镜像

[root@docker ~]# docker images
[root@docker ~]# docker run -itd nginx:latest /bin/bash
[root@docker ~]# docker ps -a

在这里插入图片描述

三、私有仓库的建立

3.1、registry和harbor 的区别

registry :字符界面
harbor:自己的web页面

3.2、示例

[root@docker ~]# docker pull registry

在这里插入图片描述

扫描二维码关注公众号,回复: 12968835 查看本文章
[root@docker ~]# vim /etc/docker/daemon.json

在这里插入图片描述

[root@docker ~]# systemctl restart docker
[root@docker ~]# docker create -it registry /bin/bash
[root@docker ~]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
#宿主机的/data/registry自动创建挂载容器中的/tmp/registry

在这里插入图片描述

[root@docker ~]# curl -XGET http://192.168.140.20:5000/v2/_catalog
#获取私有仓库列表

在这里插入图片描述

[root@docker ~]# docker tag nginx:latest 192.168.140.20:5000/nginx
#打标签

在这里插入图片描述

[root@docker ~]# docker push 192.168.140.20:5000/nginx   #上传到仓库
[root@docker ~]# curl -XGET http://192.168.140.20:5000/v2/_catalog

在这里插入图片描述

[root@docker ~]# docker images

在这里插入图片描述

[root@docker ~]# docker pull 192.168.140.20:5000/nginx   #进行本地下载
[root@docker ~]# docker images

在这里插入图片描述
小结:regisry

  • pull 下载
  • 先改配置文件:daemon. json对接私有仓库
  • 运行registry
    用户的操作
  • 打标签tag
  • push 上传
  • pull

四、docker数据卷和数据卷容器

4.1、docker数据卷

■ 数据卷是一个提供容器使用的特殊目录
■ 数据卷是宿主机和容器间目录的挂载
■ 创建数据卷
docker run -d -v /data1 -v /data2 --name webhttpd:centos
■ 挂载主机目录作为数据卷
docker run -d -v /var/www:/data1 --name web-1httpd:centos
 -v表示将宿主机的目录和容器的目录实现共享
[root@docker ~]# docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash
[root@1c13c7f2d3be /]# cd /data1/
[root@1c13c7f2d3be data1]# touch test1
[root@1c13c7f2d3be data1]# ll

在这里插入图片描述

[root@docker ~]# cd /var/   #另起一个窗口进行验证
[root@docker var]# cd www
[root@docker www]# ll

在这里插入图片描述

4.2、数据卷容器

■ 数据卷容器是一个容器中的目录和另一个容器中的目录进行挂载
[root@docker ~]# docker run --name web10 -v /data1 -v /data2 -it centos:7 /bin/bash
另起窗口进行验证
[root@docker ~]# docker run -it --volumes-from web10 --name dc1 centos:7 /bin/bash
[root@f9d06e0697f8 /]# cd data1/
[root@f9d06e0697f8 data1]# touch 1.txt
[root@f9d06e0697f8 data1]# cd ..
[root@f9d06e0697f8 /]# cd data2/
[root@f9d06e0697f8 data2]# touch 2.txt

在这里插入图片描述

五、容器互联(使用centos镜像)

[root@docker ~]# docker run -itd -P --name b1 centos:7 /bin/bash
c927e250afc9cbea2a2d80719a5ddce28ae4b762a62ab39b3c2cbbbce76c5e22   #创建并运行容器取名b1,端口号自动映射
[root@docker ~]# docker exec -it c927e250afc9 /bin/bash
[root@c927e250afc9 /]# yum -y install net-tools
[root@docker ~]# docker run -itd -P --name b2 --link b1:b1 centos:7 /bin/bash 
a8fb67c2c153ecefad53b3a284a1b11715c074a29109f2c03fa2ae29db6d860b
[root@docker ~]# docker exec -it a8fb67c2c153 /bin/bash
[root@a8fb67c2c153 /]# yum -y install net-tools
[root@c927e250afc9 /]# ifconfig
[root@a8fb67c2c153 /]# ifconfig

在这里插入图片描述

在这里插入图片描述

[root@a8fb67c2c153 /]# ping 172.17.0.3    

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_50344814/article/details/114678952