dock

阅读 / 问答 / 标签

dock,pier,quay和wharf的区别?

基本解释dockn.<美> 码头, 船坞, 被告席, 尾巴的骨肉部分vt.靠码头, 引入坞, 剪短vi.入船坞基本解释piern.码头, (桥)墩基本解释quayn.码头基本解释wharfn.码头vt.卸上码头, 靠在码头vi.靠码头习惯用语 | 词性变化 | 参考词汇 | 更多...近/反义词现代英汉综合大辞典基本解释wharfn.(pl. wharves [(h)wC:vz], wharfs ) 码头a wharfrat[美俚]码头贼习惯用语 | 词性变化 | 参考词汇 | 更多...近/反义词现代英汉词典基本解释wharfn.wharfs 或 wharves码头习惯用语 | 词性变化 | 参考词汇 | 更多...近/反义词英汉图解词典基本解释wharfn.码头,停泊所

linux docky怎么使用

linux下有一个神器叫做docky,是一个mac风格的启动器。但是,现在的ubuntu上的自带启动器本来就在下方,再在下方加一个docky,整个屏幕被俩启动器占了大半,工作区域就小了不少。解决方法之一就是关掉或隐藏系统自带启动器,但这样又不方便,因为docky上默认只显示当前正在运行的程序。所以,另一个解决办法就是把系统自带启动器调回到左侧。然而,在启动器的设置里并没有这个设置选项。没关系,linux的优点之一就是一切都能改,一切在于折腾。我们只需要在终端里输入如下语句: gsettings set com.canonical.Unity.Launcher launcher-position Left神奇的事情就发生了~~当然,如果你想把它调回去,只需要把上面语句的Left改成Bottom: gsettings set com.canonical.Unity.Launcher launcher-position Bottom然后,我们就可以玩我们的docky了~~在uk商店里找到docky,安装。或者~sudo apt-get install docky就可以安装docky了。想要学习Linux的话可看看书籍《Linux就该这么学》。

有哪些界面库提供了类似于Visual Studio那样的dock布局方式

先自问自答一发,写一下我知道的支持dock布局的界面库和不足之处(只说dock功能):1.MFC,从VS2010开始的MFC开始支持的比较完善,完全可以实现类似VS2008界面中的各种dock功能,可惜不跨平台,而且不能隐藏客户区2.BCGControlBar,基于MFC的,基本上和VS自带的MFC差不多,就是多了些皮肤,商业的,购买后能得到源码3.Xtreme Toolkit Pro,也是基于MFC的,也是商业的购买后能得到源码,功能比VS自带的MFC和和BCG多很多,可以隐藏客户区,也能换皮肤4.DockPanel Suite,C# winform的,开源(好像不更新了也不知道是转闭源了),可以用mono跨平台,不过我在linux测试各种崩溃。。。不能隐藏客户区但是文档也可以dock,其他功能都能实现5.AvalonDock - Home,WPF的,也好久没更新了,也是不能隐藏客户区但是文档也可以dock,其他功能都能实现6.Qt的QDockWidget,两个可停靠窗口不能并排,而且有些地方不能停靠(不太好描述,不知道是不是qt的bug),不能自动隐藏,拖动时没有箭头引导,可停靠窗口标题栏不能添加按钮,比较丑...7.wxWidgets的aui,两个可停靠窗口不能重叠,没有 自动隐藏,拖动时没有箭头引导,不能隐藏客户区8.有很多java的界面库能实现dock,对java写界面不熟,详细情况不太清楚9.最近发现有个Eiffel语言,这个语言有个界面库能实现跟上面说的绝大多数功能,也可以跨主流的平台,可惜只是编译了下dock的example生成的可执行程序就100M+,不知道是不是我搞错了10.gtk也有个dock组件,gimp好像就是用的他,不过效果很差劲11.还有一大堆C#写的,都比DockPanel Suit和AvalonDock差太远了,没什么实用价值12.Win32++,bug太多,隐藏客户区自动隐藏这些功能也都无法实现13.WTL也有个dock库,一时间找不到了,功能上倒是都挺齐全不过也是有年头没更新了,还不如用MFC14.VCL中好像也有,不过功能也是不全,不跨平台大概也就这些了。

Hickory Dickory Dock 歌词

Hickory Dickory dockThe snowman ran up the clockThe clock struck oneThe snowman ran downHickory Dickory dockHickory Dickory dockThe mummy ran up the clockThe clock struck oneThe mummy ran downHickory Dickory dockHickory Dickory dockThe skeleton ran up the clockThe clock struck oneThe skeleton ran downHickory Dickory dock

docker中solr的solrhome配置

docker中solr的solrhome配置如下:<Context docBase="${the_path_to solr.war}" debug="0" crossContext="true" ><Environment name="solr/home" type="java.lang.String" value="${the_path_to solr_home}" override="true" /></Context>基于环境变量:在${ tomcat_home}/bin/catalina.sh中添加如下环境变量: export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=${the_path_to solr_home}"

【Docker-Solr】打开Solr控制台报500错误

=== ERROR 1 === HTTP ERROR 500 Problem accessing /solr/. Reason: Server Error Caused by: javax.servlet.ServletException: javax.servlet.UnavailableException: Error processing the request. CoreContainer is either not initialized or shutting down. === ERROR 2 === [root@localhost ~]# docker-compose up -d ERROR: Can"t find a suitable configuration file in this directory or any parent. Are you in the right directory? Supported filenames: docker-compose.yml, docker-compose.yam

使用docker搭建Swagger

json文件挂在到容器中 -p:宿主机端口:容器端口,将容器端口暴露给宿主机端口 -d:后台启动 -e:执行容器中/foo/swagger.json -v:将宿主机中/home/service/swagger/swagger.json挂载到容器 /foo中执行 输入:http://主机IP:端口

docker安装zerotier设置tup

步骤如下:1.安装DOCKER在云服务器上安装DOCKER,简单一点的可以先安装宝塔面板,在宝塔面板市场里搜索DOCKER,这个几个docker管理器都可以用,关于如何安装宝塔可以自行百度一下,一天命令,非常简单。2.部署moon服务安装dockerzerotier-moon服务打开宝塔终端工具,输入命令dockerpullseedgou/zerotier-moon,在docker上部署zerotier服务dockerrun--namezerotier-moon-d--restartalways-p9993:9993/udp-v/home/zerotier-moon:/var/lib/zerotier-oneseedgou/zerotier-moon-410.0.0.1。运行之后可以在docker面板里看到正常运行的moondocker服务。注意:在宝塔面板安全里开放9993端口,如果是腾讯云或者其他云服务器记得在防火墙里开放9993端口服务。把刚刚挂载的目录里自动生成moons.d文件夹下载到本地备用3.配置win客户端Windows客户端加入moon自建节点将moons.d文件夹整个复制到ZeroTier安装目录下默认路径为:C:ProgramFiles(x86)ZeroTierOne,打开WindowsPowershell,输入命令zerotier-cliorbitxxxxxxxxxxxxxxxxxxxx,将xxxxxxxxxx替换为你的moonid,在服务器终端面板里运行下面命令查看moonid,dockerlogszerotier-moon,WindowsPowershell显示提示200orbitok表示添加moon节点成功此后重启zerotier,完毕。4.测试服务查看是否成功加入moon服务器节点,查看节点信息命令zerotier-clilistpeers,当你看到某一行后面带有moon字样,就证明已经加入到moon自建节点中其中PLANET为官方的根服务器。

Seattle WA Dock 是美国哪个港口

你是想问西雅图 华盛顿州 港口还是想问的更具体的?

dockerfile不配置基础镜像

当想让一个容器做两件事情,或者使一个Docker镜像包含来自两个不同镜像的依赖库时,就需要知道每个镜像的Dockerfile。本文介绍了如何通过dockerhistory命令来对Docker镜像进行反向工程,得到它们的Dockerfile,并组织到一个Dockerfile里然后build,从而实现想做的事情。 常言道,“不要重复发明轮子!” 在使用Docker时,构建自己的镜像之前,最好在DockerHub寻找一些可以直接使用的镜像做练习。把软件架构分布到一系列容器中,每一个容器只做一件事情,这样的效果非常好。构建分布式应用的最好的基石是使用来自DockerHub的官方镜像,因为可以信任它们的质量。 在某些情况下,可能想让一个容器做两件不同的事情。而在另外一些情况下,可能想让一个Docker镜像包含来自两个不同镜像的依赖库。如果有每个镜像的Dockerfile,这是非常简单的。将它们组织到一个Dockerfile里然后build就行。 然而,大多数时间都在使用DockerHub上准备好的镜像,不会有它们的源Dockerfile。我花时间找一个可以合并(或flatten)两个不同Docker镜像的工具,当然没有它们的Dockerfile。也就是说在找一个能做下面这件事的东西: image1----->merged_image_12 / image2-- 此前在GitHub上有两个相关的讨论(1、2),尽管它们都被关闭了。 这可能吗? 那么,是否存在工具能够像这样做吗:dockermergeimage2image2merged_image? 没有! 你甚至不可以用下面的方式来构建Dockerfile: FROMimage1 FROMimage2 简而言之,在一个Dockerfile里不能有多个基础镜像。 但是我需要这个功能! 唯一的解决办法是取得这些镜像的Dockerfile,然后把它们组织到一个文件中,再进行构建。那么,我能在DockerHub上获得一个镜像的Dockerfile吗?幸运的是可以。它不能离线获取(译注:原文是online,但显然online时对于来自GitHub的自动构建镜像是可以直接获取的),但是你可以使用dockerhistory命令,通过反向工程获取。 怎么来使用? 在你的机器上使用dockerpull从DockerHub下载镜像。 dockerpullimage1 dockerpullimage2 然后使用dockerhistory来取得构建这两个容器时运行的命令。 dockerhistory--no-trunc=trueimage>image1-dockerfile dockerhistory--no-trunc=trueimage2>image2-dockerfile 接下来打开这两个文件,你可以看到每个镜像的命令堆栈。这是因为Docker镜像通过层(阅读更多)的方式来构建。即你在Dockerfile中键入的每一个命令所构建的新镜像,都是在之前的命令产生的镜像之上。所以你可以对镜像进行逆向工程。 限制 不能对镜像进行反向工程的唯一场景,是镜像的维护者在他的Dockerfile中使用了ADD或COPY命令。你会看到这样一行: ADDfile:1ac56373f7983caf22 或ADDdir:cf6fe659e9d21535844 这是因为不知道维护者在他自己的机器上,包括镜像里使用了什么本地文件。

如何合并两个Docker 镜像

当想让一个容器做两件事情,或者使一个Docker镜像包含来自两个不同镜像的依赖库时,就需要知道每个镜像的Dockerfile。本文介绍了如何通过docker history命令来对Docker镜像进行反向工程,得到它们的Dockerfile,并组织到一个Dockerfile里然后build,从而实现想做的事情。常言道,“不要重复发明轮子!”在使用Docker时,构建自己的镜像之前,最好在Docker Hub寻找一些可以直接使用的镜像做练习。把软件架构分布到一系列容器中,每一个容器只做一件事情,这样的效果非常好。构建分布式应用的最好的基石是使用来自Docker Hub的官方镜像,因为可以信任它们的质量。在某些情况下,可能想让一个容器做两件不同的事情。而在另外一些情况下,可能想让一个Docker镜像包含来自两个不同镜像的依赖库。如果有每个镜像的Dockerfile,这是非常简单的。将它们组织到一个Dockerfile里然后build就行。然而,大多数时间都在使用Docker Hub上准备好的镜像,不会有它们的源Dockerfile。我花时间找一个可以合并(或flatten)两个不同Docker镜像的工具,当然没有它们的Dockerfile。也就是说在找一个能做下面这件事的东西:image 1 -- ---> merged_image_12 /image 2 --此前在GitHub上有两个相关的讨论(1、2),尽管它们都被关闭了。这可能吗?那么,是否存在工具能够像这样做吗:docker merge image2 image2 merged_image?没有!你甚至不可以用下面的方式来构建Dockerfile:FROM image1FROM image2简而言之,在一个Dockerfile里不能有多个基础镜像。但是我需要这个功能!唯一的解决办法是取得这些镜像的Dockerfile,然后把它们组织到一个文件中,再进行构建。那么,我能在Docker Hub上获得一个镜像的Dockerfile吗? 幸运的是可以。它不能离线获取(译注:原文是online,但显然online时对于来自GitHub的自动构建镜像是可以直接获取的),但是你可以使用docker history命令,通过反向工程获取。怎么来使用?在你的机器上使用docker pull从Docker Hub下载镜像。docker pull image1docker pull image2然后使用docker history来取得构建这两个容器时运行的命令。docker history --no-trunc=true image > image1-dockerfiledocker history --no-trunc=true image2 > image2-dockerfile接下来打开这两个文件,你可以看到每个镜像的命令堆栈。这是因为Docker镜像通过层(阅读更多)的方式来构建。即你在Dockerfile中键入的每一个命令所构建的新镜像,都是在之前的命令产生的镜像之上。所以你可以对镜像进行逆向工程。限制不能对镜像进行反向工程的唯一场景,是镜像的维护者在他的Dockerfile中使用了ADD或COPY命令。你会看到这样一行:ADD file:1ac56373f7983caf22 或 ADD dir:cf6fe659e9d21535844 这是因为不知道维护者在他自己的机器上,包括镜像里使用了什么本地文件。

docker快速部署gitlab代码仓库

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。 GitLab由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它使用 Ruby语言 写成。后来,一部分用 Go语言 重写。截止2018年5月,该公司约有290名团队成员,以及2000多名开源贡献者。GitLab被IBM,Sony,JülichResearchCenter,NASA,Alibaba,Invincea,O"ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX等组织使用。 Git、Github、Gitlab的区别: u2022 Git 一种代码版本管理系统,可以理解为标准或者统称。 u2022 Github 产品名称,基于git开发的代码管理系统,必须公开于互联网上的公共仓库,安全较低,私有项目需要另外付费。 u2022 Gitlab 产品名称,基于git开发的私有代码管理系统,开源免费、可自行管理的私有仓库,安全较高。 u2022 其它Git msysGit、 Gitee(码云)、Gitea、 Gogs、 GitBucket类似于Github、Gitlab 下面我们介绍如何用docker快速部署一套功能强大的gitlab-ce社区版代码仓库。 第一步、centos 7.6安装、配置IP、dns、网关等(略) 第二步、安装docker安装,参考作者前几天的文章《centos 7下安装docker》 https://www.toutiao.com/i6994343127452566054/ 第三步、安装docker-compose,参考作者前几天的文章《使用docker-compose运行docker容器》 https://www.toutiao.com/i6994600889604440608/ 第四步、下载gitlab-ce 13.12.10官方镜像 docker pull gitlab/gitlab-ce:13.12.10-ce.0 第五步、建立相关目录结构,配置目录权限 mkdir -p /data/gitlab/config mkdir -p /data/gitlab/data mkdir -p /data/gitlab/logs 第六步、建立docker-compose.yml cd /data/gitlab && vi docker-compose.yml docker-compose.yml具体配置和说明放本文章后面。 第七步、使用dc up -d起动容器 cd /data/gitlab && dc up -d 等待几分钟后服务初始化完成,使用宿主机IP在浏览器上进入gitlab,配置root管理员的密码。一套功能强大的gitlab代码仓库搭建完成,关于gitlab的具使用,后面会推出相关视频/文章说明。 附:docker-compose.yml version: "3.6" #配置编排的版本 services: gitlab: image: gitlab/gitlab-ce:13.12.10-ce.0 TZ: "Asia/Shanghai" #配置容器时区,不会有8小时差异 GITLAB_OMNIBUS_CONFIG: | external_url "http://172.18.95.158" #服务器访问地址,也可以是域名 gitlab_rails["time_zone"] = "Asia/Shanghai" #配置gitlab服务的时区 gitlab_rails["smtp_address"] = "smtp.exmail.qq.com" #管理员邮箱smtp地址 gitlab_rails["smtp_port"] = 465 #管理员邮箱服务器端口 gitlab_rails["smtp_user_name"] = "chenyk@xxxxxx.com" #管理员邮箱地址 gitlab_rails["smtp_password"] = "ZSfS11AssBXX" #管理员邮箱密码,配置后才可以给用户发邮件等信息 gitlab_rails["smtp_domain"] = "xxxxxx.com" #管理员邮箱域名 gitlab_rails["smtp_authentication"] = "login" #管理员邮箱的验证方式为login gitlab_rails["smtp_enable_starttls_auto"] = true #使用安全加密方式登陆管理员邮箱 gitlab_rails["smtp_tls"] = true gitlab_rails["gitlab_email_from"] = "chenyk@xxxxxx.com" #管理员邮箱账号 gitlab_rails["gitlab_shell_ssh_port"] = 22 ports: #放开gitlab 80端口,后面我们用80端口访问gitlab - "80:80" volumes: #挂载配置、数据持久化、日志目录 - ./config:/etc/gitlab - ./data:/var/opt/gitlab - ./logs:/var/log/gitlab

