- 镜像
-
读写层(容器):依赖镜像,是个动态的环境,镜像中的ENV,Volume,cmd等最终落实到此运行环境中
-
add mysql,add tomcat(镜像1,镜像2):层级管理:继承自centos镜像,封装成一个mysql镜像
-
centos(根镜像rootfs):操作系统发行版本,/dev,/proc,/bin,/etc等(不包含linux内核,可在任何满足要求的linux内核上运行)
-
kernel(bootfs):启动文件系统(启动完成后脱离),用户不会与这一层直接打交道
-
镜像加载过程
1>镜像本质是磁盘上一系列文件的集合
2>初始挂载时读写层为空
3>当需要修改镜像内某个文件时,只对处于最上方的读写层进行了变动,不复写下层已有文件系统的内容,已有文件在只读层中的原始版本仍然存在,但会被读写层中的新版本文件所隐藏,当docker commit这个修改过的容器文件系统为一个新的镜像时,保存的内容仅为最上层读写文件系统中被更新过的文件
4>联合挂载时用于将多个镜像层的文件系统挂载到一个挂载点来实现一个统一文件系统视图的途径,是下层存储驱动(aufs,overlay等)实现分层合并的方式
镜像加载过程.png -
镜像层级文件探究
1>查看镜像层文件列表:ll /var/lib/docker/image/overlay/layerdb/sha256
2>镜像层文件结构: ll f8441ccf82f65bfdcb180c14a811ddf3622a0d4f802f3b69c972c3af4588da14
3>查看镜像层:docker history 镜像ID
-
- 容器使用
- 容器是独立运行的一个或一组应用,以及他们的运行态环境
- docker run 创建并启动一个容器
- docker create创建一个容器,但不启动,create后,可以使用docker start启动容器
- 运行容器的参数
-d: 后台运行容器,并返回容器ID -i: 以交互模式运行容器,通常与-t同时使用 -p: 端口映射,格式为:主机(宿主)端口:容器端口 -t: 为容器重新分配一个伪输入终端,通常与-i同时使用; --name="nginx-lib": 为容器指定一个名称 --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致 -m:设置容器使用内存最大值 --net="bridge": 网络连接类型,支持bridge/host/noen/container四种类型 --link=[]: 添加链接到另一个容器 --expose=[]: 开放一个端口或一组端口
-
启动容器
1> 交互式创建容器并进入:docker run -it --name centos centos /bin/bash(前台进程)a, exit 退出也关闭容器 b, Ctrl+P+Q 退出不关闭容器
2> 进入已运行的容器:docker exec -it centos /bin/bash
3> 查看容器的元数据:docker inspect nginx
4> 绑定容器端口到主机:docker run -d -p 8080:80 --name nginx nginx:latest
5> 挂载主机文件目录到容器内:docker run -dit -v /root/json_dir/:/pdir --name cent centos
6> 复制主机文件到容器内:docker cp anaconda-ks.cfg cent:/var
- 仓库
- docker官方仓库:https://hub.docker.com
- 常用命令:docker pull/search/login/push/tag
1>tag: 标记本地镜像,将其归入某一仓库
2>push: 推送镜像到仓库 --非私有仓库需要登录
3>search: 在仓库中查询镜像 --无法查询到tag版本
4>pull: 下载镜像到本地
5>login: 登录远程仓库 - 私有仓库
1>拉取私有仓库镜像 docker pull registry
2>运行私有仓库:docker run -d --name reg -p 5000:5000 registry
3>查询私有仓库:curl http://192.168.244.7:5000/v2/_catalog 或 curl http://192.168.244.5:5000/v2/hello-world/tags/list
4>打标签到私有仓库:docker tag hello-world 192.168.244.7:5000/hello:1.0
5>推送到私有仓库:docker push 192.168.244.7:5000/hello 。push异常时一般需要做下面的配置
(1)配置/etc/docker/daemon.json,设置可以http访问 a,默认私有仓库只能使用https访问,如果想要使用http也可以访问,需要设置内容:"insecure-registries":["192.168.244.5:5000"] b,修改后重启docker或者重新加载daemon才能启用修改后的配置:systemctl daemon-reload | systemctl restart docker c,同时可以在当前文件中配置加速器:"registry-mirrors" : ["https://registry.docker-cn.com"] d,同时可以在此文件设置容器ip的网段:"bip":"172.17.5.1/24" e,daemon.json内容如下: { "registry-mirrors": [ "https://registry.docker-cn.com" ], "insecure-registries": [ "192.168.19.22:5000" ], "bip":"172.17.1.1/24" } (2)配置/etc/sysconfig/docker,设置OPTIONS='–selinux-enabled --insecure-registry 192.168.137.17:5000' (3)当(1)和(2)配置成功后,需要重启docker,并且私有仓库容器需要在配置后重新启动
网友评论