容器间共享文件

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 来构建需要多个容器配合的应用,例如 wordpressdjango 等,通常我们要创建一个 Web 应用,是离不开数据库,缓存,web 系统本身等多个服务支撑,Docker Compose 可以帮助我们更好地使用多个容器来创建和管理复杂的系统。

Docker进阶使用1的更多相关文章

  1. 【云计算】Docker云平台—Docker进阶

    Docker云平台系列共三讲,此为第二讲:Docker进阶 参考资料: 五个Docker监控工具的对比:http://www.open-open.com/lib/view/open1433897177 ...

  2. Docker进阶

    Docker进阶 Docker容器命名与重命名 命名 docker run -it -p 80:80 --name containerName img:tag /bin/bash 重命名 docker ...

  3. Docker:四、Docker进阶 Windows Docker IIS 部署

    前面的三篇docker 文档大家看的肯定不过瘾,自己可能也已经上手一试了...不知道有没有发现问题... 哈哈... 我来说说我遇到的问题哦 一.windows docker 镜像越来越大 默认的do ...

  4. Ubuntu Server下docker实战 02: docker进阶配置

    在上一篇文章里<Ubuntu Server下docker实战 01: 安装docker>,我们已经把docker安装起来了,并运行了一个hello-world 这一篇,我们继续讲进阶配置. ...

  5. docker进阶之路-基础篇 | 一:环境搭建

    转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12061747.html 一.准备工作 查看内核 Docker 要求 CentOS ...

  6. docker进阶之路-基础篇 | 二:portainer安装与基本使用

    转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12061755.html ​简介 Portainer 是轻量级,跨平台,开源的管理D ...

  7. 斌哥的 Docker 进阶指南—监控方案的实现

    过去的一年中,关于 Docker 的话题从未断过,而如今,从尝试 Docker 到最终决定使用 Docker 的转化率依然在逐步升高,关于 Docker 的讨论更是有增无减.另一方面,大家的注意力也渐 ...

  8. 斌哥的 Docker 进阶指南

    过去的一年中,关于 Docker 的话题从未断过,而如今,从尝试 Docker 到最终决定使用 Docker 的转化率依然在逐步升高,关于 Docker 的讨论更是有增无减.另一方面,大家的注意力也渐 ...

  9. docker进阶-搭建私有企业级镜像仓库Harbor

    为什么要搭建私有镜像仓库   对于一个刚刚接触Docker的人来说,官方的Docker hub是用于管理公共镜像.既然官方提供了镜像仓库我们为什么还要去自己搭建私有仓库呢?虽然也可以托管私有镜像.我们 ...

随机推荐

  1. python+requests+unittest API接口测试

    黑熊再网上查找了下接口测试相关的资料,大都重点是以数据驱动的形式,见用例维护在文本或表格中,而没有说明怎么样去生成想要的用例, 问题: 测试接口时,比如参数a,b,c,我要先测a参数,有(不传,为空, ...

  2. unity3D:游戏分解之角色移动和相机跟随

          游戏中,我们经常会有这样的操作,点击场景中某个位置,角色自动移动到那个位置,同时角色一直是朝向那个位置移动的,而且相机也会一直跟着角色移动.有些游戏,鼠标滑动屏幕,相机就会围绕角色旋转. ...

  3. 用Java写的简单五子棋游戏(原创五子连珠算法)

    源码jar包(已安装jdk环境可直接运行) 下载地址:http://download.csdn.net/detail/eguid_1/9532912 五子连珠算法为自创算法,对于五子棋该算法性能足以. ...

  4. 微信公众平台开发实战Java版之如何网页授权获取用户基本信息

    第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...

  5. js数组及数组应用(冒泡和二分,遍历输出)

    一.定义:1)var arr=new Array(); 加数据:arr[0]=1; 2)定义同时赋值:var arr=new Array(1,2,3,4,5); 3)调用:var arr=new Ar ...

  6. docker 汇总

    整理中 ... 一. docker 基础 配置参数最佳实践 二. docker 编排工具 docker swarm mesos kubernetes AWS ECS 三. docker 生态 dock ...

  7. 深入浅出 spring-data-elasticsearch - 基本案例详解(三

    『  风云说:能分享自己职位的知识的领导是个好领导. 』运行环境:JDK 7 或 8,Maven 3.0+技术栈:SpringBoot 1.5+, Spring Data Elasticsearch ...

  8. [项目记录]一个.net下使用HAP实现的吉大校园通知网爬虫工具:OAWebScraping

    第一章 简介 本文主要介绍了在.NET下利用优秀的HTML解析组件HtmlAgilityPack开发的一个吉林大学校内通知oa.jlu.edu.cn的爬取器.尽管.Net下解析HTML文件有很多种选择 ...

  9. ue4加载界面(loadingscreen)的实现

    即使开放世界已然成为现今游戏趋势,切换关卡过程中的读条仍是很难避免的,譬如进入房屋.传送到其他世界等等. 于是就引入了loadingscreen这一需求. loadingscreen顾名思义就是加载过 ...

  10. salesforce零基础学习(七十三)ProcessInstanceWorkItem/ProcessInstanceStep/ProcessInstanceHistory浅谈

    对于审批流中,通过apex代码进行审批操作一般都需要获取当前记录对应的ProcessInstanceWorkitem或者ProcessInstanceStep然后执行Approval.process操 ...