nexus桌面美化与mydock哪个好

nexus桌面美化好。nexus桌面美化专为电脑桌面所提供的一个美化工具,并且其中还含有多种小插件,能够使你的电脑桌面变得更加的独一无二,多种壁纸以及主图设立在其中,当你电脑瞬间炫酷。

nexus搭建docker镜像仓库

1 从docker拉取Nexus3镜像,这里使用的是3.30.0版本 2 创建nexus数据挂载目录 这里会宿主机目录权限问题,简单粗暴解决就是直接给我挂载的目录777权限,哈哈。要么就是在启动容器的时候给容器root权限。 3 运行nexus容器接着重启docker 重启nexus就可以了。 等待了一段时间发现访问nexus还是没有起起来,通过 docker logs -f nexus3 看了一下日志,发现报错了,原因就是上面挂载了目录,目录的权限用户是root,nexus在容器内部中启动的时候是以nexus用户启动的,uid 是200,操作系统root用户的uid是1000,所以必然没有写入权限,启动报错。可以通过启动时添加 --privileged=true 赋予root权限解决这个问题,但是给一个容器赋予一个root权限是有点不安全。网上有些博客通过 chown 200 -R /opt/nexus-data 我没试成功,只能先这么搞了。 PS:这里给了两个端口,8081和8082,8081是nexus的默认端口,8082预留给docker私有仓库使用。 4 创建私有docker仓库 4.1 访问界面并登录 账号是admin,密码记录在挂载目录下的/admin.password文件里面,在登陆一波。 4.2 创建仓库4.3 安全设置4.4 测试 因为我们的仓库开放的是http的端口,而docker要求使用的是https,所以这里还要添加一下信任仓库。 再次登录成功了。 4.5 制作镜像并向私有仓库推送镜像 推送成功后到nexus页面查询我们是否推送成功。 可以看到已经看到了我们用于测试的nginx镜像了。 额外用一张图补充 docker tag 命令的用法

nexus和bitdock哪个好

nexus和bitdock相比,bitdock更好。根据查询相关公开资料得知,BitDock是一款能让Windows桌面秒变Mac风格的Dock栏工具,还支持自定义添加应用、网址、文件夹等启动项,设置日历时钟、天气等20多款桌面插件。

nexus和rocketdock哪个好用

nexus和 rocketdock相比较的话nexus要好用一点,它的软件简单易懂比较全面。

docker容器的--cpu-period和--cpu-quota选项 2019-05-22

限制容器的cpu资源上限为每1秒内可以占用cpu0.5秒。 -centos7 -docker -stress(用来有效的消耗cpu资源,模拟高负载场景) -用到参数--cpu-period(周期),--cpu-quota(配额) -1秒=1000毫秒 -1毫秒=1000选项单位 -1秒=1000000选项单位 运行容器: 每1秒最多使用0.5秒的cpu 压力测试(尽量超载): 容器满载的时候占用了50%的cpu 成功! 也可以设置上限为2个cpu(200%)。 每1秒可以使用2秒的cpu 本机有四个内核(设置上限为2000%): 配额超过100%前,--cpu-period和--cpu-quota选项是以一个cpu为基准,如果配额超过(100%*宿主机内核数量)则为无限制。

在PhpStrom中配置Docker作为本地开发环境

平时大家在开发php项目的时候,本地都要装php程序和composer,做单元测试的时候还需要phpunit,如果需要单测覆盖率的话还要开启debug,本文将使用一个docker镜像搞定这些。 下面是一个php7.3+composer2.1+phpunit9.5的dockerfile,大家也可以根据自己的需要进行修改,然后自己构建为镜像 我把构建的镜像打个标签phpstorm:7.3-composer,方便下边使用 也可以拉取我已经构建好的镜像 本地要先启动docker desktop 2.1点击配置 》PHP 》CLI解释器 2.2 点击+ 》Form docker 》 docker 》选择第一步构建的镜像 2.3 添加成功后如下图,我们可以看到php版本号和xdebug的版本,然后点击应用,确定 2.4 这时已经配置成功了,phpstorm会自动生成路径映射,把项目根目录映射到容器中/opt/project 3.1 这步配置比较简单,看图就可以了 3.2 安装一个包测试一下 新建一个composer.json文件,点击 【工具】 》【composer】》【管理依赖项】》在composer.json文件里随便写一个包名,然后点击安装,如果执行成功,这步就完成了。如果失败,可以查看事件日志是否缺少某些php扩展,然后在dockerfile里安装扩展,重新构建镜像,再次点击composer安装,重新构建镜像不用再重新配置phpstorm。 添加命令行工具,选择composer 看到输出composer版本号,也就配置成功一半了。 我们执行下配置就直接看图吧 写个单元测试一下,首先准备一个要测试的文件如下 然后点击 【使用覆盖率运行】,开始测试

有人用过autodock vina吗

有人用过。Autodock是一款开源的分子模拟软件,最主要应用于执行配体—蛋白分子对接。它由Scripps研究所的Olson实验室开发与维护,目前最新版本为AutoDock 4.2。另外,其用户图形化界面(GUI)工具为AutoDockTools(ADT),其第二代产品为AutoDock Vina。AutoDock包含但不局限于以下应用:X-射线晶体学基于结构的药物设计先导化合物优化虚拟筛选组合库设计蛋白—蛋白对接化学机制研究

windows批处理 此时不应有f(做autodock vina虚拟筛选出现这个问题,怎么处理?)

这分明就是linux 里shell的格式,与windows批处理差别很大的

Autodock4和vina做对接,结果会有些什么明显区别

打那么多字的目的就是进入vina目录,真是好功力~简单地说,进入vina.exe所在文件夹,按住ctrl+shift,同时在空白处点击右键,选择“在此处打开命令窗口”,然后输入vina--help,意思是查看vina程序内置的帮助信息提交回答

docker 镜像分层原理

参考链接: https://blog.csdn.net/runner668/article/details/80955381 Docker 支持通过扩展现有镜像,创建新的镜像。 实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。比如我们现在构建一个新的镜像,Dockerfile 如下: 构建过程如下图所示 可以看到,新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。 问什么 Docker 镜像要采用这种分层结构呢? 最大的一个好处就是 - 共享资源。 比如:有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享,我们将在后面更深入地讨论这个特性。 这时可能就有人会问了:如果多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,比如 /etc 下的文件,这时其他容器的 /etc 是否也会被修改? 答案是不会! 修改会被限制在单个容器内。 这就是我们接下来要说的容器 Copy-on-Write 特性。 新数据会直接存放在最上面的容器层。修改现有数据会先从镜像层将数据复制到容器层,修改后的数据直接保存在容器层中,镜像层保持不变。 如果多个层中有命名相同的文件,用户只能看到最上面那层中的文件。 当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。 典型的Linux在启动后,首先将 rootfs 置为 readonly, 进行一系列检查, 然后将其切换为 “readwrite” 供用户使用。在docker中,起初也是将 rootfs 以readonly方式加载并检查,然而接下来利用 union mount 的将一个 readwrite 文件系统挂载在 readonly 的rootfs之上,并且允许再次将下层的 file system设定为readonly 并且向上叠加, 这样一组readonly和一个writeable的结构构成一个container的运行目录, 每一个被称作一个Layer。如下图所示。 所有对容器的改动,无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。 下面我们深入讨论容器层的细节。 镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同路径的文件,比如 /a,上层的 /a 会覆盖下层的 /a,也就是说用户只能访问到上层中的文件 /a。在容器层中,用户看到的是一个叠加之后的文件系统。 这样就解释了我们前面提出的问题:容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享。

如何往现有docker环境里添加magento

首先,我们得知道什么才是好的开发环境, 对于我而言,一个好的开发环境需要具备以下几个特点: 可随意使用。我必须可以随意删除和创建新的环境。 快速启动。我想要用它工作时候,它立马就能用。 易于更新。在我们行业中,事物发展变化非常快,必须能让我很容易将我的开发环境更新到新的软件版本。而Docker都支持以上这些特点,甚至更多。你几乎可以即时销毁和重建容器,而更新环境只需要重建你当前使用的镜像即可。什么是PHP开发环境目前Web应用错综复杂,PHP开发环境需要很多的东西,为了保证环境的简单性,需要做各种各样的限制。我们这次使用Nginx、PHP5-FPM、MySQL来运行Synmfony项目。Pet 与 Cattle另一个我们要讨论的重点是:我们要把开发环境部署在多容器还是单容器中。 两种方式各有优点: 单容器易于分发、维护。因为它们是独立的,所有的东西都运行在同一个容器中,这点就像是一个虚拟机。但这也意味着,当你要升级其中的某样东西(比如PHP新版本)的时候, 需要重新构建整个容器。 多容器可以在添加组件时提供更好的模块化。因为每个容器包含了堆栈的一部分:Web、PHP、MySQL等,这样可以单独扩展每个服务或者添加服务,并且不需要重建所有的东西。因为我比较懒,加上我需要在我的笔记本上放点别的内容,所以,这里我们只介绍单个容器的方法。初始化工程首先要做的是初始化一个新的Symfony工程. 推荐的方法是用composer的create-project命令。本来可以在工作站上安装composer,但是那样太简单了。这次我们通过Docker来使用它。

pioneering marine offloading/dock怎么翻译

开拓 海洋 装卸/码头

如何使用docker来制作我现在正在使用的系统的镜像

在使用Docker的过程中,我们除了从Docker Hub上下载已经做好的镜像,很多时候需要我们自己制作镜像。下面想在这个文章中说明一下镜像的制作方法。制作镜像的方式主要有两种:通过docker commit 制作镜像通过docker build 制作镜像这两种方式都是通过改进已有的镜像来达到自己的目的。制作基础镜像,会在另外一篇文章“从零开始制作基础镜像”中介绍。docker commitdocker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。选择基础镜像基础镜像的选择要结合自己的需求。可以选择已有的应用镜像来改造,也可以选择Ubuntu,Debian,OpenSuse这类基础系统镜像我们以ubuntu为例子来说明步骤1:运行ubuntu 镜像docker run -i -t ubuntu /bin/bash步骤2:安装软件并修改软件配置, 比如:安装apache2apt-get -yqq updateapt-get -y install apache2安装完成后,对apache2进行配置和修改步骤3:退出docker并保存镜像使用“exit”命令退出容器运行docker comit 命令, 进行保存docker commit 61412230ae46 own-apache2docker commit 命令参数说明命令格式docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]OPTIONS:-a, --author= 提交的镜像作者-c, --change=[] Apply Dockerfile instruction to the created image, 没用过-m, --message= 提交时的说明文字-p, --pause=true 在commit时,将container 暂停CONTAINER:可以使用container 的名字或者IDREPOSITORY指定镜像仓库,上述例子中,指定的是本地存储可以指定远程镜像仓库,如docker hub。也可自建仓库来存放imageTAG:镜像TAGdocker build使用docker build创建镜像需要编写Dockerfile.步骤:编写自己的Dcokerfile运行docker build 命令打包镜像仍然以apache打包为例子。以下是Dockerfile的例子FROM ubuntu:latestMAINTAINER sky#Add 163 mirror for aptADD sources.list /etc/apt/sources.listADD .bashrc /root/.bashrcENV DEBIAN_FRONTEND noninteractive# PackagesRUN rm -rf /var/lib/apt/listsRUN apt-get update -q --fix-missingRUN apt-get -y upgrade#ubuntu wwwRUN apt-get install -y apache2 curl libapache2-mod-php5 php5-curl php5-gd php5-mysql rsync mysql-client -qqRUN apt-get autocleanRUN rm -rf /var/lib/apt/lists/*# Setup environmnt for apache"s init scriptENV APACHE_CONFDIR /etc/apache2ENV APACHE_ENVVARS $APACHE_CONFDIR/envvarsENV APACHE_RUN_USER www-dataENV APACHE_RUN_GROUP www-dataENV APACHE_RUN_DIR /var/run/apache2ENV APACHE_PID_FILE $APACHE_RUN_DIR/apache2.pidENV APACHE_LOCK_DIR /var/lock/apache2ENV APACHE_LOG_DIR /var/log/apache2ENV LANG CRUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIRRUN find "$APACHE_CONFDIR" -type f -exec sed -ri " s!^(s*CustomLog)s+S+!1 /proc/self/fd/1!g; s!^(s*ErrorLog)s+S+!1 /proc/self/fd/2!g; " "{}" ";"EXPOSE 80CMD ["apache2", "-DFOREGROUND"]编辑完成后,在与Dockerfile同一目录下运行docker build 命令docker build -t apache-img .如果没有命令出错,docker build会持续运行直到镜像创建完成而创建的过程本质上是运行一个镜像,然后在镜像中按序执行在Dockerfile中的命令,直到执行结束。如果中间有命令执行失败,镜像创建会停止。这时就需要看log,并修改Dockerfile,然后再次执行docker build注:两种镜像创建方式的对比:docker commitdocker build难度相对容易,适合新手和对Linux不熟悉的用户相对难,要求有一定的linux和脚本基础知识文档化文档化在通过其他文件来实现Dockerfile本身就是比较好的文档,可读和可理解性比较强。也可配合其他文档带来详细说明升级,维护后续升级和维护麻烦,需要再次运行镜像并对内部软件进行升级或者安装新软件增加特性后续升级和维护会相对简单,可以直接在dockerfile中更改并增加新特性具体选择哪种方式来制作镜像需要结合实际情况来选择Dockerfile 关键字详解FROMFROM用来指定基础包。在上面的例子中,基础包用的是ubuntu。MAINTAINER镜像作者信息,或者维护人员信息ADD将文件拷贝到Container内文件系统对应的路径格式 ADD <src file> <dst file>所有拷贝到Container中的文件和文件夹权限为0755,uid和gid为0如果需要修改owner用户或者权限,需要使用RUN进行修改ADD文件,文件路径要在docker build<PATH>中指定的<PATH>下RUN创建镜像时执行ENV用来设置环境变量EXPOSEContainer内部服务开启的端口主机上如果要使用,还需要在启动Container时,做host-container的商品映射使用EXPOSE后,一些自动化布署工具可以直接读取这个信息,自动进行端口映射EXPOSE可以有多条,指定多个端口WORKDIR切换工作目录,可进行多次切换(相当于cd命令)切换目录对RUN,CMD,ENTRYPOINT有效USER执行container的用户,如未指定,则默认使用root用户ENTRYPOINTContainer启动时执行的命令,一个Dockerfile中只能有一条ENTRYPOINTENTRYPOINT没有CMD的可替换特性CMDContainer 启动时执行的命令,一个Dockerfile 中只能有一条CMD命令,如果有多条则只执行最后一条CMD如果有多条命令希望在启动后执行,可以考虑使用shell 脚本与ENTRYPOINT的区别CMD的主要用途是为可执行的container提供默认命令CMD在运行时是可替换的,比如在ubuntu中,CMD指定的是/bin/bash。默认情况下运行ubuntu,container中的/bin/bash会被执行如果使用docker run指定运行命令,那CMD会被替换掉如:docker run ubuntu /bin/echo "this is a echo". 这时,container 启动后会执行echo 而不是/bin/bash了ENTRYPOINT是不会替换的,如果在ubuntu镜像中加入ENTRYPOINT,那ENTRYPOINT在启动后会先被执行CMD可以为ENTRYPOINT来提供参数例子:FROM ubuntu:14.10 ENTRYPOINT ["top", "-b"] CMD ["-c"]VOLUME语法:VOLUME [PATH]VOLUME指令用来设置一个挂载点,可以用来让其他容器挂载以实现数据共享或对容器数据的备份、恢复或迁移可以将本地文件夹或者其他Container的文件夹挂载到Container中

