最代码广告位
筱进GG的gravatar头像
筱进GG2019-11-06 14:23:45
在Docker中安装JDK

所有的环境安装,都是在centos系统中操作的,并非本地windows系统。

Docker 中国官方镜像加速 http://www.docker-cn.com/registry-mirror

获取JAVA镜像:

在终端客户端命令行输入以下命令,获取JAVA镜像。

  • docker pull java 

默认是从Docker Hub官方的仓库中下载镜像的。如果没有指定对应的版本,默认会获取版本为latest的镜像。

注意

latest是针对于镜像所在的仓库里面的软件最新版本。并非是软件本身的最新发布版本。

回车执行,一开始会进行下载对应的依赖库,稍作等待:

在Docker中安装JDK

出现下面的信息,说明镜像下载完成:

在Docker中安装JDK

查看下载的镜像

命令行中执行命令,查看刚刚下载的JAVA镜像:


 
docker images

如下图所示:

在Docker中安装JDK

启动容器

命令行中执行命令,启动JAVA镜像容器:


 
docker run -d -it --name java java

如下图所示,说明成功启动了容器:

在Docker中安装JDK

其中,–name后面的“java”是为容器指定了一个别名,而最后的那个“java”指的是下载镜像时的名称。

命令以及参数的含义:

run:启动一个镜像容器

-d:指定容器运行于后台

-it:-i 和 -t 的缩写;

  • -i:以交互模式运行容器,通常与 -t 同时使用

  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用

–name:指定容器名字,后续可以通过名字进行容器管理

具体更多的参数含义,可自行网上学习。

查看运行的容器

首先我们在命令行中执行命令,查看处于运行状态的容器:


 
docker ps

因为在上面的操作步骤中,我们运行了java镜像,所以你会看到有一个名称为java的容器正在运行,如下图:

在Docker中安装JDK

通过输出的信息可以看到,当前容器的ID是“9179eb86b007”,容器别名是java(最后一列的值)。

登录容器

【询问】:如果想查看容器中安装的jdk版本,该怎么做呢?

如果直接在命令行输入java -version会报错的,如下图:

在Docker中安装JDK

原因是因为:jdk是安装在容器里面的,需要进入容器,才能查看。意思就是说,jdk环境是在容器里面的,并非是宿主机。

进入容器内部

  • 使用attach进入容器

 
docker attach 91

其中的 “91” 指的是什么呢?

上面有提到过,我们启动的java镜像的容器ID是“9179eb86b007”,所以, docker attach 命令后面,你可以指定容器ID来进入具体的容器。可以指定91、9179、9179e等任意长度的值,都代表了当前的java容器。

 

回车,效果如下图:

在Docker中安装JDK

如果回车后没有反应,可以再次按下回车就可以进入容器的命令行模式了。

 

除了使用容器ID进入容器之外,也可以使用容器的别名进入容器:


 
docker attach java

上面这种是通过容器的别名进入容器内部的。

  • 使用exec命令进入容器

【方式一】:通过容器别名进入容器:

1
2
> docker exec -it java /bin/bash
>

【方式二】:通过容器ID进入容器:

1
2
> docker exec -it 91 /bin/bash
>
 

回车之后,就会看到命令行发生了一些变化:

在Docker中安装JDK

仔细看第二行的开头,@符号后面的“9179eb86b007”就是我们的java容器的ID吧,这也就说明,我们已经进入了容器内部了,可以对容器进行操作了。

进入容器后,输入 java -version 查看JDK版本信息


 
java -version

无论是通过attach还是exec进入的容器,我们都可以在命令行中输入命令“java -version”来查看JDK版本信息。

下面我们就分别使用这2个命令进入容器,来看看效果,如下图所示:

  • attach命令进入容器,查看JDK版本信息

在Docker中安装JDK

  • exec命令进入容器,查看JDK版本信息

在Docker中安装JDK

登陆Docker容器的方式

上面已经简单的介绍了attach、exec命令的使用,下面讲解一下这两个命令之间的区别。

对于运行在后台的Docker容器,我们运维人员时常是有登陆进去的需求。登陆Docker容器的方式:

  • 使用ssh登陆容器

这种方法需要在容器中启动sshd,存在开销和攻击面增大的问题。同时也违反了Docker所倡导的一个容器一个进程的原则。

  • 使用自带命令docker attach登陆容器

docker attach存在的问题是:当多个窗口同时attach到同一个容器时,所有的窗口都会同步的显示,假如其中的一个窗口发生阻塞时,其它的窗口也会阻塞,docker attach命令可以说是最不方便的进入后台docker容器的方法

  • 使用自带命令docker exec登陆容器

docker exec和docker attach是Docker的原生方法,大多数情况下就使用这两种命令登陆容器。docker exec命令是在docker1.3之后出现的,比docker attach命令更加方便

分别使用attach与exec进入容器,查看它们的区别

1、Docker attach必须是登陆到一个已经运行的容器里。需要注意的是如果从这个容器中exit退出的话,就会导致容器停止!!这是极其不方便的!

见下图所示结果:

在Docker中安装JDK

你会发现通过attach进入容器的话,当使用exit退出容器的时候,对应的容器也停止运行了,所以在生产环境中很少使用。

2、docker exec登陆容器,注意有两个参数:-t和-i,这两个参数很重要!

对于 -t 、-i 的具体作用,可以参考 https://www.cnblogs.com/kevingrace/p/6656095.html

使用docker exec -it 进入容器和我们平常操作console界面类似。而且不像attach方式退出,导致整个容器退出,exec在生产环境中用的比较多。exec 比使用ssh 、nsenter、nsinit方式更方便,生产中常用的方式。

在使用docker exec登陆容器或执行容器中的命令时,最好都带上-t和-i参数。

退出Docker容器

  • 如果是通过 attach 进入的容器,在退出容器的时候,如果不想让容器停止运行的话,就不能使用exit命令或者Ctrl+D快捷键的形式退出,而是使用 Ctrl + P + Q 组合键退出容器。
  • 如果是通过 exec 命令进入的容器,在退出容器的时候,就可以使用exit或者Ctrl+D快捷键退出容器,同时容器不会停止运行,这也是exec与attach的最大区别。当然,你也可以使用Ctrl + P + Q 组合键退出容器,容器一样不会停止运行。

所以,通过上面的比较,也就印证了exec在实际使用过程中用的最多的,也是建议使用的一种方式。尤其是生产环境下,强烈建议使用exec的方式。

停止容器

通过 docker stop (容器ID | 容器别名) 的命令,可以停止正在运行状态的容器:


 
docker stop java

上面是通过容器别名来停止容器的,你也可以使用容器ID。


打赏

已有3人打赏

最代码官方的gravatar头像已注销用户的gravatar头像最代码人间蒸发的gravatar头像
最近浏览
云淡风轻1937 LV26月13日
星星星星
暂无贡献等级
906396135 LV75月31日
月亮星星星星星星
maomao852 LV125月28日
月亮月亮月亮
cxc521 LV125月19日
月亮月亮月亮
451561 LV35月18日
星星星星星星
徐徐徐 LV85月11日
月亮月亮
wujiwen LV125月7日
月亮月亮月亮
asky19865月4日
暂无贡献等级
huangsinmen LV154月27日
月亮月亮月亮星星星星星星
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友