在docker容器中安装Java(从宿主机向docker容器中拷贝文件)

操作系统

[root@Optimus /]# uname -a Linux Optimus 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux [root@Optimus /]# cat /etc/issue CentOS release 6.6 (Final) Kernel r on an m

docker版本

[root@Optimus /]# docker version Client version: 1.7.1 Client API version: 1.19 Go version (client): go1.4.2 Git commit (client): 786b29d/1.7.1 OS/Arch (client): linux/amd64 Server version: 1.7.1 Server API version: 1.19 Go version (server): go1.4.2 Git commit (server): 786b29d/1.7.1 OS/Arch (server): linux/amd64 

docker容器

CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                                   NAMES fc289f421957        insaneworks/centos      "/bin/bash"            47 hours ago        Up 47 hours                                                 master   

下载java7的rpm包

clipboard.png

选择的是jdk-7u75-linux-x64.rpm

放到宿主机的/usr/java/目录下

[root@Optimus /]# cd /usr/java [root@Optimus java]# ls jdk-7u75-linux-x64.rpm 

从宿主机向docker容器中拷贝数据

1) 失败的拷贝方式

  1. 从docker容器中向主机拷贝文件 docker cp containerID:container_path host_path

  2. 从主机复制到容器docker cp host_path containerID:container_path

我尝试用以上方式传送文件至docker容器中时会报错

[root@Optimus java]# docker cp jdk-7u75-linux-x64.rpm master:/mnt/ Error: Path not specified

报错提示一直都是Error: Path not specified

2) 正确的拷贝方式

从主机向docker容器中拷贝数据时,其实采用的是一种通道的方式。

首先,要用docker inspect方法获得容器的完整ID

[root@Optimus java]# docker inspect -f '{{.Id}}' master fc289f421957df7d03146ab54030aa648ec78118d00d3063cdeb8966b6c223f4

这里的master可以是container name也可以是短的container ID。返回的fc289f421957df7d03146ab54030aa648ec78118d00d3063cdeb8966b6c223f4是完整的容器ID。

然后,使用通道拷贝数据

[root@Optimus java]# cp /usr/java/jdk-7u75-linux-x64.rpm  /var/lib/docker/aufs/mnt/fc289f421957df7d03146ab54030aa648ec78118d00d3063cdeb8966b6c223f4/root/ cp: cannot create regular file `/var/lib/docker/aufs/mnt/fc289f421957df7d03146ab54030aa648ec78118d00d3063cdeb8966b6c223f4/root/': No such file or directory  

报错No such file or directory

进入到/var/lib/docker/目录下,确实没有/aufs这个目录。

[root@Optimus /]# cd /var/lib/docker [root@Optimus docker]# ls containers  devicemapper  graph  init  linkgraph.db  repositories-devicemapper  tmp  trust  vfs  volumes 

在docker容器中可以看到有以下目录

[root@Optimus containers]# docker exec -it master /bin/bash  [root@master /]# ls bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var 

查找一下docker容器相关的目录,fc289f421957df7d03146是容器的ID号。

[root@Optimus containers]# find / -name fc289f421957df7d03146ab54030aa648ec78118d00d3063cdeb8966b6c223f4 /var/run/docker/execdriver/native/fc289f421957df7d03146ab54030aa648ec78118d00d3063cdeb8966b6c223f4 /var/lib/docker/devicemapper/metadata/fc289f421957df7d03146ab54030aa648ec78118d00d3063cdeb8966b6c223f4 /var/lib/docker/devicemapper/mnt/fc289f421957df7d03146ab54030aa648ec78118d00d3063cdeb8966b6c223f4  ... 

发现目录/var/lib/docker/devicemapper/mnt/fc289f421957df7d03146ab54030aa648ec78118d00d3063cdeb8966b6c223f4

因此,在docker中,其实是映射到/var/lib/docker/devicemapper/mnt/fc289f421957df7d03146ab54030aa648ec78118d00d3063cdeb8966b6c223f4/这个文件夹中的。这个文件下面就是docker中的根目录里面的内容,然后我们就可以按照我们想要的内容随便进行拷贝。

开始拷贝。拷贝到master容器中的mnt目录下。(为什么要加/rootfs/这个目录我也不记得什么鬼了。)

[root@Optimus /]# cp /usr/java/jdk-7u75-linux-x64.rpm /var/lib/docker/devicemapper/mnt/fc289f421957df7d03146ab54030aa648ec78118d00d3063cdeb8966b6c223f4/rootfs/mnt 

进入容器,查看文件。宿主机向docker容器拷贝数据成功。

[root@Optimus /]# docker exec -it master /bin/bash [root@master /]# ls bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var [root@master /]# cd mnt [root@master mnt]# ls jdk-7u75-linux-x64.rpm 

安装java

添加可执行权限。

[root@master mnt]# chmod +x jdk-7u75-linux-x64.rpm  [root@master mnt]# ls jdk-7u75-linux-x64.rpm 

安装。

[root@master mnt]# rpm -ivh jdk-7u75-linux-x64.rpm  Preparing...                ########################################### [100%]    1:jdk                    ########################################### [100%] Unpacking JAR files...     rt.jar...     jsse.jar...     charsets.jar...     tools.jar...     localedata.jar...     jfxrt.jar...

配置环境变量:

编辑profile文件

vim /etc/profile 

在profile文件最后追加入如下内容:

export JAVA_HOME=/usr/java/jdk1.7.0_75 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export  PATH=$PATH:$JAVA_HOME/bin  #以下是Hadoop配置 export HADOOP_HOME=/mnt/hadoop-2.8.2 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin  

保存并退出。

执行如下

#source /etc/profile    

java版本

[root@Optimus /]# java -version java version "1.6.0_38" Java(TM) SE Runtime Environment (build 1.6.0_38-b05) Java HotSpot(TM) 64-Bit Server VM (build 20.13-b02, mixed mode) 

参考:http://blog.csdn.net/sonnet12...

脚本宝典为你提供优质服务
脚本宝典 » 在docker容器中安装Java(从宿主机向docker容器中拷贝文件)

发表评论

提供最优质的资源集合

立即查看 了解详情