docker里运行docker 可以直接运行软件吗

问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
比如Google浏览器,我只要启动一个容器就可以使用它了,网上有一种教程是用vnc连接,我觉得有点麻烦呢!
来源: Docker 技术问答
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
Docker 公司自己的员工 Jessie Frazelle 写过一篇博客
专门来介绍如何在 Linux 下通过直接共享 X display 来“直接”运行桌面软件,她本人也经常参加一些 docker 的 meeting 也经常介绍运行桌面软件方面的经验。从文中来看,她为了更方便地利用 docker 跑桌面软件,还专门加了共享声音的选项并被整合入 1.8 版本。
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 App1224人阅读
使用docker可以在容器中运行应用程序,在docker容器中运行应用程序只需要一个简单的docker run 命令即可。
Hello Word!
现在试着执行如下命令:
$ sudo docker run ubuntu:14.04 /bin/echo 'Hello World'
& Hello World!
恭喜你,你已经成功创建了你的第一个docker容器。
接下来我们看一下docker run命令都做了些什么。
首先我们运行了docker程序并告诉docker程序需要执行的指令run。docker run 组合在一起代表运行一个新docker容器。接着,我们指定了运行容器所依赖的镜像:ubuntu:14.04,这是我们运行容器的模板,在docker术语中我们叫这个创建容器的模板为镜像。这这个例子中我们使用Ubuntu 14.04作为操作系统镜像。docker会首先根据指定镜像的名称在宿主机上查找镜像,如果没有找到,docker会从公共镜像仓库下载。这个公共镜像仓库就是我们前文所说的Docker
Hub。接下来我们告诉docker在创建的容器中需要执行的命令:/bin/echo 'Hello World!'当容器加载完成后,docker为我们创建了一个新的Ubuntu 14.04环境,并在这个新创建的环境中执行命令:/bin/echo。因此我们就在命令行中看到了如下输出:Hello World!
那么输出“Hello World!”后我们刚创建的容器会接着做什么呢?docker容器的生命周期和他所执行的命令的生命周期是一致的。在这个小例子中,输出“Hello World!”后,/bin/echo执行结束,那么docker容器也跟着停止。
一个可交互的容器
我们再一次运行一下“docker run”命令,这一次我们在容器中运行一个新命令:
$ sudo docker run -t -i ubuntu:14.04 /bin/bash
root@af8bae53bdd3:/#
这个例子中我们依然使用 docker run 命令加载ubuntu:14.04镜像创建容器。但是不同的是我们执行docker run命令时指定了两个参数:-t和-i。-t参数表示在我们的容器中运行一个虚拟终端,-i参数可以使容器的标准输入输出重定向到宿主机,从而建立了一个可以和容器交互的连接。同时我们还指定了容器需要执行的命令为/bin/bash。这条命令会加载容器中运行的操作系统的 Bash shell。命令执行成功后我们会看到如下命令提示符:
root@af8bae53bdd3:/#
接下来我们试着运行一下其他的常见命令:
root@af8bae53bdd3:/# pwd
root@af8bae53bdd3:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
如你所见,我们运行了pwd命令显示当前所在目录为根目录,运行ls命令列举根目录下的所有子目录,我们可以看到,根目录下是常见的Linux系统文件。你可以在容器中运行一些其他常用的Linux命令。如果需要退出shell,执行exit命令即可。对于我们创建的这个容器来说,执行exit命令意味着容器中的命令结束,因此执行exit后shell退出,同时执行shell的容器也跟着停止。
后台运行Hello World!
能够运行一些命令然后随着命令退出的容器似乎用处不是很大,现在我们创建一个可以在后台运行的容器,事实上我们希望docker运行的程序大多都是在后台运行。我们再次执行docker run命令。
$ sudo docker run -d ubuntu:14.04 /bin/sh -c & sleep 1; done&
1e177dee5c2e85a4ac52dc83f2ebe4147
然而这一次并没有输出“Hello”,我们仔细的分析一下刚才执行的命令。和以前一样同样使用了docker run,但是这一次我们指定了-d命令。-d命令告诉docker讲容器放在后台运行。这一次我们指定的系统镜像依然ubuntu:14.04接下来我们指定容器需要执行的命令:
/bin/sh -c & sleep 1; done&
这是一个简单的shell脚步程序,该程序会循环输出Hello World。然而为什么我们没有看到输出Hello world呢?取而代之的却是一个很长的字符串:1e177dee5c2e85a4ac52dc83f2ebe4147
这个很长的字符串叫容器标识,他标识容器的唯一性。注意:容器标识比较长,使用起来很不方便,稍后我们会介绍一下短一点的容器标识,但是使用最多、最方便的却是有含义的容器名称。
我们可以通过容器标识看一下我们的后台容器中究竟执行了什么。首先我们确认一下我们创建的容器是否正在运行。我们可以用docker ps命令实现。docker ps查询所有正在后台运行的容器以及容器的相关信息。
$ sudo docker ps
CONTAINER ID &IMAGE & & & & COMMAND & & & & & & & CREATED & & & &STATUS & & & PORTS NAMES
1e &ubuntu:14.04 &/bin/sh -c 'while tr &2 minutes ago &Up 1 minute & & & insane_babbage
通过docker ps命令的输出我们可以看到后台运行的docker容器信息。docker ps返回了关于容器的很多有用信息,比如第一列是缩短的容器ID:1e,第二列是我们创建容器时使用的镜像:ubuntu:14.04,还包括创建容器时指定的容器需运行的命令,以及容器的状态和自动给容器指定的名称insane_babbage。注意:创建容器时docker会自动给容器指定名称,稍后会介绍给容器指定自定义名称。
docker ps的输出结果表明我们创建的容器已经正常运行了,但是这并不能证明正确执行了我们指定的指令。
为了证明这一点需要查看容器内部的日志信息,查看docker内部的日志信息需要使用docker logs命令。
下面使用docker自动指定的容器名称查看容器的运行日志:
$ sudo docker logs insane_babbage
hello world
hello world
hello world
docker logs命令用于查看容器内部的运行日志,并返回到标准输入输出中,在本例中命令执行后的返回为hello world。到目前为止,我们创建的容器已经在后台成功运行。我们的Hello World应用程序已经成功在docker容器中执行了。接下来我们看看如何停止一个运行中的容器。停止一个运行的容器使用docker stop命令。
$ sudo docker stop insane_babbage
insane_babbage
docker stop命令告诉docker停止容器,如果停止成功就返该容器的名称。让我们执行docker ps命令验证一下:
$ sudo docker ps
CONTAINER ID &IMAGE & & & & COMMAND & & & & & & & CREATED & & & &STATUS & & & PORTS NAMES
从docker ps命令的返回结果可以看出,当前已经没有正在运行的容器。
我们已经体验到了使用docker创建容器时多么的简单!接下来会探讨一下docker的高级主题,关于如何操作docker容器。
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3664次
排名:千里之外
(1)(1)(1)(3)利用docker搭建LAMP运行环境教程详解
投稿:daisy
字体:[ ] 类型:转载 时间:
LAMP相信对大家来说都不陌生, Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器,所以这篇文章给大家介绍利用docker快速搭建LAMP运行环境的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧。
LAMP 指的 Linux(操作系统)、ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和 PHP(有时也是指 Perl 或 Python) 的第一个字母,一般用来建立 web 服务器。 虽然这些开放源代码程序本身并不是专门设计成同另几个程序一起工作的,但由于它们的免费和开源,这个组合开始流行(大多数Linux发行版本***了这些软件)。当一起使用的时候,它们表现的像一个具有活力的解决方案包。
下面介绍如何使用docker来搭建一个包含lamp组件的容器:
从网站上 pull 一个 lamp 镜像
官方的仓里没有标 OFFICIAL 的 lamp 的镜像,不过 「tutum」的镜像做的非常好,我们可以直接 pull 他们的镜像来完成我们的操作。
"lang-bash"&core@localhost ~/base $ docker pull tutum/lamp
Pulling repository tutum/lamp
b: Download complete
使用默认方式启动 lamp 容器
"lang-bash"&core@localhost ~/base $ docker run "hljs-operator"&-d -p : -p : tutum/lamp
ee00c97a5cdefb985baf826caa5edddee4ad09f10d
core@localhost ~/base $ docker ps
CONTAINER ID
ee00c97a5 "hljs-built_in"&cd
tutum/lamp:latest
seconds ago
Up seconds
0.0.0.0:-&/tcp, 0.0.0.0:-&/tcp
lonely_davinci
e3c136d76b44
tutum/tomcat: "hljs-number"&8.0
"hljs-string"&"/run.sh"
minutes ago
Up minutes
"hljs-number"&0.0. "hljs-number"&0.0:-&/tcp
fe9e65aaf58c
:/mysql: "hljs-number"&5.7
"hljs-string"&"/entrypoint.sh mysq
51 minutes ago
Up 51 minutes
db001,tomcat001/tomysql
core@localhost ~/base $ curl http://127.0.0.1:8080
#使用curl可以查看到默认的应用已经启动
&title&Hello world!&/title&
background-color:
text-align:
padding: 50
font-family: "Open Sans "hljs-string"&","Helvetica Neue "hljs-string"&",Helvetica,Arial,sans-
margin-bottom: 40
&img id="logo "hljs-string"&" src="/image/R55010-0.png" /&
&h1&Hello world!&/h1&
&h2&MySQL Server version: 5.5.38-0ubuntu0.14.04.1&/h2&
部署自己的 PHP 应用
默认的容器启动了一个 helloword 应用,我们可以使用 dockerfile 创建另外一个镜像来部署我们自己的应用程序,dockerfile 的详细语法将在后面章节介绍。
core@localhost ~ $ mkdir php
core@localhost ~ $ cd php/
core@localhost ~/php $ touch Dockerfile
core@localhost ~/php $ vi Dockerfile
core@localhost ~/php $ docker build -t dockerpool/my-lamp-app .
Dockerfile 内容如下:
FROM tutum/lamp:latest
RUN rm -fr /app && git clone /username/customapp.git /app
#这里替换 /username/customapp.git 地址为你自己的项目地址
EXPOSE 80 3306
CMD ["/run.sh"]
再次启动自己的容器就完成部署了
"lang-bash"&core@localhost ~/php $ docker stop
core@localhost ~/php $ docker rm ee
core@localhost ~/php $ docker run "hljs-operator"&-d -p : -p : dockerpool/my-lamp-app
使用 curl看下自己的应用程序是不是已经正确启动了吧!
curl http://localhost/
在 php 程序中连接数据库 在容器中访问 mysql 数据库
这个镜像的 mysql 数据库有个默认的 root 用户,本地连接时可以不用密码,所以在代码访问非常简单。
"hljs-preprocessor"&&?php
$mysql = "hljs-keyword"&new mysqli( "hljs-string"&"localhost", "hljs-string"&"root");
echo "hljs-string"&"MySQL Server info: ". "hljs-variable"&$mysql "hljs-variable"&-&host_
在容器外部访问 mysql 数据库
当我们第一次以 tutum/lamp 镜像启动容器的时候,它会自动创建一个叫 admin 的 mysql 用户,并生成一个随机密码,使用「docker logs +容器ID」可以获取到这个密码。
"lang-bash"&core@localhost ~/php $ docker logs cb
=& An empty or uninitialized MySQL volume is detected in /var/lib/mysql
=& Installing MySQL ...
=& Waiting "hljs-keyword"&for confirmation of MySQL service startup
=& Creating MySQL admin user with random password
========================================================================
You can now connect to this MySQL Server using:
mysql -uadmin -p2Ijg6gvmM0N3 -h&host& -P&port&
Please remember to change the above password as soon as possible!
MySQL user "hljs-string"&'root' has no password but only allows local connections
========================================================================
默认的 root 用户无法远程登陆,所以要使用 admin 用户,它同样具有 root 权限。
以上就是这篇文章的全部内容了,希望本文的内容对大家用docker搭建LAMP能有所帮助,如果有疑问大家可以留言交流。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 docker里运行docker 的文章

 

随机推荐