Docker进阶使用1
容器间共享文件
Docker 的容器和外部环境是相对隔离的,并且容器是一次性的,运行结束后并不会有任何的持久化的文件或者数据。所以当我们需要做应用数据的持久化,或者保留应用的日志文件时,我们需要用到 Docker 提供的一些方法来把外部系统的目录映射到容器的目录,从而达到把我们需要的持久化数据存放在特定位置的目的。
对于 docker run
命令,我们可以使用 docker run -v [host-src]:[container-dest][:<options>]
来指定目录的映射。其中,host-src
是系统目录,container-dest
是要映射到的容器里的目录,options
是可选的配置选项,通常是权限配置,例如 ro
只读,或者 rw
可读可写等。
假设我们要把 /var/tmp
映射到容器中的 /var/tmp
,我们可以这么做:
docker run -v /var/tmp:/var/tmp:rw -it ubuntu bash
更多的相关内容可以参考:mount volume
所以,你可以通过把一个系统目录映射到多个容器中去,通过这种方式在系统和多个容器中共享文件和目录。
更加有趣的时,Docker 可以运行一个容器,然后使用 --link
来连接到现有运行的一个容器中,去获取某些需要的数据或者文件,例如 reliable-master 中用到数据导出脚本:mongo-dump.sh
创建一个自己的镜像
创建一个目录,然后新建一个 Dockerfile
文件,Docker 在创建镜像时要基于这个文件的配置,我们看下这个文件应该有哪些内容:
FROM: docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortune
CMD /usr/games/fortune -a | cowsay
FROM
表示即将创建的镜像基于哪一个镜像来创建,假设你要创建一个 node 应用的镜像,那么你可能是 FROM: node:latest
。
RUN
表示在创建镜像时,运行后边的命令来更新镜像的相关内容,很多情况下是用于安装你应用相关的依赖,所以 apt-get
用得很多。
CMD
,表示容器运行镜像时默认执行的命令,当我们上边这个镜像创建后,使用 run 时,会在镜像加载好了之后在容器环境中运行 /user/games/fortune -a | cowsay
。一个镜像只能有一个 CMD
配置,如果有多个,默认是使用最后一个。
写好 Dockerfile
文件之后,在该目录下运行 docker build -t docker-whale .
。
-t
用于指定镜像的名称,通常我们会使用 <组织名>/<应用名>
来作为镜像名称,可以参考 Docker Hub 上现有的镜像。
接下来就可以看到 Docker 开始创建镜像,结束之后,如果没报错信息,那么你可以使用 docker images
查看到你刚才创建的镜像。
现在很多的项目都会带上 Dockerfile
文件,例如 docker-node 等,所以你可以尝试去了解这些项目的 Dockerfile
文件,看看是如何构建镜像的。
关于 Dockerfile
详细的说明可以参考官网文档:Dockerfile reference。
由于 Docker 特殊的文件分层以及容器创建的步骤,良好地编写 Dockerfile
可以让容器运行地更加高效,推荐这一篇文章 How to optimize your dockerfile。
使用 Docker Compose
Docker Compose 的安装这里不赘述了,根据官网文档很容易便可以安装好:https://docs.docker.com/compose/install/
由于 Docker Compose 是一个很有用,并且相对常用的东西,所以在这简单提及一下,Docker Compose 是可以把多个容器连接到一起统一管理的工具,我们先来看下是怎么使用的。
可以看下官网提供的 Demo ,了解一下 Docker Compose 使用起来是怎么样的。
首先,我们需要创建一个 docker-compose.yml
文件,例如官网给出的 wordpress 例子:
version: '2'
services:
web:
build: .
command: php -S 0.0.0.0:8000 -t /code/wordpress/
ports:
- "8000:8000"
depends_on:
- db
volumes:
- .:/code
db:
image: orchardup/mysql
environment:
MYSQL_DATABASE: wordpress
一个 docker-compose.yml
大致的内容如上,一个主要的服务名称,然后便是这个这个服务对应的容器相关的配置,例如容器名称,构建的目录,端口映射,容器连接,对外的环境变量,目录映射,运行命令等。整个配置文件相对清晰易懂。
在这个文件中,可以编写多个服务的配置,然后在该目录下运行 docker-compose up
便可以运行这个文件配置的相关服务,而无须手动地一个个去启动需要的容器,同时,这个配置文件管理各个容器之间的关系也相对容易。更多详细内容请参考官方文档 compose file。
官方提供了很多例子来说明如何使用 Docker Compose 来构建需要多个容器配合的应用,例如 wordpress,django 等,通常我们要创建一个 Web 应用,是离不开数据库,缓存,web 系统本身等多个服务支撑,Docker Compose 可以帮助我们更好地使用多个容器来创建和管理复杂的系统。
Docker进阶使用1的更多相关文章
- 【云计算】Docker云平台—Docker进阶
Docker云平台系列共三讲,此为第二讲:Docker进阶 参考资料: 五个Docker监控工具的对比:http://www.open-open.com/lib/view/open1433897177 ...
- Docker进阶
Docker进阶 Docker容器命名与重命名 命名 docker run -it -p 80:80 --name containerName img:tag /bin/bash 重命名 docker ...
- Docker:四、Docker进阶 Windows Docker IIS 部署
前面的三篇docker 文档大家看的肯定不过瘾,自己可能也已经上手一试了...不知道有没有发现问题... 哈哈... 我来说说我遇到的问题哦 一.windows docker 镜像越来越大 默认的do ...
- Ubuntu Server下docker实战 02: docker进阶配置
在上一篇文章里<Ubuntu Server下docker实战 01: 安装docker>,我们已经把docker安装起来了,并运行了一个hello-world 这一篇,我们继续讲进阶配置. ...
- docker进阶之路-基础篇 | 一:环境搭建
转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12061747.html 一.准备工作 查看内核 Docker 要求 CentOS ...
- docker进阶之路-基础篇 | 二:portainer安装与基本使用
转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12061755.html 简介 Portainer 是轻量级,跨平台,开源的管理D ...
- 斌哥的 Docker 进阶指南—监控方案的实现
过去的一年中,关于 Docker 的话题从未断过,而如今,从尝试 Docker 到最终决定使用 Docker 的转化率依然在逐步升高,关于 Docker 的讨论更是有增无减.另一方面,大家的注意力也渐 ...
- 斌哥的 Docker 进阶指南
过去的一年中,关于 Docker 的话题从未断过,而如今,从尝试 Docker 到最终决定使用 Docker 的转化率依然在逐步升高,关于 Docker 的讨论更是有增无减.另一方面,大家的注意力也渐 ...
- docker进阶-搭建私有企业级镜像仓库Harbor
为什么要搭建私有镜像仓库 对于一个刚刚接触Docker的人来说,官方的Docker hub是用于管理公共镜像.既然官方提供了镜像仓库我们为什么还要去自己搭建私有仓库呢?虽然也可以托管私有镜像.我们 ...
随机推荐
- python+requests+unittest API接口测试
黑熊再网上查找了下接口测试相关的资料,大都重点是以数据驱动的形式,见用例维护在文本或表格中,而没有说明怎么样去生成想要的用例, 问题: 测试接口时,比如参数a,b,c,我要先测a参数,有(不传,为空, ...
- unity3D:游戏分解之角色移动和相机跟随
游戏中,我们经常会有这样的操作,点击场景中某个位置,角色自动移动到那个位置,同时角色一直是朝向那个位置移动的,而且相机也会一直跟着角色移动.有些游戏,鼠标滑动屏幕,相机就会围绕角色旋转. ...
- 用Java写的简单五子棋游戏(原创五子连珠算法)
源码jar包(已安装jdk环境可直接运行) 下载地址:http://download.csdn.net/detail/eguid_1/9532912 五子连珠算法为自创算法,对于五子棋该算法性能足以. ...
- 微信公众平台开发实战Java版之如何网页授权获取用户基本信息
第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...
- js数组及数组应用(冒泡和二分,遍历输出)
一.定义:1)var arr=new Array(); 加数据:arr[0]=1; 2)定义同时赋值:var arr=new Array(1,2,3,4,5); 3)调用:var arr=new Ar ...
- docker 汇总
整理中 ... 一. docker 基础 配置参数最佳实践 二. docker 编排工具 docker swarm mesos kubernetes AWS ECS 三. docker 生态 dock ...
- 深入浅出 spring-data-elasticsearch - 基本案例详解(三
『 风云说:能分享自己职位的知识的领导是个好领导. 』运行环境:JDK 7 或 8,Maven 3.0+技术栈:SpringBoot 1.5+, Spring Data Elasticsearch ...
- [项目记录]一个.net下使用HAP实现的吉大校园通知网爬虫工具:OAWebScraping
第一章 简介 本文主要介绍了在.NET下利用优秀的HTML解析组件HtmlAgilityPack开发的一个吉林大学校内通知oa.jlu.edu.cn的爬取器.尽管.Net下解析HTML文件有很多种选择 ...
- ue4加载界面(loadingscreen)的实现
即使开放世界已然成为现今游戏趋势,切换关卡过程中的读条仍是很难避免的,譬如进入房屋.传送到其他世界等等. 于是就引入了loadingscreen这一需求. loadingscreen顾名思义就是加载过 ...
- salesforce零基础学习(七十三)ProcessInstanceWorkItem/ProcessInstanceStep/ProcessInstanceHistory浅谈
对于审批流中,通过apex代码进行审批操作一般都需要获取当前记录对应的ProcessInstanceWorkitem或者ProcessInstanceStep然后执行Approval.process操 ...