三文搞懂学会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 ...
随机推荐
- 华容道题解 NOIP2013 思路题!
第一次发紫题题解,居然在发布前太激动,把刚写好的还没发布的题解一个Ctrl+A和Backspace全删了.(所以这是二稿) luogu题目传送门 前置: 做本题一定要有的一些思想: 1.从简思想: 模 ...
- Python--numpy中的tile()函数
首先是官方给的定以(我是用的VsCode,鼠标放置在tile上出现的),建议直接看后面的示例. def tile(A, reps) Construct an array by repeating ...
- “造轮运动”之 ORM框架系列(一)~谈谈我在实际业务中的增删改查
想想毕业已经快一年了,也就是大约两年以前,怀着满腔的热血正式跨入程序员的世界,那时候的自己想象着所热爱的技术生涯会是多么的丰富多彩,每天可以与大佬们坐在一起讨论解决各种牛逼的技术问题,喝着咖啡,翘着二 ...
- jchdl - 初次使用建立项目示例
https://mp.weixin.qq.com/s/HaarKjpHan08RUTlEX0XHg 一. 下载并安装JDK 8 下载链接:https://www.oracle.com/tech ...
- position的值?
static(默认):按照正常文档流进行排列:relative(相对定位):不脱离文档流,参考自身静态位置通过 top, bottom, left, right 定位:absolute(绝对定位):参 ...
- 本地计算机上的MySQL80服务启动后停止,某些服务在未由其他服务或者程序使用时将自动停止
是由于mysql server XX 路径下的my.ini文件发生错误. 高版本的mysql server的my.ini文件不在mysql server XX路径下,在programdata文件夹(查 ...
- Nginx 笔记(二)nginx常用的命令和配置文件
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.nginx常用的命令 (1)启动命令 在/usr/local/nginx/sbin 目录下执行 ./ ...
- 高性能可扩展mysql 笔记(三)Hash分区、RANGE分区、LIST分区
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.MySQL分区表操作 1.定义:数据库表分区是数据库基本设计规范之一,分区表在物理上表现为多个文件, ...
- Java实现 LeetCode 767 重构字符串(ASCII的转换)
767. 重构字符串 给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同. 若可行,输出任意可行的结果.若不可行,返回空字符串. 示例 1: 输入: S = "aab&qu ...
- Java实现蓝桥杯模拟递增的数
问题描述 一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如1135是一个数位递增的数,而1024不是一个数位递增的数. 给定正整数 n,请问在整数 1 至 n 中有多少个数 ...
