三文搞懂学会Docker容器技术(下)
接着上面一篇:三文搞懂学会Docker容器技术(上)
7,Docker容器目录挂载
7.1 简介
容器目录挂载:
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以实现宿主机和容器目录的双向数据自动同步;
7.2 作用
前面学过cp命令来实现数据传递,这种方式比较麻烦;
我们通过容器目录挂载,能够轻松实现代码上传,配置修改,日志同步等需求;
7.3 实现
语法:
docker run -it -v /宿主机目录:/容器目录 镜像名
多目录挂载
docker run -it -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名
注意:
如果你同步的是多级目录,可能会出现权限不足的提示;
这是因为Centos7中的安全模块selinux把权限禁掉了,我们需要添加 --privileged=true 来解决挂载的目录没有权限的问题;
7.4 挂载目录只读
docker run -it -v /宿主机目录:/容器目录:ro 镜像名
8,Docker迁移与备份
8.1 概述
我们开发的时候,经常自定义镜像,然后commit提交成镜像到本地仓库,但是我们发布到客户服务器的时候,可以用前面讲得搞到hub官方,或者阿里云,但是有些机密性的项目,是禁止公网存储的,所以我们只能通过docker镜像备份和迁移实现;
8.2 实现
备份镜像:
docker save -o 备份镜像的名称 源镜像名称:tag版本
docker save -o mytomcat7.1.tar java1234/tomcat7:7.1
恢复镜像:
docker load -i 镜像文件
docker load -i mytomcat7.1.tar
9,DockerFile详解
9.1 DockerFile简介
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于操作系统(centos或者Ubuntu)基础镜像并最终创建的一个新镜像;
我们前面讲过的用手工的方式,修改配置文件,或者添加,删除文件目录的方式,来构建一种新镜像;这种手工方式麻烦,容易出错,而且不能复用;
我们这里讲Dockerfile,用脚本方式来构建自动化,可复用的,高效率的创建镜像方式,是企业级开发的首选方式;
再软件系统开发生命周期中,采用Dockerfile来构建镜像;
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作;
3、对于运维人员:在部署时,可以实现应用的无缝移植。
9.2 DockerFile常用指令
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程
MAINTAINER user_info 声明镜像维护者信息
LABEL key value 镜像描述元信息(可以写多条)
ENV key value 设置环境变量(可以写多条)
RUN command 构建镜像时需要运行的命令(可以写多条)
WORKDIR path_dir 设置终端默认登录进来的工作目录
EXPOSE port 当前容器对外暴露出的端口
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file 和ADD相似,但是如果有压缩文件是不能解压
VOLUME 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等
CMD 指定容器启动时要运行的命令,假如有多个CMD,最后一个生效
ENTRYPOINT 指定容器启动时要运行的命令
ONBUILD 当构建一个被继承的Dockerfile时运行的命令,父镜像在被子镜像继承后父镜像的onbuild被触发。可以把ONBUID理解为一个触发器。
10,Docker私有仓库
10.1 简介
Docker私有仓库主要是企业内部用来存放镜像的仓库,相对官方仓库以及阿里云仓库,具有更高的保密安全级别;
10.2 私有仓库搭建
第一步:拉取私有仓库镜像 (私有仓库程序本身就是一个镜像)
docker pull registry
第二步:启动私有仓库容器
docker run -di --name=myRegistry -p 5000:5000 registry
第三步:测试
http://192.168.1.112:5000/v2/_catalog
看到这个 说明启动OK。因为仓库里还没有镜像,所以就是空的;
第四步:etc/docker 修改daemon.json,让docker信任私有仓库地址
"insecure-registries": ["192.168.1.112:5000"]
第五步:修改配置后重启docker;
systemctl restart docker
10.3 私有仓库测试
第一步:标记此镜像为私有仓库的镜像
docker tag tomcat:7 192.168.1.112:5000/mytomcat7
第二步:上传镜像到私有仓库
docker push 192.168.1.112:5000/mytomcat7
此时私有仓库里已经有了这个镜像;
第三步:删除192.168.1.112:5000/mytomcat7本地仓库镜像
docker rmi -f 192.168.1.112:5000/mytomcat7
第四步:从私有仓库拉取192.168.1.112:5000/mytomcat7镜像,并运行;
docker run -it -p 8080:8080 192.168.1.112:5000/mytomcat7
第五步:浏览器运行 http://192.168.1.112:8080测试
------------------------------------------------------------------------------------------------------------------------------
作者: java1234_小锋
出处:https://www.cnblogs.com/java688/p/13174647.html
版权:本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。
------------------------------------------------------------------------------------------------------------------------------
回复关键字「666」获取66套Java实战项目视频教程,你要的都有!
回复关键字「全栈」获取Java从入门到大神系列全栈开发教程;
回复关键字「面试」获取一份2020Java笔试面试题;
回复关键字「简历」获取50套Java经典优秀简历模版;
回复关键字「BAT」获取历年来BAT笔试面试题打包合集;