docker容器内怎么连接外部的mysql

如果将来数据库服务也在容器中提供,建议使用link的方式,代码中使用

docker容器内怎么连接外部的mysql

1. 首先创建一个目录并在目录下创建一个Dockerfile,文件内容如下[plain] view plain copy print?FROM centos:centos6 MAINTAINER Fanbin Kong "kongxx@hotmail.com" RUN yum install -y mysql-server mysql RUN /etc/init.d/mysqld start && mysql -e "grant all privileges on *.* to "root"@"%" identified by "letmein";"&& mysql -e "grant all privileges on *.* to "root"@"localhost" identified by "letmein";"&& mysql -u root -pletmein -e "show databases;" EXPOSE 3306 CMD ["/usr/bin/mysqld_safe"]-

怎么关闭dockerfile里面expose的端口

看dockerfile:FROMalpine:latestMAINTAINERalexalexwhen@gmail.comRUNapk--updateaddnginxCOPY./usr/share/nginx/htmlEXPOSE80CMD[“nginx”,“-g”,“daemonoff;”]极简化的利用dockerfile和base镜像和github的特性,能少一句就少一句,动动手试一下,这样build出来,整个镜像不超过10M,回过头来看看前面的镜像,光一个ubuntu得多大啊,实在是居家必备。

怎样创建docker.list文件

如何使用Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。当前目录下包含Dockerfile,使用命令build来创建新的image,并命名为edwardsbean/centos6-jdk1.7:docker build -t edwardsbean/centos6-jdk1.7 .Dockerfile关键字如何编写一个Dockerfile,格式如下:# CommentINSTRUCTION argumentsFROM基于哪个镜像RUN安装软件用MAINTAINER镜像创建者CMDcontainer启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD.CMD主要用于container时启动指定的服务,当docker run command的命令匹配到CMD command时,会替换CMD执行的命令。如:Dockerfile:CMD echo hello world运行一下试试:edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmdhello world一旦命令匹配:edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd echo hello edwardsbeanhello edwardsbeanENTRYPOINTcontainer启动时执行的命令,但是一个Dockerfile中只能有一条ENTRYPOINT命令,如果多条,则只执行最后一条ENTRYPOINT没有CMD的可替换特性USER使用哪个用户跑container如:ENTRYPOINT ["memcached"]USER daemonEXPOSEcontainer内部服务开启的端口。主机上要用还得在启动container时,做host-container的端口映射:docker run -d -p 127.0.0.1:33301:22 centos6-sshcontainer ssh服务的22端口被映射到主机的33301端口ENV用来设置环境变量,比如:ENV LANG en_US.UTF-8ENV LC_ALL en_US.UTF-8ADD将文件<src>拷贝到container的文件系统对应的路径<dest>所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0如果文件是可识别的压缩格式,则docker会帮忙解压缩如果要ADD本地文件,则本地文件必须在 docker build <PATH>,指定的<PATH>目录下如果要ADD远程文件,则远程文件必须在 docker build <PATH>,指定的<PATH>目录下。比如:docker build github.com/creack/docker-firefoxdocker-firefox目录下必须有Dockerfile和要ADD的文件注意:使用docker build - < somefile方式进行build,是不能直接将本地文件ADD到container中。只能ADD url file.ADD只有在build镜像的时候运行一次,后面运行container的时候不会再重新加载了。VOLUME可以将本地文件夹或者其他container的文件夹挂载到container中。WORKDIR切换目录用,可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效ONBUILDONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行

如何交互式地创建一个Docker容器

