三文搞懂学会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」创作共享协议,转载请在文章明显位置注明作者及出处。
------------------------------------------------------------------------------------------------------------------------------
三文搞懂学会Docker容器技术(下)的更多相关文章
- 三文搞懂学会Docker容器技术(中)
接着上面一篇:三文搞懂学会Docker容器技术(上) 6,Docker容器 6.1 创建并启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] --na ...
- 三文搞懂学会Docker容器技术(上)
1,Docker简介 1.1 Docker是什么? Docker官网: https://www.docker.com/ Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2. ...
- 一文搞懂各种 Docker 网络 - 每天5分钟玩转 Docker 容器技术(72)
前面各小节我们先后学习了 Docker Overaly,Macvaln,Flannel,Weave 和 Calico 跨主机网络方案.目前这个领域是百家争鸣,而且还有新的方案不断涌现. 本节将从不同维 ...
- 第 8 章 容器网络 - 072 - 一文搞懂各种 Docker 网络
Docker 起初只提供了简单的 single-host 网络,显然这不利于 Docker 构建容器集群并通过 scale-out 方式横向扩展到多个主机上. 跨主机网络方案: Docker Over ...
- 072、一文搞懂各种Docker网络 (2019-04-17 周三)
参考https://www.cnblogs.com/CloudMan6/p/7587532.html 前面各个小节我们学习了 Docker Overlay .Macvlan .Flannel.We ...
- 【转帖】一文看懂docker容器技术架构及其中的各个模块
一文看懂docker容器技术架构及其中的各个模块 原创 波波说运维 2019-09-29 00:01:00 https://www.toutiao.com/a6740234030798602763/ ...
- 一张表搞懂各种 Docker 监控方案 - 每天5分钟玩转 Docker 容器技术(86)
前面我们已经介绍了ps/top/stats.Sysdig.Weave Scope.cAdvisor 和 Prometheus 多种容器监控工具和方案,是时候做一个比较了.下面将从五个方面来对比它们之间 ...
- 一文了解Docker容器技术的操作
一文了解Docker容器技术的操作 前言一.Docker是什么二.Docker的安装及测试Docker的安装Docker的Hello world测试三.Docker的常见操作镜像的基本操作容器的基本操 ...
- 读懂 Deployment YAML - 每天5分钟玩转 Docker 容器技术(125)
既然要用 YAML 配置文件部署应用,现在就很有必要了解一下 Deployment 的配置格式,其他 Controller(比如 DaemonSet)非常类似. 还是以 nginx-deploymen ...
随机推荐
- 【Ubuntu】Ubuntu中下载特定版本内核和设置某版本内核为默认启动内核
0. 基本命令 uname -a # 查看当前所使用内核 dpkg -l | grep linux # dpkg后是lmn的l.查看当前操作系统的内核 dekg -l | grep linux-ima ...
- C语言/Linux命令行参数argc、argv[ ]详解
1.void main(int argc,char *argv[]) argv[]:表示的是一个指针数组,一共有argc个元素,其中存放的是指向每一个参数的指针. argc:参数个数 2.以Linux ...
- Cypress系列(9)- Cypress 编写和组织测试用例篇 之 钩子函数Hook
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html Hook 就是常说的钩子函数,在 pyt ...
- F5忘记密码修改教程
!!!首先查看系统版本,13版本和14版本修改密码方式不一致 首先介绍13版本修改密码 注:12版本也适用,11版本未测试,应该也可以,有问题欢迎留言) 1. 将终端连接到BIG-IP串行控制台端口. ...
- java方法句柄-----1.方法句柄类型、调用
目录 方法句柄 1.方法句柄的类型 1.1MethodType类的对象实例的创建 1.1.1 通过指定参数和返回值的类型来创建MethodType.[显式地指定返回值和参数的类型] 1.1.2 通过静 ...
- api.versioning 版本控制 自动识别最高版本
Microsoft.AspNetCore.Mvc.Versioning //引入程序集 .net core 下面api的版本控制作用不需要多说,可以查阅https://www.cnblogs.com/ ...
- golang内存逃逸
golang程序变量会携带油一组校验数据,用来证明它的整个生命周期是否在运行时完全可知.如果变量通过了这些校验,它就可以在栈上分配.否则就说它逃逸了,必须在堆上分配 能引起变量逃逸到堆上的典型 ...
- Java实现 LeetCode 803 打砖块 (DFS)
803. 打砖块 我们有一组包含1和0的网格:其中1表示砖块. 当且仅当一块砖直接连接到网格的顶部,或者它至少有一块相邻(4 个方向之一)砖块不会掉落时,它才不会落下. 我们会依次消除一些砖块.每当我 ...
- Java实现 蓝桥杯VIP 算法提高 质数的后代
算法提高 质数的后代 时间限制:1.0s 内存限制:256.0MB 问题描述 在上一季里,曾提到过质数的孤独,其实从另一个角度看,无情隔膜它们的合数全是质数的后代,因为合数可以由质数相乘结合而得. 如 ...
- Java实现 蓝桥杯VIP 算法提高 栅格打印问题
算法提高 栅格打印问题 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,输入两个整数,作为栅格的高度和宽度,然后用"+"."-"和&quo ...
