1. docker究竟是什么,为什么这么流行,它的优点和缺陷有哪些
docker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目。它基于Google公司推出的GO语言实现,项目后来加入了linux基金会,遵从了apache2.0协议,项目代码在GitHub上进行维护。
docker自开源后受到广泛的关注和讨论,以至于dotcloud公司后来都改名为docker
lnc。Redhat已经在其rhel6.5中集中支持docker,Google也在其PaaS产品中广泛应用。
docker项目的目标是实现轻量级的操作系统虚拟化解决方案,docker的基础是Linux容器等技术。
作为一种新兴的虚拟化方式,docker跟传统的虚拟化方式相比具有众多优势。
首先,docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快很多;其次,docker对系统资源的利用率很高,一台主机上可以同时运行数千个docker容器。
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行10个不同的应用就要起10个虚拟机,而docker只需要启动10个隔离的应用即可。
2. 如何使用Docker 进行java 开发
在这个例子中需要增加三个文件:
Maven的配置文件: pom.xml
一个Java类:Hello.java
一个Dockerfile
源码是下面的代码:
https://github.com/giantswarm/sparkexample
pom.xml
pom.xml包含一些基本的Maven配置,比如配置Spark所依赖的Java 8。它会把所有的依赖封装成一个大的jar包。
Hello.java
pom.xml文件定义mainClass为sparkexample.Hello,需要在src/main/java/sparkexample/目录下创建Hello.java文件。Dockerfile
最后我们来编写Dockerfile文件,这个Dockerfile使用到了Java镜像(java:oracle-java8),并从安装Maven开始做起。下一步它会安装项目依赖。我们通过pom.xml来解析这些依赖,正如你所看到的,它允许Docker缓存这些依赖。下一步,要编译打包应用,并启动应用。如果重建应用时,pom.xml文件没有任何修改,之前的步骤都被缓存下来了,直接到最后一步启动应用。这可以加快应用的重新构建速度。
创建和运行
一旦这三个文件已经完成,那创建Docker镜像就变得轻而易举了。
$ docker build -t giantswarm/sparkexample .
注意:首次启动时会花费一些时间,因为它要安装Maven并下载所有的依赖。之后再启动就需要几秒钟,因为所有的东西都已经缓存了。
镜像创建之后,用下面的命令创建容器:
docker run -d -p 4567:4567 giantswarm/sparkexample
用下面的命令访问:
curl localhost:4567 hello from sparkjava.com
3. 如何进行Docker源码调试
经过研究docker的官方编译脚步,发现本地编译也很简单,只需要在docker源码的目录下执行如下命令即可:
./hack/make.sh binary
上面这条命令就只会生成docker的二进制文件,不过肯定不会这么顺利的,执行这个命令你就会发现错误。如果第一次执行报的错误应该是找不到相应的go依赖包。那么现在就开始解决第一个问题,go依赖包。
解决go依赖包最直接的方法就一个一个去github或者其他地方去下载到本地,但是这样做很麻烦,docker依赖的go语言包很多,然后依赖包可能又依赖其他包。这里有一个简单实用的办法,也是go语言管理项目的方便之处。通过go get命令来自动下载,例如发现报错的是docker某一个目录下的依赖包,那么可以如下执行:
go get -v ./src/github.com/docker/docker/...
这条命令执行以后整个docker目录下源文件依赖的包都会被自动下载。如果发现其他目录下源文件也报同样的错误,可以按照次方法解决。不过这里需要强调一点, 这些下载都是会下载最新的包,如果编译老的docker肯定会出问题 ,如果编译最新的docker代码肯定不会有问题,因为官方的编译是这种方式。
上面执行的命令都是建立在go语言环境建立成功的基础上,我安装的go遇到是1.3.3版本的,采用源码方式安装。安装在/export/servers/go下面,然后所有的go语言工程源码目录放在 /export/servers/gopath。然后配置环境变量在用户的根目录下的.bashrc文件里面如下:
export GOPATH=/export/servers/gopath
export GOROOT=/export/servers/go
export GOARCH=amd64
export GOOS=linux
4. 如何修改docker中部署的代码
我看到这个问题首先想到的就是去docker hub搜官方的redis镜像.然后看了redis的Dockerfile。
官方的方法是(对应楼上的1)
Additionally, If you want to use your own redis.conf ...
You can create your own Dockerfile that adds a redis.conf from the context into /data/, like so
FROM redis
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
或者
$ docker run -v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf
这个镜像启动的时候就默认运行redis-server了。无法通过docker run -it redis修改。试图docker run -it redis /bin/bash进去覆盖默认的启动命令然后添加自己的配置就好了。
希望能帮到你
5. docker 别人能看到源码吗
d64或者arm)
2. 安装Go语言安装包
选择合适的版本下载完成后,就可以开始进行Go语言安装包的安装了,过程如下。
FreeBSD、Linux以及Mac O
6. k8s和docker区别是什么
k8s和docker区别有以下几点:
1、k8s是一种开放源码的容器集群管理系统,能够实现自动化部署、扩展容器集群、维护等功能。
2、Docker是一种开放源码的应用容器引擎,开发者可以将他们的应用和依赖打包在一个可移植的容器中,发布到流行的Linux机器上,也可以实现虚拟化。
3、k8s的全称kubernetes。它是一个完整的分布式系统支撑平台,集群管理功能齐全。Kubernetes同时提供完善的管理工具,涵盖了开发、部署、测试、运行监控等各个环节。
4、Docker是一种开放源码的应用容器引擎,允许开发人员将其应用和依赖包打包成可移植的镜像,然后发布到任何流行的Linux或Windows机器上,也能实现虚拟化。该容器完全使用沙箱机制,彼此之间没有任何接口。
7. docker使用什么语言开发的
Docker 是 PAAS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于 go 语言并遵从 Apache2.0 协议开源
8. 如何在mips架构编译docker之github源码动态编译
./hack/make.sh binary 上面这条命令就只会生成docker的二进制文件,不过肯定不会这么顺利的,执行这个命令你就会发现错误
9. 如何编译docker源码
本文根据docker官方给出的docker代码编译环境搭建指南做更深入的分析。官方给出的指导比较简单,但是由于国内的网络问题经常会编译失败,了解了编译步骤后,也可以结合自身遇到的网络问题进行“规避”。
docker的编译环境实际上是创建一个docker容器,在容器中对代码进行编译。 如果想快速的查看编译环境搭建指导,而不关注环境搭建的机制和细节,可以直接跳到最后一章“总结”。
前提
机器上已经安装了docker,因为编译环境是个docker容器,所以要事先有docker(daemon),后面会创建个编译环境容器,在容器里面编译代码。本文中使用物理机,物理机上运行着docker (daemon)。
机器(物理机)上安装了git 。 后续使用git下载docker源码
机器(物理机)上安装了make。
下载ubuntu 14.04的docker镜像
10. 想使用docker来进行Android源码编译,对电脑配置要求怎么样
这个配置足够了,还需要配置好对应的环境和编译工具。