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

操作系统

[[email protected] /]# 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

[[email protected] /]# cat /etc/issue

CentOS release 6.6 (Final)

Kernel \r on an \m

docker版本

[[email protected] /]# 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

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

fc289f421957 insaneworks/centos "/bin/bash" 47 hours ago Up 47 hours master

下载java7的rpm包

5819e35b3568fe04aa281d06aa36bf0b.png

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

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

[[email protected] /]# cd /usr/java

[[email protected] java]# ls

jdk-7u75-Linux-x64.rpm

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

1) 失败的拷贝方式

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

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

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

[[email protected] java]# docker cp jdk-7u75-Linux-x64.rpm master:/mnt/

Error: Path not specified

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

2) 正确的拷贝方式

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

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

[[email protected] java]# docker inspect -f '{{.Id}}' master

fc289f421957df7d03146ab54030aa648ec78118d00d3063cdeb8966b6c223f4

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

然后,使用通道拷贝数据

[[email protected] 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这个目录。

[[email protected] /]# cd /var/lib/docker

[[email protected] docker]# ls

containers devicemapper graph init linkgraph.db repositories-devicemapper tmp trust vfs volumes

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

[[email protected] containers]# docker exec -it master /bin/bash

[[email protected] /]# ls

bin boot dev etc home lib lib64 media mnt opt proc root sbin seLinux srv sys tmp usr var

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

[[email protected] 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/这个目录我也不记得什么鬼了。)

[[email protected] /]# cp /usr/java/jdk-7u75-Linux-x64.rpm /var/lib/docker/devicemapper/mnt/fc289f421957df7d03146ab54030aa648ec78118d00d3063cdeb8966b6c223f4/rootfs/mnt

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

[[email protected] /]# docker exec -it master /bin/bash

[[email protected] /]# ls

bin boot dev etc home lib lib64 media mnt opt proc root sbin seLinux srv sys tmp usr var

[[email protected] /]# cd mnt

[[email protected] mnt]# ls

jdk-7u75-Linux-x64.rpm

安装java

添加可执行权限。

[[email protected] mnt]# chmod +x jdk-7u75-Linux-x64.rpm

[[email protected] mnt]# ls

jdk-7u75-Linux-x64.rpm

安装。

[[email protected] 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版本

[[email protected] /]# 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值