创建一个安全的Docker基镜像的方法** 构建一个Java环境基镜像 **正如我刚解释的,Alpine Linux是一个构建自有镜像时不错的选择,因此,我们在此将使用它来构建简洁高效的Docker镜像,我们开始吧!组合:Alpine + bash每个Dockerfile第一个指令都是指定它的父级容器,通常是用于继承,在我们的例子中是<code>alpine:latest</code>:shFROM alpine:latestMAINTAINER cSphere <docker@csphere >RUN apk add --no-cache --update-cache bashCMD ["/bin/bash"]```好了,现在我们构建容器:sh$ docker build -t my-java-base-image >---> Running in 63433312d77e---> bfe94713797aRemoving intermediate container 63433312d77e... 省略若干行Step 4 : CMD /bin/bash---> Running in d2291684b797---> ecc443d68f27Removing intermediate container d2291684b797Successfully built ecc443d68f27并且运行它:sh$ docker run --rm -ti my-java-base-imagebash-4.3#成功了!我们有了一个运行着bash的Alpine Linux。

Docker如何创建镜像?怎么修改,上传镜像

初次安装部署好docker后,大多数镜像可以从DockerHub 提取,但是大多数人都希望自己可以完全自定义一个镜像,那么这里需要一个第三方工具 febootstrap  epel6的源提供febootstrap的RPM包  yum install docker-io febootstrap -y  service docker start  chkconfig docker --level35 on复制代码  制作CentOS6.6镜像目录  febootstrap -i yum -i iputils -i iproute -i bash -i vim-minimal -i coreutils -i tar -i net-tools centos6 base   <a href="http://centos.ustc.edu.cn/centos/6.6/os/x86_64/" target="_blank">http://centos.ustc.edu.cn/centos/6.6/os/x86_64/</a> -u <a href="http://centos.ustc.edu.cn/centos/6.6/updates/x86_64/" target="_blank">http://centos.ustc.edu.cn/centos/6.6/updates/x86_64/</a>复制代码  -i 表示镜像里面安装的RPM包(包括一些人为有必要的软件包)   centos6 表示镜像的版本说明   base 表示生成的镜像目录   后面之后了系统安装源和更新源为USTC  安装执行后,会开始一系列的RPM包下载安装,过程与yum类似,安装完成后当前目录会多了base目录,里面就是一个镜像的系统文件  进入base目录等于进入镜像的根目录  [root@image ~]# cd base/  [root@image base]# ls  bin boot dev etc home lib lib64 media mnt opt proc root sbin selinux srv sys tmp usr var复制代码  可以像一般的系统文件一样先做一些修改配置,例如配置第三方yum源等等  把base目录把所有文件打包成二进制文件后导入docker创建为镜像  cd ~/root/base/ && tar -c . | docker import - centos6:base复制代码  docker images 可以查看镜像的信息  一个基本centos镜像创建完毕,下面再利用Dokcerfile制作mysql镜像  cat Dockerfile  FROM centos6:base  MAINTAINER Lion "lioncui@163.com"  VOLUME /var/lib/mysql  RUN yum install mysql-server mysql -y  RUN echo -ne "NETWORKING=yes\nHOSTNAME=mysql" > /etc/sysconfig/network  RUN echo -ne "bind-address = 0.0.0.0\ndefault-storage-engine=innodb\ninnodb_file_per_table\ncollation-server=utf8_general_ci\ninit-connect="SET NAMES utf8"\ncharacter-set-server = utf8" > insert  RUN sed -i "/user=mysql/r insert" /etc/my.cnf && rm -f insert  RUN echo -ne "/usr/bin/mysql_install_db\n/usr/bin/mysqld_safe" >> /opt/mysql_start  RUN chmod 777 /opt/mysql_start  ENV PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:  WORKDIR /opt  EXPOSE 3306  CMD /bin/sh -c mysql_start复制代码  FROM 声明以centos:base镜像为基础   MAINTAINER 声明镜像的维护者信息   VOLUME 挂载本地目录到容器里/var/lib/mysql目录(这是mysql默认的数据保存目录)   由于我希望数据可以持久化防止因为容器误删除而丢失,所以映射到宿主本地目录   RUN 在镜像中执行安装mysql   在新镜像中写入HOSTNAME信息,因为mysql启动过程需要network文件   在my.cnf配置文件插入一些修改配置   创建启动脚本   声明环境变量   制定默认工作目录   EXPOSE 声明容器需要暴露的端口号  CMD 是指镜像生成容器后自动执行的命令,类似docker exec,这里是自动启动mysql服务  根据Dockerfile创建mysql服务镜像  docker build --rm=true -t mysql:frist .  查看镜像的树状关系可以发现,mysql:frist是以centos:base为父镜像

docker怎么在容器mysql写数据

1. 首先创建一个目录并在目录下创建一个Dockerfile,文件内容如下[plain] view plain copy print?FROM centos:centos6 MAINTAINER Fanbin Kong "kongxx@hotmail.com" RUN yum install -y mysql-server mysql RUN /etc/init.d/mysqld start && mysql -e "grant all privileges on *.* to "root"@"%" identified by "letmein";"&& mysql -e "grant all privileges on *.* to "root"@"localhost" identified by "letmein";"&& mysql -u root -pletmein -e "show databases;" EXPOSE 3306 CMD ["/usr/bin/mysqld_safe"]

怎么关闭docker-proxy

看dockerfile:FROMalpine:latestMAINTAINERalexalexwhen@gmail.comRUNapk--updateaddnginxCOPY./usr/share/nginx/htmlEXPOSE80CMD[“nginx”,“-g”,“daemonoff;”]极简化的利用dockerfile和base镜像和github的特性,能少一句就少一句,动动手试一下...

docker下如何搭建MySQL+php-fpm+nginx容器环境,本文详解

配置容器(进入容器)docker exec -it your_mysql bash进入之后,要对用户进行授权,以便使用远程连接连接mysql 输入密码:ziqin666执行如下命令GRANT ALL PRIVILEGES ON *.* TO "root"@"localhost" IDENTIFIED BY "ziqin666";GRANT ALL PRIVILEGES ON *.* TO "root"@"%" IDENTIFIED BY "ziqin666";GRANT ALL PRIVILEGES ON *.* TO "root"@"127.0.0.1" IDENTIFIED BY "ziqin666";FLUSH PRIVILEGES;此时可以使用客户端连接一下看看。(一定要把安全组规则对应端口打开)二、构建php-fpm容器准备工作php.ini 默认是不存在的在/home/app/phpfile文件夹下创建 php.ini文件和conf.d文件夹创建容器 docker run -p 9000:9000 --name your_phpfpm -v /home/app/html:/var/www/html -v /home/app/phpfile:/usr/local/etc/php --link your_mysql:mysql -d php:5.6-fpm命令说明:--name your_phpfpm: 将容器命名为 your_phpfpm。-v /home/app/html:/var/www/html: 将主机中项目的目录 /home/app/html 挂载到容器的 /var/www/html安装 pdo 以便后边测试数据库连接,在docker的php容器中可以这样来安装docker-php-ext-install pdo_mysql安装其他插件也可以使用这种办法并加入到php.iniextension=php_curl.dllextension=php_gd2.dllextension=php_mysql.dllextension=php_mysqli.dllextension=php_pdo_mysql.dllextension=php_pdo_odbc.dllextension=php_pdo.dll如果插件还不够就需要自己定制镜像FROM php:7.0.12-fpmMAINTAINER Tairy <tairyguo@gmail.com>WORKDIR /workingRUN apt-get update --fix-missing && apt-get install -y g++ autoconf bash git apt-utils libxml2-dev libcurl3-dev pkg-config && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone && docker-php-ext-install iconv curl mbstring xml json mcrypt mysqli pdo pdo_mysql zip && docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-png-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && docker-php-ext-install gd && docker-php-ext-enable gd && pecl install /pecl/redis-3.0.0.tgz && docker-php-ext-enable redis && apt-get purge -y --auto-remove && rm -rf /var/cache/apt/* && rm -rf /var/lib/apt/lists/* && rm -rf /pecl三、安装nginx配置文件目录:/home/app/nginx/conf.d(注释:没有的文件自主创建哈)在配置文件目录新建 default.confserver{listen 80;server_name localhost;location / { root /usr/share/nginx/html; index index.html index.htm; }location ~ .php$ { fastcgi_pass your_phpfpm:9000; #此处写docker里边php 的名称: your_phpfpmfastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;include fastcgi_params; } error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}}创建容器docker run -p 81:80 --name your_nginx -v /home/app/nginx/www:/usr/share/nginx/html -v /home/app/nginx/conf.d:/etc/nginx/conf.d --link your_phpfpm:phpfpm -d nginx:latest映射容器中的phpfpm和mysql都为固定,不能修改!这里需要配置nginx使用用户,即把/etc/nginx/nginx.conf里的nginx用户修改为www-data,同时把/home/app/nginx/www下的文件所有者改为www-data:www_data,否则访问会有权限问题chown -R www-data:www-data www四 、 测试1、查看服务docker ps -aSTATUS 皆为up ,即运行中2、测试 php解析在宿主机/home/app/nginx/www/目录下修改 index.php 文件。<?php echo phpinfo();3、测试mysql 链接修改 index.php<?php//echo phpinfo();$dbms="mysql"; //数据库类型$host="your_mysql"; //数据库主机名,此处写mysql 容器的名字$dbport = "3306";$dbName="mysql"; //使用的数据库$user="root"; //数据库连接用户名$pass="123456"; //对应的密码$dsn="$dbms:host=$host;port=$dbport;dbname=$dbName";try { $dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象 echo "successful<br/>"; //你还可以进行一次搜索操作 // foreach ($dbh->query("SELECT * from user") as $row) { // print_r($row); //你可以用 echo($GLOBAL); 来看到这些值 // } $dbh = null;} catch (PDOException $e) { die ("Error!: " . $e->getMessage() . "<br/>");}访问ip , 到正确的输出,就证明我们的配置成功了。最后注意:很多人在学Java高级过程中难免会遇到各种问题解决不了。为此我建了个裙 783802103,里面很多架构师一起交流解答,没基础勿进哦!本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理docker下如何搭建MySQL+php-fpm+nginx容器环境,本文详解标签:名称-name测试数据csharpcatch题解fastcgidata-目的

怎么制作docker镜像 有多大

方法/步骤在使用Docker的过程中,我们除了从Docker Hub上下载已经做好的镜像,很多时候需要我们自己制作镜像。下面想在这个文章中说明一下镜像的制作方法。制作镜像的方式主要有两种:通过docker commit 制作镜像通过docker build 制作镜像这两种方式都是通过改进已有的镜像来达到自己的目的。制作基础镜像,会在另外一篇文章“从零开始制作基础镜像”中介绍。docker commitdocker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。选择基础镜像基础镜像的选择要结合自己的需求。可以选择已有的应用镜像来改造,也可以选择Ubuntu,Debian,OpenSuse这类基础系统镜像我们以ubuntu为例子来说明步骤1:运行ubuntu 镜像docker run -i -t ubuntu /bin/bash步骤2:安装软件并修改软件配置, 比如:安装apache2apt-get -yqq updateapt-get -y install apache2安装完成后,对apache2进行配置和修改步骤3:退出docker并保存镜像使用“exit”命令退出容器运行docker comit 命令, 进行保存docker commit 61412230ae46 own-apache2docker commit 命令参数说明命令格式docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]OPTIONS:-a, --author= 提交的镜像作者-c, --change=[] Apply Dockerfile instruction to the created image, 没用过-m, --message= 提交时的说明文字-p, --pause=true 在commit时,将container 暂停CONTAINER:可以使用container 的名字或者IDREPOSITORY指定镜像仓库,上述例子中,指定的是本地存储可以指定远程镜像仓库,如docker hub。也可自建仓库来存放imageTAG:镜像TAGdocker build使用docker build创建镜像需要编写Dockerfile.步骤:编写自己的Dcokerfile运行docker build 命令打包镜像仍然以apache打包为例子。以下是Dockerfile的例子FROM ubuntu:latestMAINTAINER sky#Add 163 mirror for aptADD sources.list /etc/apt/sources.listADD .bashrc /root/.bashrcENV DEBIAN_FRONTEND noninteractive# PackagesRUN rm -rf /var/lib/apt/listsRUN apt-get update -q --fix-missingRUN apt-get -y upgrade#ubuntu wwwRUN apt-get install -y apache2 curl libapache2-mod-php5 php5-curl php5-gd php5-mysql rsync mysql-client -qqRUN apt-get autocleanRUN rm -rf /var/lib/apt/lists/*# Setup environmnt for apache"s init scriptENV APACHE_CONFDIR /etc/apache2ENV APACHE_ENVVARS $APACHE_CONFDIR/envvarsENV APACHE_RUN_USER www-dataENV APACHE_RUN_GROUP www-dataENV APACHE_RUN_DIR /var/run/apache2ENV APACHE_PID_FILE $APACHE_RUN_DIR/apache2.pidENV APACHE_LOCK_DIR /var/lock/apache2ENV APACHE_LOG_DIR /var/log/apache2ENV LANG CRUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIRRUN find "$APACHE_CONFDIR" -type f -exec sed -ri " s!^(s*CustomLog)s+S+!1 /proc/self/fd/1!g; s!^(s*ErrorLog)s+S+!1 /proc/self/fd/2!g; " "{}" ";"EXPOSE 80CMD ["apache2", "-DFOREGROUND"]编辑完成后,在与Dockerfile同一目录下运行docker build 命令docker build -t apache-img .如果没有命令出错,docker build会持续运行直到镜像创建完成而创建的过程本质上是运行一个镜像,然后在镜像中按序执行在Dockerfile中的命令,直到执行结束。如果中间有命令执行失败,镜像创建会停止。这时就需要看log,并修改Dockerfile,然后再次执行docker build注:两种镜像创建方式的对比:docker commitdocker build难度相对容易,适合新手和对Linux不熟悉的用户相对难,要求有一定的linux和脚本基础知识文档化文档化在通过其他文件来实现Dockerfile本身就是比较好的文档,可读和可理解性比较强。也可配合其他文档带来详细说明升级,维护后续升级和维护麻烦,需要再次运行镜像并对内部软件进行升级或者安装新软件增加特性后续升级和维护会相对简单,可以直接在dockerfile中更改并增加新特性具体选择哪种方式来制作镜像需要结合实际情况来选择Dockerfile 关键字详解FROMFROM用来指定基础包。在上面的例子中,基础包用的是ubuntu。MAINTAINER镜像作者信息,或者维护人员信息ADD将文件拷贝到Container内文件系统对应的路径格式 ADD <src file> <dst file>所有拷贝到Container中的文件和文件夹权限为0755,uid和gid为0如果需要修改owner用户或者权限,需要使用RUN进行修改ADD文件,文件路径要在docker build<PATH>中指定的<PATH>下RUN创建镜像时执行ENV用来设置环境变量EXPOSEContainer内部服务开启的端口主机上如果要使用,还需要在启动Container时,做host-container的商品映射使用EXPOSE后,一些自动化布署工具可以直接读取这个信息,自动进行端口映射EXPOSE可以有多条,指定多个端口WORKDIR切换工作目录,可进行多次切换(相当于cd命令)切换目录对RUN,CMD,ENTRYPOINT有效USER执行container的用户,如未指定,则默认使用root用户ENTRYPOINTContainer启动时执行的命令,一个Dockerfile中只能有一条ENTRYPOINTENTRYPOINT没有CMD的可替换特性CMDContainer 启动时执行的命令,一个Dockerfile 中只能有一条CMD命令,如果有多条则只执行最后一条CMD如果有多条命令希望在启动后执行,可以考虑使用shell 脚本与ENTRYPOINT的区别CMD的主要用途是为可执行的container提供默认命令CMD在运行时是可替换的,比如在ubuntu中,CMD指定的是/bin/bash。默认情况下运行ubuntu,container中的/bin/bash会被执行如果使用docker run指定运行命令,那CMD会被替换掉如:docker run ubuntu /bin/echo "this is a echo". 这时,container 启动后会执行echo 而不是/bin/bash了ENTRYPOINT是不会替换的,如果在ubuntu镜像中加入ENTRYPOINT,那ENTRYPOINT在启动后会先被执行CMD可以为ENTRYPOINT来提供参数例子:FROM ubuntu:14.10 ENTRYPOINT ["top", "-b"] CMD ["-c"]VOLUME语法:VOLUME [PATH]VOLUME指令用来设置一个挂载点,可以用来让其他容器挂载以实现数据共享或对容器数据的备份、恢复或迁移可以将本地文件夹或者其他Container的文件夹挂载到Container中

单host下Docker的默认网络配置

本文用到的环境如下: host: centos7 docker: 通过 yum install -y docker 安装,版本号为1.10.3 docker镜像: # Version: 0.0.1 FROM ubuntu:latest MAINTAINER paul liu "pollux.liu@msn.com" RUN apt-get update RUN apt-get install -y net-tools RUN apt-get install -y iputils-ping CMD /bin/bash 场景图: 我的host主机接有无线路由器,通过ADSL拨号上网,网卡eth0固定IP为192.168.0.200,网关为路由器的IP 192.168.0.1。 在host上安装docker,并运行容器。 通过以下命令安装docker, yum install -y docker 启用docker, systemctl start docker 然后在host主机运行 ifconfig 或 ip a 命令,可以看到除去host原有的网卡eth0和回环lo外,多了个docker0。 docker0 IP为172.17.0.1,所在的网段默认为B类私网地址172.17.0.0/16。可以将docker0看做是host主机的一块虚拟网卡。这样host主机就等同于配置了双网卡,两块网卡之间可以通信,但前提是启用ip_forward。 这是docker0的第一个身份。 运行两个容器docker1,docker2,然后在host主机上运行 brctl show 查看, 这里可以看出docker0的第二个身份,一个虚拟交换机。每运行一个容器,就会产生一对veth,其中一端连接到docker0上,另一端连接到容器的eth0上。这样,所有连接到docker0的容器组成了一个局域网。如下图: 在host主机上运行 ifconfig ,也会发现多了两个veth这样的网络接口。 在host主机上运行 ip addr show veth6d9a691 ,可以查看到该veth具有mac地址,这也正说明了docker0的虚拟交换机的身份,交换机是通过mac地址通信的,连接到交换机的设备必须具有mac地址。 由于docker0自身也具有mac地址,这个与纯二层交换机是不同的,并且绑定了IP 172.17.0.1,容器默认把docker0作为了网关。也就是docker0还兼具路由的功能,因此可以把docker0看做是一个三层交换机,可以做二层数据包转发,也可以做三层路由转发。 在容器中运行 route -n 查看路由如下:在host主机上运行 route -n 查看路由如下:在host中,访问本网段192.168.0.0是通过eth0转发数据包的,访问172.17.0.0网段是通过docker0转发数据包的,而对于其他如公网是通过eth0将数据包转发给网关192.168.0.1,再由该网关进行数据包转发的,比如上网。 在容器中运行 ping sohu.com 或 ping 192.168.0.200 都可以ping通。 默认情况下,不需要再额外做任何配置,在一台host主机上,通过docker0,各容器之间可以互通,并且可以通过host的eth0连接外网。 通俗的讲,通过docker0组成了一个网段为172.17.0.0/16的以太网,docker容器发起请求时,如果是相同网段则经由docker0转发到目标机器,如果是不同网段,则经由docker0,转发到host的另一块网卡eth0上,由eth0负责下一步的数据包转发,比如公网地址。 下面进一步分析一下报文是怎么发送到外面的。 容器内部发送一条公网请求报文,通过eth0,在veth被接收。此时报文已经来到了主机上,通过查询主机的路由表( route -n ),如果发现报文应该通过主机的eth0,从默认网关发送出去,那么报文就被从docker0转发给主机的eth0,但前提是首先启用ip_forward功能,才能在host主机的docker0和eth0两个网卡间传递数据包。 由于目标地址并不属于host主机所在网段,那么会匹配机器上的 iptables中的nat表POSTROUTING链中的规则。 在host主机运行命令 iptables -L -n -t nat --line-numbers ,查看nat表,这里只看POSTROUTING链: 第一行中说明,对于源地址为172.17.0.0/16网段的数据包,发出去之前通过MQSQUERADE伪装。linux内核会修改数据包源地址为host主机eth0的地址(也就是192.168.0.200),然后把报文转发出去。对于外部来说,报文是从主机eth0发送出去的。 局域网内的机器由于都是私有IP,是无法直接访问互联网的(数据包可以发出去,但回不来。)如果要上网,除了可以通过硬件路由器,也可以通过软件路由,在iptables的nat表中的POSTROUTING链中添加SNAT规则。 测试一下,在host主机运行命令 iptables -t nat -D POSTROUTING 1 将第一条规则删掉,那么在容器中就运行命令 ping sohu.com 就ping不通了。但仍然可以ping通host主机。 在host主机运行命令以下命令恢复: iptables -t nat -I POSTROUTING -s 172.17.0.0/16 -o eth0 -j SNAT --to-source 192.168.0.200 或者 iptables -t nat -I POSTROUTING -s 172.17.0.0/16 -j MASQUERADE 关于SNAT和MASQUERADE,这篇文章已经有过描述,可以参考: Docker前传之linux iptables 新建一Dockerfile,用以运行nginx容器: # Version: 0.0.1 FROM paulliu/ubuntu_ip RUN apt-get install -y nginx EXPOSE 80 在host主机运行构建命令构建镜像 docker build -t paulliu/nginx . 在host主机运行容器启动命令 docker run -d -p 80 --name nginx1 paulliu/nginx nginx -g "daemon off;" 在host主机查看容器的端口映射 docker port nginx1 80 在host主机运行命令 iptables -nat -L -n 可以看到在PREROUTING链中多了以下DNAT规则: 也就是在容器启动时通过 -p 80 将host主机192.168.0.200:32773映射为容器172.17.0.4:80。 注意:docker容器每次启动时获取的IP地址未必是一样的,而且 -p 80 是在host主机上随机选择一个端口号进行映射,每次启动的端口号也未必是一样的。但iptables中相关的规则是自动变更的。 在host主机运行 curl localhost:32773 或者在其他主机运行 curl 192.168.0.200:32773 结果如下:

如何使用Dockerfile构建镜像

你好,使用方法如下:Dockerfile结构dockerfile由4部分信息组成:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。123456789101112131415161718 # This dockerfile uses the ubuntu image# VERSION 2 - EDITION 1# Author: docker_user# Command format: Instruction [arguments / command] .. # Base image to use, this must be set as the first lineFROM ubuntu # Maintainer: docker_user <docker_user at email.com> (@docker_user)MAINTAINER docker_user docker_user@email.com # Commands to update the imageRUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.listRUN apt-get update && apt-get install -y nginxRUN echo " daemon off;" >> /etc/nginx/nginx.conf # Commands when creating a new containerCMD /usr/sbin/nginx其中#表注释,可以标注一些说明性的文字。FROM关键字指定镜像的来源,默认为DockerHub,也可以写私有仓库的镜像,例如:localhost:5000/centos:6.7,如果本地已经存在指定的镜像名称,则会从本地缓存直接获取。MAINTAINER 指定镜像的作者,之后为镜像操作执行RUN、ADD等,最后是容器启动时发起的指令。Dockerfile中的指令FROM: 指定镜像名称,格式为FROM <image> 或FROM <image>:<tag>,例如FROM ubuntu 或 FROM ubuntu:12.04 MAINTAINER: 镜像作者 ,格式为 MAINTAINER <name>RUN:格式为 RUN <command> 或 RUN ["executable", "param1", "param2"]。前者将在 shell 终端中运行命令,即 /bin/sh -c;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN ["/bin/bash", "-c", "echo hello"]。每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 来换行。CMD:支持三种格式  1.CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;  2.CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;  3.CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。EXPOSE:格式为 EXPOSE <port> [<port>...]。告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。ENV:格式为 ENV <key> <value>。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。这就对应程序语言中的变量定义,可在需要的时候引用。例如:1234 ENV PG_MAJOR 9.3ENV PG_VERSION 9.3.4RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATHADD:格式为 ADD <src> <dest>。该命令将复制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。COPY:格式为 COPY <src> <dest>。复制本地主机的 <src>(为 Dockerfile 所在目录的相对路径)到容器中的 <dest>。当使用本地目录为源目录时,推荐使用 COPY。COPY和ADD的不同就是:ADD多了自动解压和支持URL路径的功能。ENTRYPOINT:两种格式:ENTRYPOINT ["executable", "param1", "param2"]ENTRYPOINT command param1 param2(shell中执行)。配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。CMD和ENTRYPOINT比较:两个命令都是只能使用一次,并且都是在执行docker run指令时运行,如果有多个,只执行最后一条。两者的不同在于参数的传递方式,如果在Dockerfile中定义如下指令1 CMD echo hello或1 ENTRYPOINT ["echo","hello"] 那么在运行命令docker run containerId echo hello时,指定了CMD的输入结果为world,可以看出Dockerfile中指定的命令被覆盖了,而指定了ENTRYPOINT时,输出结果为hello echo world,可以看出指定的命令被作为ENTRYPOINT指定指令的参数了。 VOLUME:格式为 VOLUME ["/data"]。创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。不过此属性在Dockerfile中指定并没有什么意义,因为没有办法指定本地主机的目录。如果需要指定挂载点可以在执行docker run命令时指定:1 docker run -it -v /home/fengzheng/ftp/:/data 859666d51c6d /bin/bashUSER:格式为 USER daemon。指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要临时获取管理员权限可以使用 gosu,而不推荐 sudo。WORKDIR:格式为 WORKDIR /path/to/workdir。为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如1234 WORKDIR /aWORKDIR bWORKDIR cRUN pwd则最终路径为 /a/b/c。ONBUILD:格式为 ONBUILD [INSTRUCTION]。配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。例如,Dockerfile 使用如下的内容创建了镜像 image-A。1234 [...]ONBUILD ADD . /app/srcONBUILD RUN /usr/local/bin/python-build --dir /app/src[...]如果基于 image-A 创建新的镜像时,新的Dockerfile中使用 FROM image-A指定基础镜像时,会自动执行ONBUILD 指令内容,等价于在后面添加了两条指令。12345 FROM image-A #Automatically run the followingADD . /app/srcRUN /usr/local/bin/python-build --dir /app/src使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild。基于CentOS6.7并源码安装nginx首先准备了nginx-1.9.9.tar.gz安装包和CentOS6-Base-163.repo(163源),将这两个文件放到同一目录下,并在此目录下创建名称为Dockerfile的文件。之后在此文件中实现源替换、nginx编译安装、及一些依赖包的安装,Dockerfile内容如下:12345678910111213141516171819202122232425262728293031 # this is a test ubuntu 12.04 image dockerfile# Author:fengzheng # Base image,this must be set as the first line#localhost:5000/centos:6.7是我的私有仓库的镜像,可替换为centos:6.7(DockerHub中的镜像)FROM localhost:5000/centos:6.7 MAINTAINER fengzheng # Commands to update the image RUN mkdir /usr/nginx1.9.9ADD nginx-1.9.9.tar.gz /usr/nginx1.9.9/#RUN yum -y install tar#RUN tar -zxvf /usr/nginx1.9.9/nginx-1.9.9.tar.gzRUN cd /etc/yum.repos.d/ && mv CentOS-Base.repo CentOS-Base.repo.bakADD CentOS6-Base-163.repo /etc/yum.repos.d/RUN cd /etc/yum.repos.d/ && mv CentOS6-Base-163.repo CentOS-Base.repo && yum clean all && yum makecache && yum -y install gcc && yum -y install yum install -y pcre-devel && yum -y install zlib zlib-devel && yum -y install openssl openssl--devel && cd /usr/nginx1.9.9/nginx-1.9.9/ && ./configure && make && make install #如果设置daemon off; nginx无法启动#RUN echo " daemon off;" >> /etc/nginx/nginx.conf # Commands when creating a new container# 启动nginx 需进入/usr/local/nginx/sbin 执行./configureCMD /bin/bash最后执行命令"docker build -t nginx-centos:6.7 ."其中.表示在当前目录下搜索Dockerfile文件,-t参数指定镜像名称和tag。

如何用Dockerfile创建镜像

创建镜像的目的首先说DockerHub或其它一些镜像仓库已经提供了够多的镜像,有最小版本,也有一些安装了mysql、nginx、apache等等第三方软件的版本可以直接拿来使用。虽然已经足够多了,但是有些情况下并不能满足我们的需求,例如需要安装一些比较少用到的第三方软件,这个时候只能先用公共仓库中的镜像,启动容器,然后在容器中按照我们的需求安装软件,修改配置等等操作,之后提交镜像。这些操作在之前的文章中介绍了。这样操作完成之后,可以用如下两种方式实现定制镜像的目的:1.用save和export的方式将镜像保存为tar包,然后在需要的时候导入tar镜像包2.将已经配置好的镜像push到我们的私有仓库(docker创建私有仓库)或者已注册过的共有仓库中,需要的时候直接pull下来使用这两种方式都可以,但是自动化程度低、自由度不够、定制起来比较麻烦。既然如此,那就来说一下更加自动化的创建方式。Dockerfile结构dockerfile由4部分信息组成:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。123456789101112131415161718 # This dockerfile uses the ubuntu image# VERSION 2 - EDITION 1# Author: docker_user# Command format: Instruction [arguments / command] .. # Base image to use, this must be set as the first lineFROM ubuntu # Maintainer: docker_user <docker_user at email.com> (@docker_user)MAINTAINER docker_user docker_user@email.com # Commands to update the imageRUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.listRUN apt-get update && apt-get install -y nginxRUN echo " daemon off;" >> /etc/nginx/nginx.conf # Commands when creating a new containerCMD /usr/sbin/nginx其中#表注释,可以标注一些说明性的文字。FROM关键字指定镜像的来源,默认为DockerHub,也可以写私有仓库的镜像,例如:localhost:5000/centos:6.7,如果本地已经存在指定的镜像名称,则会从本地缓存直接获取。MAINTAINER 指定镜像的作者,之后为镜像操作执行RUN、ADD等,最后是容器启动时发起的指令。Dockerfile中的指令FROM: 指定镜像名称,格式为FROM <image> 或FROM <image>:<tag>,例如FROM ubuntu 或 FROM ubuntu:12.04 MAINTAINER: 镜像作者 ,格式为 MAINTAINER <name>RUN:格式为 RUN <command> 或 RUN ["executable", "param1", "param2"]。前者将在 shell 终端中运行命令,即 /bin/sh -c;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN ["/bin/bash", "-c", "echo hello"]。每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 来换行。CMD:支持三种格式  1.CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;  2.CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;  3.CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。EXPOSE:格式为 EXPOSE <port> [<port>...]。告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。ENV:格式为 ENV <key> <value>。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。这就对应程序语言中的变量定义,可在需要的时候引用。例如:1234 ENV PG_MAJOR 9.3ENV PG_VERSION 9.3.4RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATHADD:格式为 ADD <src> <dest>。该命令将复制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。COPY:格式为 COPY <src> <dest>。复制本地主机的 <src>(为 Dockerfile 所在目录的相对路径)到容器中的 <dest>。当使用本地目录为源目录时,推荐使用 COPY。COPY和ADD的不同就是:ADD多了自动解压和支持URL路径的功能。ENTRYPOINT:两种格式:ENTRYPOINT ["executable", "param1", "param2"]ENTRYPOINT command param1 param2(shell中执行)。配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。CMD和ENTRYPOINT比较:两个命令都是只能使用一次,并且都是在执行docker run指令时运行,如果有多个,只执行最后一条。两者的不同在于参数的传递方式,如果在Dockerfile中定义如下指令1 CMD echo hello或1 ENTRYPOINT ["echo","hello"] 那么在运行命令docker run containerId echo hello时,指定了CMD的输入结果为world,可以看出Dockerfile中指定的命令被覆盖了,而指定了ENTRYPOINT时,输出结果为hello echo world,可以看出指定的命令被作为ENTRYPOINT指定指令的参数了。 VOLUME:格式为 VOLUME ["/data"]。创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。不过此属性在Dockerfile中指定并没有什么意义,因为没有办法指定本地主机的目录。如果需要指定挂载点可以在执行docker run命令时指定:1 docker run -it -v /home/fengzheng/ftp/:/data 859666d51c6d /bin/bashUSER:格式为 USER daemon。指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要临时获取管理员权限可以使用 gosu,而不推荐 sudo。WORKDIR:格式为 WORKDIR /path/to/workdir。为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如1234 WORKDIR /aWORKDIR bWORKDIR cRUN pwd则最终路径为 /a/b/c。ONBUILD:格式为 ONBUILD [INSTRUCTION]。配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。例如,Dockerfile 使用如下的内容创建了镜像 image-A。1234 [...]ONBUILD ADD . /app/srcONBUILD RUN /usr/local/bin/python-build --dir /app/src[...]如果基于 image-A 创建新的镜像时,新的Dockerfile中使用 FROM image-A指定基础镜像时,会自动执行ONBUILD 指令内容,等价于在后面添加了两条指令。12345 FROM image-A #Automatically run the followingADD . /app/srcRUN /usr/local/bin/python-build --dir /app/src使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild。基于CentOS6.7并源码安装nginx首先准备了nginx-1.9.9.tar.gz安装包和CentOS6-Base-163.repo(163源),将这两个文件放到同一目录下,并在此目录下创建名称为Dockerfile的文件。之后在此文件中实现源替换、nginx编译安装、及一些依赖包的安装,Dockerfile内容如下:12345678910111213141516171819202122232425262728293031 # this is a test ubuntu 12.04 image dockerfile# Author:fengzheng # Base image,this must be set as the first line#localhost:5000/centos:6.7是我的私有仓库的镜像,可替换为centos:6.7(DockerHub中的镜像)FROM localhost:5000/centos:6.7 MAINTAINER fengzheng # Commands to update the image RUN mkdir /usr/nginx1.9.9ADD nginx-1.9.9.tar.gz /usr/nginx1.9.9/#RUN yum -y install tar#RUN tar -zxvf /usr/nginx1.9.9/nginx-1.9.9.tar.gzRUN cd /etc/yum.repos.d/ && mv CentOS-Base.repo CentOS-Base.repo.bakADD CentOS6-Base-163.repo /etc/yum.repos.d/RUN cd /etc/yum.repos.d/ && mv CentOS6-Base-163.repo CentOS-Base.repo && yum clean all && yum makecache && yum -y install gcc && yum -y install yum install -y pcre-devel && yum -y install zlib zlib-devel && yum -y install openssl openssl--devel && cd /usr/nginx1.9.9/nginx-1.9.9/ && ./configure && make && make install #如果设置daemon off; nginx无法启动#RUN echo " daemon off;" >> /etc/nginx/nginx.conf # Commands when creating a new container# 启动nginx 需进入/usr/local/nginx/sbin 执行./configureCMD /bin/bash最后执行命令"docker build -t nginx-centos:6.7 ."其中.表示在当前目录下搜索Dockerfile文件,-t参数指定镜像名称和tag。

如何使用docker来制作我现在正在使用的系统的镜像

在使用Docker的过程中,我们除了从Docker Hub上下载已经做好的镜像,很多时候需要我们自己制作镜像。下面想在这个文章中说明一下镜像的制作方法。制作镜像的方式主要有两种:通过docker commit 制作镜像通过docker build 制作镜像这两种方式都是通过改进已有的镜像来达到自己的目的。制作基础镜像,会在另外一篇文章“从零开始制作基础镜像”中介绍。docker commitdocker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。选择基础镜像基础镜像的选择要结合自己的需求。可以选择已有的应用镜像来改造,也可以选择Ubuntu,Debian,OpenSuse这类基础系统镜像我们以ubuntu为例子来说明步骤1:运行ubuntu 镜像docker run -i -t ubuntu /bin/bash步骤2:安装软件并修改软件配置, 比如:安装apache2apt-get -yqq updateapt-get -y install apache2安装完成后,对apache2进行配置和修改步骤3:退出docker并保存镜像使用“exit”命令退出容器运行docker comit 命令, 进行保存docker commit 61412230ae46 own-apache2docker commit 命令参数说明命令格式docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]OPTIONS:-a, --author= 提交的镜像作者-c, --change=[] Apply Dockerfile instruction to the created image, 没用过-m, --message= 提交时的说明文字-p, --pause=true 在commit时,将container 暂停CONTAINER:可以使用container 的名字或者IDREPOSITORY指定镜像仓库,上述例子中,指定的是本地存储可以指定远程镜像仓库,如docker hub。也可自建仓库来存放imageTAG:镜像TAGdocker build使用docker build创建镜像需要编写Dockerfile.步骤:编写自己的Dcokerfile运行docker build 命令打包镜像仍然以apache打包为例子。以下是Dockerfile的例子FROM ubuntu:latestMAINTAINER sky#Add 163 mirror for aptADD sources.list /etc/apt/sources.listADD .bashrc /root/.bashrcENV DEBIAN_FRONTEND noninteractive# PackagesRUN rm -rf /var/lib/apt/listsRUN apt-get update -q --fix-missingRUN apt-get -y upgrade#ubuntu wwwRUN apt-get install -y apache2 curl libapache2-mod-php5 php5-curl php5-gd php5-mysql rsync mysql-client -qqRUN apt-get autocleanRUN rm -rf /var/lib/apt/lists/*# Setup environmnt for apache"s init scriptENV APACHE_CONFDIR /etc/apache2ENV APACHE_ENVVARS $APACHE_CONFDIR/envvarsENV APACHE_RUN_USER www-dataENV APACHE_RUN_GROUP www-dataENV APACHE_RUN_DIR /var/run/apache2ENV APACHE_PID_FILE $APACHE_RUN_DIR/apache2.pidENV APACHE_LOCK_DIR /var/lock/apache2ENV APACHE_LOG_DIR /var/log/apache2ENV LANG CRUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIRRUN find "$APACHE_CONFDIR" -type f -exec sed -ri " s!^(s*CustomLog)s+S+!1 /proc/self/fd/1!g; s!^(s*ErrorLog)s+S+!1 /proc/self/fd/2!g; " "{}" ";"EXPOSE 80CMD ["apache2", "-DFOREGROUND"]编辑完成后,在与Dockerfile同一目录下运行docker build 命令docker build -t apache-img .如果没有命令出错,docker build会持续运行直到镜像创建完成而创建的过程本质上是运行一个镜像,然后在镜像中按序执行在Dockerfile中的命令,直到执行结束。如果中间有命令执行失败,镜像创建会停止。这时就需要看log,并修改Dockerfile,然后再次执行docker build注:两种镜像创建方式的对比:docker commitdocker build难度相对容易,适合新手和对Linux不熟悉的用户相对难,要求有一定的linux和脚本基础知识文档化文档化在通过其他文件来实现Dockerfile本身就是比较好的文档,可读和可理解性比较强。也可配合其他文档带来详细说明升级,维护后续升级和维护麻烦,需要再次运行镜像并对内部软件进行升级或者安装新软件增加特性后续升级和维护会相对简单,可以直接在dockerfile中更改并增加新特性具体选择哪种方式来制作镜像需要结合实际情况来选择Dockerfile 关键字详解FROMFROM用来指定基础包。在上面的例子中,基础包用的是ubuntu。MAINTAINER镜像作者信息,或者维护人员信息ADD将文件拷贝到Container内文件系统对应的路径格式 ADD <src file> <dst file>所有拷贝到Container中的文件和文件夹权限为0755,uid和gid为0如果需要修改owner用户或者权限,需要使用RUN进行修改ADD文件,文件路径要在docker build<PATH>中指定的<PATH>下RUN创建镜像时执行ENV用来设置环境变量EXPOSEContainer内部服务开启的端口主机上如果要使用,还需要在启动Container时,做host-container的商品映射使用EXPOSE后,一些自动化布署工具可以直接读取这个信息,自动进行端口映射EXPOSE可以有多条,指定多个端口WORKDIR切换工作目录,可进行多次切换(相当于cd命令)切换目录对RUN,CMD,ENTRYPOINT有效USER执行container的用户,如未指定,则默认使用root用户ENTRYPOINTContainer启动时执行的命令,一个Dockerfile中只能有一条ENTRYPOINTENTRYPOINT没有CMD的可替换特性CMDContainer 启动时执行的命令,一个Dockerfile 中只能有一条CMD命令,如果有多条则只执行最后一条CMD如果有多条命令希望在启动后执行,可以考虑使用shell 脚本与ENTRYPOINT的区别CMD的主要用途是为可执行的container提供默认命令CMD在运行时是可替换的,比如在ubuntu中,CMD指定的是/bin/bash。默认情况下运行ubuntu,container中的/bin/bash会被执行如果使用docker run指定运行命令,那CMD会被替换掉如:docker run ubuntu /bin/echo "this is a echo". 这时,container 启动后会执行echo 而不是/bin/bash了ENTRYPOINT是不会替换的,如果在ubuntu镜像中加入ENTRYPOINT,那ENTRYPOINT在启动后会先被执行CMD可以为ENTRYPOINT来提供参数例子:FROM ubuntu:14.10 ENTRYPOINT ["top", "-b"] CMD ["-c"]VOLUME语法:VOLUME [PATH]VOLUME指令用来设置一个挂载点,可以用来让其他容器挂载以实现数据共享或对容器数据的备份、恢复或迁移可以将本地文件夹或者其他Container的文件夹挂载到Container中

docker tomcat镜像 应该拿什么镜像为基础镜像

创建一个安全的Docker基镜像的方法** 构建一个Java环境基镜像 **正如我刚解释的,Alpine Linux是一个构建自有镜像时不错的选择,因此,我们在此将使用它来构建简洁高效的Docker镜像,我们开始吧!组合:Alpine + bash每个Dockerfile第一个指令都是指定它的父级容器,通常是用于继承,在我们的例子中是alpine:latest:shFROM alpine:latestMAINTAINER cSphere 我们同时声明了谁为这个镜像负责,这个信息对上传到Docker Hub的镜像是必要的。就这样,你就有了往下操作的基础,接下来安装我们选好的shell,把下边的命令加上:shRUN apk add --no-cache --update-cache bashCMD ["/bin/bash"]最终的Dockerfile是这样:```shFROM alpine:latestMAINTAINER cSphere docker@csphere.cn >RUN apk add --no-cache --update-cache bashCMD ["/bin/bash"]```好了,现在我们构建容器:sh$ docker build -t my-java-base-image .Sending build context to Docker daemon 2.048 kBStep 1 : FROM alpine:latest---> 2314ad3eeb90Step 2 : MAINTAINER cSphere ---> Running in 63433312d77e---> bfe94713797aRemoving intermediate container 63433312d77e... 省略若干行Step 4 : CMD /bin/bash---> Running in d2291684b797---> ecc443d68f27Removing intermediate container d2291684b797Successfully built ecc443d68f27并且运行它:sh$ docker run --rm -ti my-java-base-imagebash-4.3#成功了!我们有了一个运行着bash的Alpine Linux。,

如何用Dockerfile创建镜像

Dockerfile结构dockerfile由4部分信息组成:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。123456789101112131415161718 # This dockerfile uses the ubuntu image# VERSION 2 - EDITION 1# Author: docker_user# Command format: Instruction [arguments / command] .. # Base image to use, this must be set as the first lineFROM ubuntu # Maintainer: docker_user <docker_user at email.com> (@docker_user)MAINTAINER docker_user docker_user@email.com # Commands to update the imageRUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.listRUN apt-get update && apt-get install -y nginxRUN echo " daemon off;" >> /etc/nginx/nginx.conf # Commands when creating a new containerCMD /usr/sbin/nginx其中#表注释,可以标注一些说明性的文字。FROM关键字指定镜像的来源,默认为DockerHub,也可以写私有仓库的镜像,例如:localhost:5000/centos:6.7,如果本地已经存在指定的镜像名称,则会从本地缓存直接获取。MAINTAINER 指定镜像的作者,之后为镜像操作执行RUN、ADD等,最后是容器启动时发起的指令。Dockerfile中的指令FROM: 指定镜像名称,格式为FROM <image> 或FROM <image>:<tag>,例如FROM ubuntu 或 FROM ubuntu:12.04 MAINTAINER: 镜像作者 ,格式为 MAINTAINER <name>RUN:格式为 RUN <command> 或 RUN ["executable", "param1", "param2"]。前者将在 shell 终端中运行命令,即 /bin/sh -c;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN ["/bin/bash", "-c", "echo hello"]。每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 来换行。CMD:支持三种格式  1.CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;  2.CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;  3.CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。EXPOSE:格式为 EXPOSE <port> [<port>...]。告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。ENV:格式为 ENV <key> <value>。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。这就对应程序语言中的变量定义,可在需要的时候引用。例如:1234 ENV PG_MAJOR 9.3ENV PG_VERSION 9.3.4RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATHADD:格式为 ADD <src> <dest>。该命令将复制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。COPY:格式为 COPY <src> <dest>。复制本地主机的 <src>(为 Dockerfile 所在目录的相对路径)到容器中的 <dest>。当使用本地目录为源目录时,推荐使用 COPY。COPY和ADD的不同就是:ADD多了自动解压和支持URL路径的功能。ENTRYPOINT:两种格式:ENTRYPOINT ["executable", "param1", "param2"]ENTRYPOINT command param1 param2(shell中执行)。配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。CMD和ENTRYPOINT比较:两个命令都是只能使用一次,并且都是在执行docker run指令时运行,如果有多个,只执行最后一条。两者的不同在于参数的传递方式,如果在Dockerfile中定义如下指令1 CMD echo hello或1 ENTRYPOINT ["echo","hello"] 那么在运行命令docker run containerId echo hello时,指定了CMD的输入结果为world,可以看出Dockerfile中指定的命令被覆盖了,而指定了ENTRYPOINT时,输出结果为hello echo world,可以看出指定的命令被作为ENTRYPOINT指定指令的参数了。 VOLUME:格式为 VOLUME ["/data"]。创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。不过此属性在Dockerfile中指定并没有什么意义,因为没有办法指定本地主机的目录。如果需要指定挂载点可以在执行docker run命令时指定:1 docker run -it -v /home/fengzheng/ftp/:/data 859666d51c6d /bin/bashUSER:格式为 USER daemon。指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要临时获取管理员权限可以使用 gosu,而不推荐 sudo。WORKDIR:格式为 WORKDIR /path/to/workdir。为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如1234 WORKDIR /aWORKDIR bWORKDIR cRUN pwd则最终路径为 /a/b/c。ONBUILD:格式为 ONBUILD [INSTRUCTION]。配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。例如,Dockerfile 使用如下的内容创建了镜像 image-A。1234 [...]ONBUILD ADD . /app/srcONBUILD RUN /usr/local/bin/python-build --dir /app/src[...]如果基于 image-A 创建新的镜像时,新的Dockerfile中使用 FROM image-A指定基础镜像时,会自动执行ONBUILD 指令内容,等价于在后面添加了两条指令。12345 FROM image-A #Automatically run the followingADD . /app/srcRUN /usr/local/bin/python-build --dir /app/src使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild。基于CentOS6.7并源码安装nginx首先准备了nginx-1.9.9.tar.gz安装包和CentOS6-Base-163.repo(163源),将这两个文件放到同一目录下,并在此目录下创建名称为Dockerfile的文件。之后在此文件中实现源替换、nginx编译安装、及一些依赖包的安装,Dockerfile内容如下:12345678910111213141516171819202122232425262728293031 # this is a test ubuntu 12.04 image dockerfile# Author:fengzheng # Base image,this must be set as the first line#localhost:5000/centos:6.7是我的私有仓库的镜像,可替换为centos:6.7(DockerHub中的镜像)FROM localhost:5000/centos:6.7 MAINTAINER fengzheng # Commands to update the image RUN mkdir /usr/nginx1.9.9ADD nginx-1.9.9.tar.gz /usr/nginx1.9.9/#RUN yum -y install tar#RUN tar -zxvf /usr/nginx1.9.9/nginx-1.9.9.tar.gzRUN cd /etc/yum.repos.d/ && mv CentOS-Base.repo CentOS-Base.repo.bakADD CentOS6-Base-163.repo /etc/yum.repos.d/RUN cd /etc/yum.repos.d/ && mv CentOS6-Base-163.repo CentOS-Base.repo && yum clean all && yum makecache && yum -y install gcc && yum -y install yum install -y pcre-devel && yum -y install zlib zlib-devel && yum -y install openssl openssl--devel && cd /usr/nginx1.9.9/nginx-1.9.9/ && ./configure && make && make install #如果设置daemon off; nginx无法启动#RUN echo " daemon off;" >> /etc/nginx/nginx.conf # Commands when creating a new container# 启动nginx 需进入/usr/local/nginx/sbin 执行./configureCMD /bin/bash最后执行命令"docker build -t nginx-centos:6.7 ."其中.表示在当前目录下搜索Dockerfile文件,-t参数指定镜像名称和tag。

Dockerfile中ENTRYPOINT 和 CMD的区别

Dockerfile结构dockerfile由4部分信息组成:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。123456789101112131415161718# This dockerfile uses the ubuntu image# VERSION 2 - EDITION 1# Author: docker_user# Command format: Instruction [arguments / command] ..# Base image to use, this must be set as the first lineFROM ubuntu# Maintainer: docker_user (@docker_user)MAINTAINER docker_user docker_user@email.com# Commands to update the imageRUN echo "deb raring main universe" >> /etc/apt/sources.listRUN apt-get update && apt-get install -y nginxRUN echo " daemon off;" >> /etc/nginx/nginx.conf# Commands when creating a new containerCMD /usr/sbin/nginx其中#表注释,可以标注一些说明性的文字。FROM关键字指定镜像的来源,默认为DockerHub,也可以写私有仓库的镜像,例如:localhost:5000/centos:6.7,如果本地已经存在指定的镜像名称,则会从本地缓存直接获取。MAINTAINER 指定镜像的作者,之后为镜像操作执行RUN、ADD等,最后是容器启动时发起的指令。Dockerfile中的指令FROM: 指定镜像名称,格式为FROM 或FROM :,例如FROM ubuntu 或 FROM ubuntu:12.04 MAINTAINER: 镜像作者 ,格式为 MAINTAINER RUN:格式为 RUN 或 RUN ["executable", "param1", "param2"]。前者将在 shell 终端中运行命令,即 /bin/sh -c;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN ["/bin/bash", "-c", "echo hello"]。每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 来换行。CMD:支持三种格式  1.CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;  2.CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;  3.CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。EXPOSE:格式为 EXPOSE [...]。告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。ENV:格式为 ENV 。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。这就对应程序语言中的变量定义,可在需要的时候引用。例如:1234ENV PG_MAJOR 9.3ENV PG_VERSION 9.3.4RUN curl -SL | tar -xJC /usr/src/postgress && …ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATHADD:格式为 ADD 。该命令将复制指定的 到容器中的 。 其中 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。COPY:格式为 COPY 。复制本地主机的 (为 Dockerfile 所在目录的相对路径)到容器中的 。当使用本地目录为源目录时,推荐使用 COPY。COPY和ADD的不同就是:ADD多了自动解压和支持URL路径的功能。ENTRYPOINT:两种格式:ENTRYPOINT ["executable", "param1", "param2"]ENTRYPOINT command param1 param2(shell中执行)。配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。CMD和ENTRYPOINT比较:两个命令都是只能使用一次,并且都是在执行docker run指令时运行,如果有多个,只执行最后一条。两者的不同在于参数的传递方式,如果在Dockerfile中定义如下指令1CMD echo hello或1ENTRYPOINT ["echo","hello"] 那么在运行命令docker run containerId echo hello时,指定了CMD的输入结果为world,可以看出Dockerfile中指定的命令被覆盖了,而指定了ENTRYPOINT时,输出结果为hello echo world,可以看出指定的命令被作为ENTRYPOINT指定指令的参数了。VOLUME:格式为 VOLUME ["/data"]。创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。不过此属性在Dockerfile中指定并没有什么意义,因为没有办法指定本地主机的目录。如果需要指定挂载点可以在执行docker run命令时指定:1docker run -it -v /home/fengzheng/ftp/:/data 859666d51c6d /bin/bashUSER:格式为 USER daemon。指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要临时获取管理员权限可以使用 gosu,而不推荐 sudo。WORKDIR:格式为 WORKDIR /path/to/workdir。为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如1234WORKDIR /aWORKDIR bWORKDIR cRUN pwd则最终路径为 /a/b/c。ONBUILD:格式为 ONBUILD [INSTRUCTION]。配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。例如,Dockerfile 使用如下的内容创建了镜像 image-A。1234[...]ONBUILD ADD . /app/srcONBUILD RUN /usr/local/bin/python-build --dir /app/src[...]如果基于 image-A 创建新的镜像时,新的Dockerfile中使用 FROM image-A指定基础镜像时,会自动执行ONBUILD 指令内容,等价于在后面添加了两条指令。12345FROM image-A#Automatically run the followingADD . /app/srcRUN /usr/local/bin/python-build --dir /app/src使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild。基于CentOS6.7并源码安装nginx首先准备了nginx-1.9.9.tar.gz安装包和CentOS6-Base-163.repo(163源),将这两个文件放到同一目录下,并在此目录下创建名称为Dockerfile的文件。之后在此文件中实现源替换、nginx编译安装、及一些依赖包的安装,Dockerfile内容如下:12345678910111213141516171819202122232425262728293031# this is a test ubuntu 12.04 image dockerfile# Author:fengzheng# Base image,this must be set as the first line#localhost:5000/centos:6.7是我的私有仓库的镜像,可替换为centos:6.7(DockerHub中的镜像)FROM localhost:5000/centos:6.7MAINTAINER fengzheng# Commands to update the imageRUN mkdir /usr/nginx1.9.9ADD nginx-1.9.9.tar.gz /usr/nginx1.9.9/#RUN yum -y install tar#RUN tar -zxvf /usr/nginx1.9.9/nginx-1.9.9.tar.gzRUN cd /etc/yum.repos.d/ && mv CentOS-Base.repo CentOS-Base.repo.bakADD CentOS6-Base-163.repo /etc/yum.repos.d/RUN cd /etc/yum.repos.d/ && mv CentOS6-Base-163.repo CentOS-Base.repo && yum clean all && yum makecache && yum -y install gcc && yum -y install yum install -y pcre-devel && yum -y install zlib zlib-devel && yum -y install openssl openssl--devel && cd /usr/nginx1.9.9/nginx-1.9.9/ && ./configure && make && make install#如果设置daemon off; nginx无法启动#RUN echo " daemon off;" >> /etc/nginx/nginx.conf# Commands when creating a new container# 启动nginx 需进入/usr/local/nginx/sbin 执行./configureCMD /bin/bash最后执行命令"docker build -t nginx-centos:6.7 ."其中.表示在当前目录下搜索Dockerfile文件,-t参数指定镜像名称和tag。

如何用Dockerfile创建镜像

继续docker的学习,昨天用docker成功跑了tomcat,但是在centos中镜像跑的容器手动装jdk和tomcat,今天学习用Dockerfile创建镜像,并在上面搭建java环境,跑一个spring boot小项目。Dockerfile:Dockerfile由一行行命令语句组成,并且支持用“#”开头作为注释,一般的,Dockerfile分为四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行的指令。Dockerfile指令:1、FROM格式:FROM <image>或 FROM <image>:<tag>第一条指令必须为FROM指令,并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令(每个镜像一次)2、MAINTAINET格式:MAINTAINET <name>指定维护者的信息3、RUN格式:RUN <command> 或 RUN ["", "", ""]每条指令将在当前镜像基础上执行,并提交为新的镜像。(可以用“”换行)4、CMD格式:CMD ["","",""]指定启动容器时执行的命令,每个Dockerfile只能有一条CMD指令,如果指定了多条指令,则最后一条执行。(会被启动时指定的命令覆盖)5、EXPOSE格式:EXPOSE <port> [ <port> ...]告诉Docker服务端暴露端口,在容器启动时需要通过 -p 做端口映射

docker极速搭建一个pptp vpn

docker run -d --privileged --net=host -v /etc/ppp/chap-secrets:/etc/ppp/chap-secrets mobtitude/vpn-pptp

如何使用 Docker 快速配置数据科学开发环境

Docker今年应该算是很热门的技术了,之前一直没怎么真正地去了解、接触。通过翻译这篇简单的教程,我同时也对Dcoker有了入门的了解。Docker和我目前使用的Vagrant有些类似之处,都是通过类似镜像的文件创建孤立的系统环境。只是Docker容器中已经安装了所需的包,而我目前所了解的Vagrantbox还没有这个功能。当然,应该是我使用程度不深的原因。不管怎么说,Docker确实是跨平台开发的利器。译文如果有什么不准确的地方,请大家指正。数据科学开发环境配置起来让人头疼,会碰到包版本不一致、错误信息不熟悉和编译时间漫长等问题。这很容易让人垂头丧气,也使得迈入数据科学的这第一步十分艰难。而且这也是一个完全不常见的准入门槛。还好,过去几年中出现了能够通过搭建孤立的环境来解决这个问题的技术。本文中我们就要介绍的这种技术名叫Docker。Docker能让开发者简单、快速地搭建数据科学开发环境,并支持使用例如Jupyter notebooks等工具进行数据探索。要使用Docker,我们要先下载含有相关包(package)和数据科学工具的镜像文件。之后,我们可以通过该镜像,在数秒之内就启动一个数据科学开发环境,免去了手动安装包的麻烦。这个环境,也被成为Docker容器(container)。容器解除了配置的问题——当你启动一个Docker容器后,它就已经处于了良好的状态,所有的包都是可以正常运转的。除了降低进入数据科学的门槛之外,Docker还可以让我们快速搭建拥有不同Python版本和安装了不同包的孤立环境,不像虚拟环境(virtualenv)那样还要重新安装包。在本文中,我们将介绍Docker的基础知识,如何安装Docker以及如何利用Docker容器快速地在本地机器上搭建数据科学环境。虚拟机能够创建虚拟机的软件已经问世数十年,可以让你在本地电脑上模拟其他的系统环境。举个例子,即使你的电脑运行的是Windows操作系统,你仍可以通过虚拟机运行Linux系统。这可以让你在不重装系统的前提下,使用Linux——也就是说,Linux系统是虚拟化运行的,所以你可以从Windows系统访问虚拟机。基本上,你可以在点击该软件的程序图标之后,看到弹出的窗口中乃是一个Linux系统桌面。而虚拟机需要镜像来启动,也就是你必须先拥有一个目标系统的镜像,才能启动相应的虚拟机。如果你想使用Linux,你使用的镜像就得包含创建Linux环境所必须的全部文件。容器尽管虚拟机有诸多好处,例如能够使在Windows平台进行Linux开发成为现实,但是也有着自身的缺陷。首先,虚拟机的启动时间很长,要消耗大量的系统资源。另外,在利用镜像创建完虚拟机中,很难在安装完所需要的包后,再将这个镜像保存,创建为新的镜像。而Docker提供的Linux容器,则通过让多个孤立环境在同一台机器上运行,解决了这个问题。你可以把容器看作是一种更快、更简单地使用虚拟机的方法。但是,容器的使用却有一点麻烦,而且管理和发布容器镜像也不容易。作为开发人员,我们希望能够快速下载并启动一个拥有指定包和工具配置的数据科学环境。例如,你肯定会希望能快速启动一个安装了Jupyter notebook、spark和pandas的容器。DockerDocker容器的里层包裹的是Linux容器(a layer over Linux containers),可以支持更简单地对容器进行管理和发布。使用Docker,可以很容易地下载具备相应包的镜像,并且快速启动。另外,Docker是跨平台的,支持包括Mac、Windows和Linux等系统。作为创建孤立Python环境的另一种方式,虚拟环境(virtual environment)也有这些优势。但是Docker相较于虚拟环境的主要优势有:能够快速启动。如果你想马上就开始进行数据分析,使用Docker就免去了你等待各种包进行安装的时间。配置测试无误。很多时候,要正常安装Python包会,需要以安装某些系统包为前提,并只有在进行相应设置后才能正常使用。如果设置不当,会引起一些很奇怪的错误。但是使用Docker后,这些包就已经配置好了,可以立即使用。跨平台一致性。Python中的包是可以跨平台使用的,但是在Windows和Linux平台下有些不同,而且还有部分依赖包无法在Windows中安装。但是由于Docker容器运行的都是Linux环境,所以它们是高度一致的。能够设置checkpoint并且进行恢复。你可以往Docker镜像中安装包,然后将那个checkpoint下的环境创建成一个新的镜像。这让你能够快速撤销或者回滚配置。运行一个Docker镜像,就相当于创建了一个Docker容器。在本文中,我们在容器中运行一个Jupyter notebook,然后通过浏览器界面来处理数据。安装Docker第一步就是安装Docker。Docker官方为Windows和Mac用户提供了一个简便安装过程的图形界面安装器。下面是每个操作系统的安装指南。Mac OSLinuxWindows在安装时,你需要使用shell命令提示符(shell prompt)。shell命令提示符(shell prompt)也被称为终端或命令行,是在你的机器上通过文本界面而非图形界面运行命令的一种方式。例如,你可以在Windows系统中双击记事本就可以打开一个文本编辑器,也可以在Linux终端中输入nano达到这个目的。Docker提供了一个预先配置好的shell,可以用来运行Docker命令。请按照下面的方法操作:Mac OS —— 从Launchpad中打开Docker Quickstart Terminal程序。详情见本篇文章。Linux —— 打开任意bash终端,就可以使用docker命令。Windows —— 双击桌面上的Docker QuickstartTerminal程序的图标。详情见本篇文章。下文在提到需要运行Docker命令或输入某个命令时,你都需要使用这个shell命令提示符。下载镜像下一步是下载你需要的镜像。下面是我们网站(dataquestio)目前提供的数据科学开发专用镜像:dataquestio/python3-starter —— 这个镜像已经安装好了Python 3, Jupyter notebook和许多其他流行的数据科学库,包括numpy,pandas,scipy,scikit-learn和nltk。dataquestio/python2-starter —— 这个镜像已经安装好了Python 2, Jupyter notebook和许多其他流行的数据科学库,包括numpy,pandas,scipy,scikit-learn和nltk。你可以通过输入docker pull IMAGE_NAME命令,下载相应的镜像。如果你想下载dataquestio/python3-starter这个镜像,那么你需要在终端输入docker pull dataquestio/python3-starter命令。输入这段命令后,程序会自动从Docker Hub下载镜像。Docker Hub与Github类似,不过却是Docker镜像的一个中枢。它会将相应的镜像文件下载至你的本地机器,这样你才能利用该镜像创建容器。新建一个文件夹在本地创建一个文件夹,用于存放notebooks。这个文件夹中将储存你所有的工作文件,并会持续存在于你的机器中,即使是你销毁了docker容器。在这里,我们将创建下面这个文件夹,/home/vik/notebooks。运行镜像镜像下载完成后,你可以通过docker run运行该镜像。我们还需要传入一些选项,确保镜像配置正确。-p 选项用于设置虚拟机的端口,让我们可以在本地访问Jupyter notebook服务器。-d 选项用于以detached模式运行容器,也就是作为背景进程运行。-v 选项让我们指定在本地机器中使用哪个文件夹存储notebook。完整的运行命令是类似这样的:docker run -d -p 8888:8888 -v /home/vik/notebooks:/home/ds/notebooks dataquestio/python3-starter。你应该将/home/vik/notebooks更改为你用于存储文件的地址。另外,应该把dataquestio/python3-starter更改为自己喜欢的docker镜像。执行docker run命令将会创建一个Docker容器。这是与你的本地机器相隔绝的,也可以把它看作是一台单独的电脑。在容器内部,会运行一个Jupyter notebook服务器,并可以让我们使用许多数据科学工具包。另外,docker run命令也会在终端打印出容器的编码(container id ),在通过其他docker容器对该容器进行修改时,就必须要使用这个编码。在下文中我们称该编码为容器编码。查看notebook服务器如果你的系统是Linux,那么下一步非常简单——只需要在浏览器中打开localhost:8888,之后应该就能看到运行中的notebook。如果你使用的是Windows或OSX,之前也按照Docker官方安装指南进行了操作,并且安装过程中使用了docker-machine,那么本地机器的名称是default,运行docker-machine ip default命令就可以得知docker容器的ip。如果使用了其他的名字,例如dev,那在命令中将default替换为dev即可。接下来,在浏览器中访问CONTAINER_IP:8888就可以看到notebook(将CONTAINER_IP替换为你的容器编码)。创建一个notebook到了这一步,你可以创建一个新的Jupyter notebook测试下这个孤立的开发环境。试试输入下面这个scikit-learn的例子:from sklearn import datasetsfrom sklearn.cross_validation import cross_val_predictfrom sklearn import linear_modelimport matplotlib.pyplot as plt%matplotlib inlinelr = linear_model.LinearRegression()boston = datasets.load_boston()y = boston.targetpredicted = cross_val_predict(lr, boston.data, y, cv=10)fig, ax = plt.subplots()ax.scatter(y, predicted)ax.plot([y.min(), y.max()], [y.min(), y.max()], "k--", lw=4)ax.set_xlabel("Measured")ax.set_ylabel("Predicted")plt.show()添加数据文件如果你想往开发环境中添加数据文件,你有三个选择。第一个选择,就是将文件放在你之前创建用来存放notebook的文件夹中。你放那里的任何文件将可以自动通过Jupyter notebook中访问。第二种选择就是使用docker cp命令。docker cp可以从本地机器复制文件至容器中,反之亦然。假设你想拷贝/hom/vik/data.csv文件至一个id为4greg24134的容器中,你可以输入下面的命令:docker cp /home/vik/data.csv 4greg24134:/home/ds/notebooks。这会将data.csv文件拷贝到容器中用于存放notebook的文件夹中。当然,你可以选择将文件放到容器中的任何地方,但是把它们放在存放notebook的文件夹忠厚,你就可以轻松地通过Jupyter notebook访问这些文件了。第三个选择就是使用Jupyter notebook首页右上方的upload按钮。这可以让你选择一个文件,并上传到容器中用于存放notebook的文件夹中。不管你使用哪种方法,要想在Jupyter notebook中加载文件,需要按照类似下面的方式进行:import pandasdata = pandas.read_csv("data.csv")复制容器中的数据文件你可能会需要从容器中拷贝文件至本地机器。最容易的办法就是把文件放置在/home/ds/notebooks文件夹中,这样的话这些文件就会自动映像到本地机器。另一种方法也就是利用docker cp命令。假设你想从id为4greg24314的容器中,把/home/ds/notebooks/data.csv文件拷贝至本地机器的/home/vik/文件夹中,你可以输入下面的命令:cp 4greg24134:/home/ds/notebooks/data.csv /home/vik/data.csv。最后一种方法就是使用Jupyter界面中的download选项。在网页模式下点击一个不是notebook的文件,将会将其下载至本地。如果你已经打开了一个notebook,那么可以先点击File,然后选中download as就可以下载至本地。安装更多的工具包如果你想在容器中安装更多的工具包,你可以通过正常的bash命令行命令就可以实现。要想在容器中执行这些命令,你需要运行docker exec命令。这个命令接受容器的id作为参数,以及一个期望运行的命令。例如输入docker exec -it 4greg24134 /bin/bash将会在编码为4greg24134的容器中开启一个shell命令提示符(shell prompt)。-it选项确保我们在容器中打开了一个输入会话,并且可以输入命令。在运行docker exec命令之后,你就会看到容器中的shell命令提示符(shell prompt)出现。容器此时正通过一个名为ds的虚拟环境运行Python程序,这个虚拟环境已经是处于激活状态的。接下来,只需要输入pip install PACKAGE_NAME就可以安装其他的工具包。例如,你可以使用pip install requests来安装requests。当你希望退出容器的shell终端时,只需要输入exit即可。关闭docker容器在完成数据处理工作之后,你就可以通过docker rm -f CONTAINER_ID来停止docker容器。你应该输入之前获得的容器编码。如果你忘了,你可以运行docker ps查看。容器停止运行之后,notebooks会继续存放在你本地用于存放的文件夹中。

Mac OS系统Dock上的Launchpad图标消失找回方法步骤

总会有那么一些童鞋,像小编这样把Mac OS系统Dock上的Launchpad图标给搞丢了,关键是搞丢了之后还不知道找回来。Launchpad对部分童鞋来说完全是不可或缺的,因为Launchpad里面藏着我们所有常用的App图标,没了Launchpad程序都不知道去哪里找,自然急得要死。其实,要找回“Launchpad”图标很简单,在你的Finder里面,选择这台Mac,直接搜索“Launchpad”你就会欣喜的发现“Launchpad”出来了,然后将其重新拖到Dock当中就可以了。确实很简单吧?事实上,Launchpad只是一个快捷方式而已,要打开相应的应用程序并不一定需要“Launchpad”,在finder上面就有应用程序的文件夹,打开你所有的应用程序都在里面。或者直接用——Spotlight 搜索一下就立马出来了。打开Spotlight菜单:Control+空格;在Finder中打开Spotlight:Command+Option+空格;

阿里云搭建docker私有镜像仓库与SpringBoot项目推送远程镜像仓库

随着项目上容器技术的广泛应用,我也加入了Docker容器技术的学习。首先初学Docker,我的想法很简单。创建一个SpringBoot项目,如何将SpringBoot项目打包成容器镜像,然后推送至远程的Docker服务上部署。带着这个目的查阅了一些资料后,整体的实现思路如下: 环境描述: 准备一台阿里云服务器,已经完成Docker服务安装,后续将会在该服务器上进行搭建Docker私有镜像仓库。本地准备一个SpringBoot项目,至少编写一个Controller,保证本地SpringBoot项目启动后能够正常访问到Contriller。 由于私有镜像仓库是部署在阿里云上,要确保私有仓库的安全性,需要一个安全认证证书,防止发生意想不到的事情。所有需要在搭建私有仓库的Docker主机上先生成自签名证书。 生成自签名证书: 通过openssl命令先生成自签名证书,运行命令后需要填写一些证书信息。其中Common Name填写的xx.96.104.xxx是最关键的信息,这里填写的是私有仓库的地址: Country Name:国家 State or Province Name:州或省 Locality Name:城市 Organization Name :机构名称 Organizational Unit Name :组织单位名称 Common Name:hostname域名 Email Address:邮箱地址 页面访问: 页面访问: http://xx.96.194.xxx:7001/ 页面访问Spring Boot项目 参考:Docker 私有镜像仓库的搭建及认证 参考:Spring Boot 多样化构建 Docker 镜像 参考:registry-web集成安全认证

dock appointment 是什么意思i、

是doctor appointment吗?和医生预约的时间。美国人一般都是先和医生预约时间然后再去看医生的。

音乐发烧友进2BG电容DOCK。ZVM mode过的是什么意思?

BG电容其实是Black Gate电容的缩写,是Rubycon旗下的高级电解电容系列,多应用于要求非常高的顶级音响设备上。作为顶级电容之一,对于Black Gate电容,各位喜欢自己动手“摩机”的朋友,相信应该不会陌生。Black Gate电解电容,尤其FK系列的改良效果,更是让乐迷们喳喳称奇。Black Gate独有的音色与气质,只有名贵器材才听得到的风味。注:Black Gate电容拥有世界性专利设计,其惊人优良的传真度,低杂音以及讯号传送速度和情报量非普遍市面上电解电容,可望其项背。创新的结构与介质,容许电子的直通传导,完全免除离子间媒介,而能达成以下独有的优点;1)内部杂音,失真减少到1/1000(-60分贝)以下2)由于有效消除,上述电容器的最大介面障碍,讯号传送速度得以提高倍余3)电容器功率容量亦因而增加多倍Black Gate电容包括有:一般电路用(标准型),大电流电源用(LUG),高压电源用(SK)、扬声器分音专用(AC)、低阻抗超低歪失真用(F,FK)、超低杂音交用(C),低损耗电脑级产品(V)、低失真高性能系列(K)、无极性小型品(N)、无极性高性能化产品(NX)及超小型化常用系列(PK)。说白了就是在机器里面加入BG电容 改变声音的输出 而达到提升音质的效果!MOD就是自己动手加电容的意思!

什么是干船坞(Dry Dock)?

干船坞(Dry dock)。将水抽掉,使船舶在此进行出水检查、修理的封闭的船池。待出售的船舶通常干船坞让有意向的买干船坞主查看。也用作Graving dock。干船坞的三面接陆一面临水,其基本组成部分为坞口、坞室和坞首。坞口用于进出船舶,设有挡水坞门,船坞的排灌水设备常建在坞口两侧的坞墩中;坞室用于放置船舶,在坞室的底板上设有支承船舶的龙骨墩和边墩;坞首是与坞口相对的一端,其平面形状可以是矩形、半圆形和菱形,坞首的空间是坞室的一部分,在这里拆装螺旋桨和尾轴。干船坞配有各种动力管道及起重、除锈、油漆和牵船等附属设备。当船舶进入干船坞修理时,首先用灌泄水设施向坞内充水,待坞内与坞外水位齐平时,打开坞门,利用牵引设备将船舶慢速牵入坞内,之后将坞内水体抽干,使船舶坐落于龙骨墩上。修完或建完的船舶出坞时,首先向坞内灌水,至坞门内外水位齐平时,打开坞门,牵船出坞。

单反镜头usbdock是什么意思

一款附件产品。USBDock镜头调节底座是适马针对A、C、S系列镜头推出的一款附件产品。单反就是指单镜头反光取景,即SLR,这是当今最流行的取景系统,大多数35mm照相机都采用这种取景器。在这种系统中,反光镜和棱镜的独到设计使得摄影者可以从取景器中直接观察到通过镜头的影像。因此,可以准确地看见胶片即将“看见”的相同影像。该系统的心脏是一块活动的反光镜,它呈45°角安放在胶片平面的前面。

off-dock是什么 意思

堆场外铁路运输堆场内铁路运输(ON-DOCK)堆场外铁路运输(OFF-DOCK)

hickory dickory dock是什么意思?

hickory dickory dock的中文意思是:滴答滴答钟声响。是一首外语儿歌,歌词如下:Hickory dickory dock滴答滴答滴The mouse ran up the clock老鼠爬上钟The clock struck one挂钟敲一下The mouse ran down老鼠跑下去Hickory dickory dock滴答滴答滴Hickory dickory dock滴答滴答滴The mouse ran up the clock老鼠爬上钟The clock struck one挂钟敲一下The mouse ran down老鼠跑下去Hickory dickory dock滴答滴答滴扩展资料儿歌 (nursery rhyme),是以低幼儿童为主要接受对象的具有民歌风味的简短诗歌。它是儿童文学最古老也是最基本的体裁形式之一。儿歌是民歌的一种,全国各地都有。内容多反映儿童的生活情趣,传播生活、生产知识等。歌词多采用比兴手法,词句音韵流畅,易于上口,曲调接近语言音调,节奏轻快,有独唱或对唱,如公认的全球第一儿歌《一闪一闪小星星》。儿歌中既有民间流传的童谣,也有作家创作的诗歌;近年“彭野新儿歌”很有时代感;另有梁静茹的歌命名为《儿歌》。参考资料:百度百科-儿歌

hickory dickory dock什么意思?

hickory dickory dock的中文意思是:滴答滴答钟声响。是一首外语儿歌,歌词如下:Hickory dickory dock滴答滴答滴The mouse ran up the clock老鼠爬上钟The clock struck one挂钟敲一下The mouse ran down老鼠跑下去Hickory dickory dock滴答滴答滴Hickory dickory dock滴答滴答滴The mouse ran up the clock老鼠爬上钟The clock struck one挂钟敲一下The mouse ran down老鼠跑下去Hickory dickory dock滴答滴答滴扩展资料儿歌 (nursery rhyme),是以低幼儿童为主要接受对象的具有民歌风味的简短诗歌。它是儿童文学最古老也是最基本的体裁形式之一。儿歌是民歌的一种,全国各地都有。内容多反映儿童的生活情趣,传播生活、生产知识等。歌词多采用比兴手法,词句音韵流畅,易于上口,曲调接近语言音调,节奏轻快,有独唱或对唱,如公认的全球第一儿歌《一闪一闪小星星》。儿歌中既有民间流传的童谣,也有作家创作的诗歌;近年“彭野新儿歌”很有时代感;另有梁静茹的歌命名为《儿歌》。参考资料:百度百科-儿歌

hickory dickory dock啥意思

"Hickory, dickory dock, The mouse ran up the clock",这是英语儿歌中的一句,意思应该是“滴答滴答”

电路图中的DOCK_PWR是什么意思

虽然我很聪明,但这么说真的难到我了

什么是正本尾纸( original dock receipt)?

32、尾纸=重柜纸=码头纸英文:Receipt,即书上的Dock Receipt场站收据.指装完货的重柜回到CY,进闸口后,码头给的一个收据.另:散货入仓后,拼箱公司给货主的Receipt也可称为“尾纸”作用:报关必用场单,即Dock Receipt.注:场单的功能,同尾纸、重柜纸、码头纸,用于报关. ○16、尾纸:(Receipt)、重柜回场后CY给的Receipt及散货(未装入柜中)入散货仓后,仓库给的 Receipt也可叫“尾纸”.二者的用途之一均为报关必需.

advanced mini dock是干什么的

HTPC底座

dockers是什么牌子

DOCKERS San Francisco品牌创立于1986年,旨在为消费者提供牛仔裤和正装裤之间休闲服饰的选择。Dock从为男士提供卡其裤开始,Dockers San Francisco品牌今天已经发展成为一个为男士提供各种款式的上衣, 休闲裤,帽子,以及配饰的全面品牌。作为休闲服饰领域的领导者, Dockers San Francisco一直致力于产品的创新和研发,为消费提供舒适与时尚兼具的产品,满足消费者工作和娱乐上不同功能性的需求,同时展现出自己的风格和自信。到底男士们应该穿着什么样风格的服饰去上班呢?在二十世纪八十年代中期,牛仔服饰在年轻人市场中的销量急剧下滑,当时的美国企业中,除了严肃的正装配领带之外,年轻人更追求的是那种能在工作中表现多些随意而且舒适美观的”商务休闲服饰” 。Dockers 品牌的创立为这个长久的问题找到了解决答案。当牛仔裤和商务正装都已经不能满足商务人士的需求时,Levi Strauss & Co填补了这一空缺,满足了市场的需求。于1986年推出的Dockers Khaki Pant (卡其裤),迅速成为了牛仔裤和正装裤之间的另一休闲选择。而Dockers品牌也成为了人们心目中舒适、休闲、时尚服饰的代名词。

wireless dock是什么意思

翻译大致是无线停靠的东西,我想是一些移动设备的靠坐,应该还能和其无线连接实现一些功能!

killall dock什么用

dock就是OS X系统一般在底部的程序快捷方式,但是文件什么的也可以拖进去,右边有条竖线按住上下拖动可以调节dock大小,当然详细调节在系统偏好设置-dock

下面网上复制的不懂是什么意思 苹果的资深玩家都知道iPod的DOCK接口音频输出的声音跟耳机接口的

DOCK口本质上是数据接口,输出声音的话当然也是数字信号,所以还需要一个数模转换的过程,当数模转换器的水平高于IPOD自身的数模转换水平时自然音质更好,反之则要差一些。

dock audit是什么意思?具体点.

dock的意思是:船坞 码头 被告席<br>靠码头 停靠 进港<br>audit审计 查帐

dock文件用什么打开

2007的是docx吧,难道楼主看错了?如果是DOCK文件,可能是你安装了仿MAC的界面程序或者DELL DOCK这类程序引起的,试下删除它们或者重装

thinkpad onelink dock是什么,有什么功能?

THINKPAD 是指你的电脑,ONELINK DOCK是一种特殊接口的扩展。其功能相当于端口复制器,通过一个特殊的接口外接出来,到一个小盒子里,小盒子带有很多扩展接口,有USB,网口等,主要在E系列机器中作为选件出现。扩展接口是主板上用于连接各种外部设备的接口。通过这些扩展接口,可以把打印机,外置Modem,扫描仪,闪存盘,MP3播放机,DC,DV,移动硬盘,手机,写字板等外部设备连接到电脑上。而且,通过扩展接口还能实现电脑间的互连。目前,常见的扩展接口有串行接口(Seria扩展接口l Port),并行接口(Parallel Port),通用串行总线接口(USB),IEEE 1394接口等。串行接口,简称串口,也就是COM接口,是采用串行通信协议的扩展接口。串口的出现是在1980年前后,数据传输率是115kbps~230kbps,串口一般用来连接鼠标和外置Modem以及老式摄像头和写字板等设备,目前部分新主板已开始取消该接口。

pcdock是什么牌子

深圳的初创品牌LANQ从LANQ目前的主打产品LANQPCDOCKPROMAX公布的官方信息来看,它看似单一的“机身”里,集成了包括能放下两台显示器的大型增高架+双频双天线WiFi5网卡+高通蓝牙模块+15W无线快充充电板+2A2C四口USB3.0集线器+支持Windows11的指纹识别模块+带有遥控器的RGB桌面氛围灯在内,至少七大功能模组。LANQ目前在售的基础款PCDOCK,是一款集成WiFi,蓝牙,指纹模组的USBHub,最为重要的是,与常规的显示器增高架相比,集成了WiFi,蓝牙,无线充电,指纹,以及USB Hub功能的LANQPCDOCKPROMAX,也能让哪怕是最“古老”的台式PC实现尽可能的桌面“无线化”体验。

hickory dickory dock是什么意思?

hickory dickory dock的中文意思是:滴答滴答钟声响。是一首外语儿歌,歌词如下:Hickory dickory dock滴答滴答滴The mouse ran up the clock老鼠爬上钟The clock struck one挂钟敲一下The mouse ran down老鼠跑下去Hickory dickory dock滴答滴答滴Hickory dickory dock滴答滴答滴The mouse ran up the clock老鼠爬上钟The clock struck one挂钟敲一下The mouse ran down老鼠跑下去Hickory dickory dock滴答滴答滴扩展资料儿歌 (nursery rhyme),是以低幼儿童为主要接受对象的具有民歌风味的简短诗歌。它是儿童文学最古老也是最基本的体裁形式之一。儿歌是民歌的一种,全国各地都有。内容多反映儿童的生活情趣,传播生活、生产知识等。歌词多采用比兴手法,词句音韵流畅,易于上口,曲调接近语言音调,节奏轻快,有独唱或对唱,如公认的全球第一儿歌《一闪一闪小星星》。儿歌中既有民间流传的童谣,也有作家创作的诗歌;近年“彭野新儿歌”很有时代感;另有梁静茹的歌命名为《儿歌》。参考资料:百度百科-儿歌

dock接口是什么

是苹果公司为iPod设计的专用的接口,称为iPod Dock接口,用于视频输出。

二代大狗dock接口什么意思啊

"二代大狗dock接口"指的是机器人领域中的一种机器人控制接口,具体是指由中国机器人厂商科沃斯(Ecovacs)推出的一种机器人控制接口。这个接口可以与科沃斯的机器人产品(包括大狗机器人等)进行连接,实现对机器人的控制和操作。

hickory dickory dock是啥意思?

Hickory Dickory Dock又名宿命奇案,它是一本图书的名字。Hickory Dickory Dock于2002年7月1日由HarperCollins Publishers Ltd出版。扩展资料:Hickory Dickory Dock于2002年7月1日由HarperCollins Publishers Ltd出版。丛书名: Poirot,简装: 208页,正文语种: 英语,ISBN: 0007120990,条形码: 9780007120994,尺寸: 17.4 x 11 x 2.2 cm,重量: 159 g。hickory:n. 山胡桃树,山胡桃木、v. 杖责,鞭打。dickory :n.出租车的计时器。dock:n. 码头;船坞;被告席;尾巴的骨肉部分、vt. 使靠码头;剪短、vi. 入船坞、n. (Dock)人名;(老)多;(英、法、瑞典)多克。参考资料:百度百科-Hickory Dickory Dock

拿铁dock生态指什么?

dock一般指的是苹果操作系统中的停靠栏,这种停靠栏很有个性,而且很适用。如果对XP的桌面厌倦了的话,使用一下Dock是一个不错的选择。

请问同样作“码头”解时wharf和dock有什么区别吗?

《美国传统词典[双解]》wharf:A landing place or pier where ships may tie up and load or unload.码头:船只可以停泊并装卸货物的登陆处或码头。dock:A pier; a wharf.码头;停泊处 。常作 docks 港区:作船只靠岸用的商业港口上的一组码头 。

hickory dickory dock是什么意思

Hickory Dickory Dock又名宿命奇案,它是一本图书的名字。Hickory Dickory Dock于2002年7月1日由HarperCollins Publishers Ltd出版。扩展资料:Hickory Dickory Dock于2002年7月1日由HarperCollins Publishers Ltd出版。丛书名: Poirot,简装: 208页,正文语种: 英语,ISBN: 0007120990,条形码: 9780007120994,尺寸: 17.4 x 11 x 2.2 cm,重量: 159 g。hickory:n. 山胡桃树,山胡桃木、v. 杖责,鞭打。dickory :n.出租车的计时器。dock:n. 码头;船坞;被告席;尾巴的骨肉部分、vt. 使靠码头;剪短、vi. 入船坞、n. (Dock)人名;(老)多;(英、法、瑞典)多克。参考资料:百度百科-Hickory Dickory Dock

thinkpad onelink dock是什么,有什么功能

鲁公女《人鬼情未了》:如歌如泣,如胶似漆,似梦非梦,说实又虚。是谁沟通了幽幽冥路,是谁拔去这生死樊篱。举首明月,轻诘清风,桃李无言,长夜静寂。莫须问,人的挚爱,情的交融,鬼的恋痴,心的撞击。莫道柔情似水,自能撼天动地。

dock to dock什么意思国际贸易

dock to dock码头到码头重点词汇dock码头; 被告席; 草本植物; 尾巴的骨肉部份; 船停靠码头; 剪短; 削减,缩减; 在…设置船坞; 入

iOS11的dock栏图标右上角有个闹钟符号什么意思?

是GPS标志,你可以下拉通知栏的开关关闭,也可以打开设置,安全和隐私,位置服务进行关闭。iOS 11是苹果公司研发的操作系统。北京时间2017年6月6日凌晨1点,苹果开发者大会WWDC2017在加州圣何塞麦克恩利会议中心召开,苹果系统iOS 11正式亮相。Dock是图形用户界面中用于启动、切换运行中的应用程序的一种功能界面,Dock是苹果公司Mac OS X操作系统及其始祖NeXTSTEP和OPENSTEP操作系统中重要组成部分,在 Newton OS中也有dock概念的一些早期例子,现在在不同操作系统中有很多不同的dock程序。

机箱上的hdd dock是什么意思

硬盘直插插座。

winform dock 是什么意思

winform dock 是赢得形成码头的意思

去dock充电什么意思

去dock充电意思是把手机放在dock无线充电装置上。dock是一款苹果系统推出的一款无线充电装置,其中去dock充电是指的是去把手机放在dock无线充电装置的意思,十分方便使用。

越野车的dock接口是什么

是为对外设计的专用的接口,称为Dock接口,用于视频输出。越野车 ORV(Off-Road Vehicle)是一种为越野而特别设计的汽车,主要是指可在崎岖地面使用的越野车辆。主要特点是非承载式车身,四轮驱动,较高的底盘、较好抓地性的轮胎、较高的排气管、较大的马力和粗大结实的保险杠。
 1 2 3 4  下一页  尾页