docker 进入容器容器有几个执行环境

如何在Docker容器运行GUI程序_百度经验
&&&&&&&&&电脑软件如何在Docker容器运行GUI程序听语音123456
百度经验:jingyan.baidu.com在Docker容器中运行大多数GUI程序且不出错,Docker是一个开源项目,提供了一个打包、分发和运行任意程序的轻量级容器的开放平台,它没有语言支持、框架或者打包系统的限制,并可以运行在任何地方、任何时候从小型的家用电脑到高端的服务器都可以运行。百度经验:jingyan.baidu.com计算机虚拟机百度经验:jingyan.baidu.com1首先安装Docker,确保在Linux主机中已经安装了Docker,运行的是CentOS 7主机运行yum管理器和使用如图的命令来安装Docker。2然后创建Dockerfile在其中要输入需要的配置来创建一个可以工作的Firefox容器,为了运行Docker镜像使用最新版本的CentOS,要创建Docker镜像,用文本编辑器创建一个名为Dockerfile的文件。3接着在第四行的配置中,用自己的用户和组id来替换0,可以用下面的命令在shell或者终端中得到uid和gid。4然后构造Docker容器,安装firefox浏览器和它需要的包,设置用户权限并让它可以工作,这里镜像名是firefox,可以根据需要命名。5接着如果一切顺利,现在可以在运行在CentOS 7镜像中的Docker容器里面运行GUI程序也就是Firefox浏览器。6最后在Docker容器中运行GUI程序是一次很棒的体验,它对主机文件系统没有任何的伤害,它完全依赖你的Docker容器。END经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。投票(0)已投票(0)有得(0)我有疑问(0)◆◆说说为什么给这篇经验投票吧!我为什么投票...你还可以输入500字◆◆只有签约作者及以上等级才可发有得&你还可以输入1000字◆◆如对这篇经验有疑问,可反馈给作者,经验作者会尽力为您解决!你还可以输入500字相关经验00100热门杂志第1期你不知道的iPad技巧3795次分享第1期win7电脑那些事6650次分享第2期新人玩转百度经验1414次分享第1期Win8.1实用小技巧2657次分享第1期小白装大神1932次分享◆请扫描分享到朋友圈你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
比如说,我在镜像中的/etc/profile文件里添加了export PATH=/opt/php-5.6:$PATH
但我通过命令docker exec -ti ID /bin/bash进入容器时,执行php -v返回的却是默认的php版本,5.4版本的,截图如下:
有大侠遇过类似的问题不?我希望exec进入容器后,能自动读取/etc/profile中定义的变量,而不用每次都执行source /etc/profile。这样该怎么处理比较好?
- 80后it男。。。
/etc/profile中的变量不是自动就export的,完整的os在启动过程会有启动程序依次读取系统和用户的配置文件,但在容器里就没有这一步了,所以要自己导出才可以。
最直接的办法是用 run 或create的-e参数通过命令行在容器外指定环境变量;当然也可以写一个entrypoint脚本,在其中export 那些基本不发生变化的环境变量。
对于你说的这种情况,建议直接在镜像里rm 旧版本的-P
我遇到过这个问题,我采用的是把变量写入/root/.bashrc这个文件,就会自动读取你的变量了。
不过我看了楼上的回答,感觉写一个entrypoint的方式更好,使用Dockerfile文件构建镜像的时候会更方便,如果你有兴趣,不放学习一下Dockerfile的命令ENTRYPOINT和CMD的区别。
启动时加一个-e或dockerfile里面加入变量环境比较好点
感谢各位的解答。已通过在Dockerfile中添加ENV的方式解决该问题。
要回复问题请先或
浏览: 8606
关注: 6 人不知道怎么回事,今天问答里面(wenda.phpxy.com)里的vagrant被一个网友提了很多问。可想而知,docker现在有多火呢?现在只要说到云就在说docker,说到docker就是容器,就是虚拟机。就是快速部署和复制,其实对于我们大多数的PHP的小伙伴来说真是没有多大用处。由于windows问题太多,我们此篇文章不讲windows下的安装。我们今天将要实现的方式是使用vagrant来部署自己的开发环境,使用vagrant部署开发环境最大的好处是快速,完全隔离。并且两边操作互不影响。我个人推荐下载使用:下载安装 VirtualBox :https://www.virtualbox.org/下载安装 Vagrant :http://www.vagrantup.com/先安装:VirtualBox 这是一个开源的虚拟机,很好用。不用担心有授权和破解问题。再安装上vagrant,之后的就是重点了。下载这样一个box,我们叫做盒子:https://atlas.hashicorp.com/laravel/boxes/homestead然后执行vagrant box add laravel/homestead 下载路径的box名在某个目录中执行git clone https://github.com/laravel/homestead.git Homestead执行bash init.sh配置ssh-keygen -t rsa -C &you@homestead&修改一下IP地址哟和配置文件,我们进行主要部份的讲解:folders:&//本地目录&- map: ~/Code&//映射到远程目录的地址&to: /home/vagrant/Codesites:&//这是站点的别名&- map: homestead.app&//这是服务器端的web可以访问的根目录&to: /home/vagrant/Code/Laravel/public配置完成了。现在你可以试试了:&vagrant up就启动了我们的容期服务器。你可以通过 ssh vagrant@IP 地址,就连接到服务器了。你可以试试操作~/Code目录,看看代码是不是自动上传到了虚拟服务器上了。改改hosts文件,将homestead.app指向虚拟的IP地址,一切就OK了。下面的是重点,我们根据网友的提问总结了经常遇到的问题:
热门手册&&
其他手册&&
容器,字面上理解就是装东西的东西。常见的变量、对象属性等都可以算是容器。一个容器能够装什么,全部取决于你对该容器的定义。当然,有这样一种容器,它存放的不是文本、数值,而是对象
Guzzle 库是一套强大的 PHP HTTP 请求套件。
本文重点演示如何使用 Guzzle 发起多线程请求。
经过前三篇文章 基础准备 、 构建路由 和 设计 MVC ,我们已经得到了一个结构比较完整的 MVC 架构的 PHP 微框架,但是距离一个真正能够上手使用的框架还差一样东西: 数据库封装 ,本篇就将讲述如何集成一个 ORM Composer 包
PHP邮件发送那点事,操作系统我个人比较喜欢CentOs,原生的系统都装有,没有的话 可以自己谷歌,这个很简单 ,跳过。需要注意的是,Postfix默认只对本地IP的Client开放,因为我们是用PHP调用Postfix发送,所以没有修改。
微信在中国占有6个亿的用户,微信支付越来越多的企业和个人在使用了,今天我们来连载的讲解微信支付的使用。希望能够帮助你更快的了解微信支付,并且快速上手微信支付。
PHP的流程控制要怎么学习?流程控制为什么是人类高度抽象之后的思考方式。学习编程,其实用的最多的就是流程控制来实现不同的业务逻辑。本章会比较有趣,会讲解王思总同学通过流程控制来处理工作的方式和方法,方便你来思考问题
很多朋友连接数据库的过程当中经常有出现乱码的这种现象,到底该如何解决PHP连接mysql乱码的问题?PHP学院专门为大家总结了9步注意事项。通过这9步,就可以彻底解决PHP连接MySQL数据库后的终极解决方案。
我们在实际项目中总是遇到各种千奇百怪的问题。 其中有一个关于类似于滴滴打车的发单业务和抢单业务,若5分钟没有人接单。将任务派单给自己的投递小组。这可如何解决呀。
微信转发助力是现在微信营销中经常使用到的一种方式。邀请朋友过来点赞,其实就是为了增加这个活动的暴光率。而,我们在实际微信营销和微信开发中遇到了一些极大的性能瓶颈。
PHP代码规范与质量检查工具PHPCS,PHPMD的安装与配置
我听到了太多的人去抱怨说不好。从我目前见到的数据统计,我认为有不到1%的人学不好程序。而这1%的人,他们的思维模式和我们遇到的大多数人不太一样
开发了两年PHP遇到瓶颈怎么办?你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
对于用户来说,可能一开始在不了解的情况下会对容器报以拒绝的态度,但是在尝到容器的甜头、体验到它的强大性能之后,相信大家最终是无法抵挡其魅力的。容器技术能够解决IT业目前面临的很多问题,而且优势也很明显,比如说:
1、容器具有不可变的特性。
容器将操作系统、程序库、配置文件、路径和应用程序打包在一起运行,也就是说,我们在做QA测试的时候整个镜像是什么样,投入到产品环境以后就是什么样,其性能不会有任何差距。
2、容器都非常轻量。
单个容器的内存占用很小,不像其他进程动辄占用上万MB的内存空间,容器只会给主进程分配内存,可以有效降低系统开销。
3、容器的速度更快。
虚拟机的启动时间一般都在分钟级,容器的启动速度可以达到秒级,启动容器就跟启动linux进程一样快。
虽然容器的好处这么多,但是有很多用户还不了解,还认为容器跟一般的虚拟机没什么差别。实际上,容器是可销毁的,这是容器跟虚拟机之间最大的差别。容器的存在周期很短,只要用户使用完毕,就可以立即销毁容器,所以用“朝生暮死”来形容也不算过分。
在对容器进行使用和维护时,我们应该充分利用容器的这个特性,不要再把容器当成一般的虚拟机来看待,不然就真的大材小用了。在实际使用过程中,为了最大限度地发挥容器的优势,有些错误还是少犯为妙。我总结出了下面几个要点供大家参考,在跑容器的时候大家最好还是尽量遵照这几条原则:
1) 不要将数据储存在容器中。
容器随时都可以停止、销毁或迁移,比方说,一个容器里运行的应用版本是1.0,我们分分钟就可以把这个应用升级到1.1,同时还不会对数据造成任何影响。所以如果用户想要存数据的话,最好是用数据卷来存储。不过在用卷存数据的时候大家还是要注意一点,如果有两个容器共用一个数据卷,都往里面写数据的话,是有可能造成程序崩溃的。我们在设计应用程序的时候应该考虑到这一点,为保万无一失,应用程序应该具备特定的机制,以确保在往共享数据存储区写入数据的时候不会出错。
2) 不要把应用程序分块交付。
在部分用户看来,容器跟虚拟机没什么两样,所以有些人往往会把应用程序部署到当前运行的若干个容器中。这种做法在开发阶段没有太大的问题,因为做开发的时候我们会很频繁地进行部署和调试,但是到了持续交付(CD)阶段,下一步就是QA测试和正式投产了,这种做法就不太适合了。在这一阶段,我们应该充分考虑到容器的不可变特性,最好是将应用程序打包到一个镜像中交付。
3) 不要把镜像体积建得很大。
镜像越大,就越难发布。镜像中只包含必要的文件和library就可以了,能让应用或者进程运行起来就行。千万不要在镜像中安装些没必要的东西,在构建镜像的时候要避免使用yum这种update命令,免得系统自动下载很多不相干的文件到新镜像层中。
4) 建镜像的时候不要只建一层。
大家都知道,Docker的文件系统是分层的,在建镜像的时候我们应该这么建,将操作系统单独建一层,作为基础镜像,然后用户名定义文件、运行时安装环境、配置文件都要分别建一层镜像,最后才是应用镜像层。这么做的话,我们以后重建、管理以及发布镜像的时候就要轻省得多了。
5) 不要把本地运行的容器转成镜像。
换句话说就是创建镜像的时候不要用“docker commit”命令来创建。用这种办法建镜像是完全不可取的,因为这种办法是不能重复的。我们在建镜像的时候应该从Dockerfile创建,或者用其他S2I(从源文件构建镜像)的方式来创建,这样镜像才具有可再生性,而且如果我们把镜像存在git之类提供版本控制能的系统里的话,还可以对Dockerfile的改动进行跟踪。
6) 给镜像打tag的时候不要只打“latest&。
latest其实就相当于Maven里头的“快照”。因为容器的文件系统是分层的,我们最好是给镜像多打几个tag。如果只有latest的话,可能过段时间我们再来运行应用程序的时候就发现程序运行不起来了,因为应用的父层(就是Dockerfile里面的跟在FROM命令后面的那一层)被更新的版本覆盖了,而新版本又不能向下兼容,还有可能就是从build cache里面取镜像的时候取到了错的“latest”镜像。在产品环境中部署容器的时候也要避免使用latest,不然容易造成无法跟踪记录镜像版本的问题。
7) 不要在单个容器里面运行多个进程。
容器本来就是用来运行单个应用的(比如http daemon,应用服务器,数据库等等),如果我们非要在一个容器里跑几个应用,那么在管理每个应用进程、存取日志、升级应用的时候就会很麻烦。
8)不要把认证口令存在镜像中,用环境变量比较好。
如果我们把用户名/密码值对存在镜像里的话,就只有采用硬编码的方式来挨个处理,估计这种麻烦事没人愿意去干。所以我们最好是用环境变量的方从容器外部获取此类信息。
9) 不要用root用户的角色来运行进程。
Docker容器默认是以root权限运行的。不过随着技术的成熟,docker也会提供安全性更高的默认操作选项。在现有技术条件下,以root权限运行会对其他应用带来安全隐患,而且在有些运行环境下root权限是取不到的,所以我们在跑容器的时候应该用USER命令来指定非root权限的用户。
10) 不要过分依赖IP地址。
每个容器都有一个内部IP,这个IP不是固定的,我们启动容器或者停止容器的时候IP都会变。如果我们要让应用或者微服务模块在容器之间进行通信的话,正确的做法是通过设置环境变量来传递主机名和端口号。
本文来源:Ghostcloud原创()
要回复文章请先或你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
【编者的话】依托Docker运行的后端服务(如数据库,缓存,存储等)感觉相当完美,但对于编译语言,Docker却并未本地开发的理想之选。
我一直在尝试使用Docker作为本地开发环境,最近我又尝试了一遍,结果发现依然行不通。但是这次尝试我得出了进一步的结论,那就是对于大多数的开发堆栈而言,将Docker作为本地开发环境毫无意义,除了引入更多的复杂性外,几乎没有任何优势。
若要实现高效的代码编写、编译、运行周期,意味着本地开发环境的容器没必要和生产环境的容器保持一致。这等于是否定了容器最重要的优势之一。换句话说,基于容器的开发环境根本无法达到非容器的本地开发环境的高效和流畅。
先看看我的要求,一个高效的coding、编译和运行周期需要单独的“非生产环境”的容器。首先,如果将生产环境的容器用于开发环境,容器必须包含某些预编译的组件,或者更甚,比如在你的Dockerfile中运行编译。这样,每次微小改动都需要重建容器。你的E/C/R(编辑、编译、运行周期)看起来像这样:
docker-compose&up&-d&#启动所有的容器,并运行
#&edit&myservice
make&myservice&#&构建服务
docker-compose&build&myservice
docker-compose&restart&myservice
按这种方式,整个重建的周期要花很长时间(超过30秒,还不包括服务自身的构建时间)来触发无聊至极的上下文切换。这绝对是生产力杀手。
你可以说这是个实现上的问题,并且最终这一重建周期将会大大加快,但是对比本地环境,构建和重启过程需要几乎无感。我也不觉得这会有效利用到Docker的镜像缓存。
如果愿意放弃使用生产容器作为本地开发容器的想法,或者运行一个没有构建过程的解释性堆栈,你或许可以改变游戏规则。你可将资源库目录装载到容器中,进而监听文件的变更,在容器内使用实时装载工具或刷新机制来重新编译和发布应用。
在一系列愚蠢的步骤下,这种方式也可工作的很好。比如我们将花时间寻找和设置docker-osx-dev开发环境,装载并与源文件夹高效的同步,又将花几个小时摆弄boot2docker以便使inotify正常工作起来,但是我们的确找到了解决方案。
但当我们回顾并看看这一变态的过程,我们竟然找不到令人信服的优势所在。我们在本地使用foreman启动所有服务,对比docker-compose up,foreman start速度难以置信的快。除了Docker容器本身,我们也继承了管理boot2docker所带来的复杂性。配置文档长度也增加了三倍。
我们的初衷是使用Docker作为本地开发环境,打破在本地只能运行如Memcached和Elasticsearch的几种关键服务。最终,我们得到结论,通过docker-compose运行后端服务是很有意义的,但配置和运行本地开发环境需要尽量简单。另外,我们又回到了通过foreman来运行本地微服务的方式。从此不再回头。
原文链接:(翻译:Andrew)
========================================================
Andrew,云计算从业者,PPTV技术总监,乐于分享对于云计算的一些想法和对未来科技的猜想。
又是不是万能素材,啥题材都能套
vagrant……
开发的确不需要docker,但开发过程中的联调测试,外部依赖用docker很适合。
我的机器是imac,在容器中,装了centos.现在所有的php环境,node环境都跑在容器中,利用ssh,vim工具编辑代码,已经用了两周了,表现还不错。
我看别人的文章,docker是支持增量构建的,你的构建需要30秒是全量构建吧?
docker的诞生之初是为了解决开发问题的,后来才用到了运维上,没可能不适合本地开发。
觉得这样好麻烦,不知道你是不是还在用这中方式使用docker。我也同意作者的观点,感觉docker不太适合开发中使用。我是把host的文件夹分享过去了一个,直接做修改,但是又遇到权限问题。不知道是不是方法错了。现在还在考虑回Vagrant。请赐教。
要回复文章请先或
吼歌是我的最爱

我要回帖

更多关于 向docker容器执行命令 的文章

 

随机推荐