在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包
选择的是jdk-7u75-linux-x64.rpm
放到宿主机的/usr/java/
目录下
[root@Optimus /]# cd /usr/java
[root@Optimus 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容器中时会报错
[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…
原文地址: https://blog.csdn.net/weixin_34208185/article/details/88939611
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章