Mac结合Docker开发

编程

明确我们的目标:在Mac上运行Docker,容器中有java运行环境。

解决

此时想到了Docker,Docker有丰富的镜像,而且最重要的一点,支持挂载宿主机目录至容器中。也就是volumn命令(Dockerfile中)或者-volumn(容器启动参数)。说干就干,搞一把!

首先,你得在Mac上安装Docker

和在window上安装一样,docker提供了mac客户端,Docker Descktop For Mac, 直接在官网下载安装包,安装上即可;安装完成后,启动软件,命令行内即可执行docker命令了,否则会提示你没有守护进程,无法执行docker命令!

获取镜像

有两种方式可供选择,一种是直接使用提供的公共镜像,另外一种是基于公共镜像,进行二次开发,编写自己的镜像,意即使用Dockerfile。

第一种,可以直接使用docker hub提供好的官方open-jdk镜像,下载下来后,直接启动即可!

第二种,基于Ubuntu官方docker镜像,编写Dockerfile,这种方式,可灵活选用自己想要的jdk版本。

Dockerfile如下

FROM ubuntu #基础镜像

VOLUME [ "/Users/zhanghengqiang/workspace" ] #挂载宿主机目录至容器中

#RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak # 换Ubuntu软件源,在构建镜像时不起作用,还未找到原因

#ADD sources.list /etc/apt/sources.list.bak

RUN apt-get upgrade

RUN apt-get update

RUN apt-get install -y ssh

RUN apt-get install -y openssh-server #安装ssh-server

RUN mkdir -p /softwares/jdk8

ADD jdk-8u60-linux-x64.tar.gz /softwares/jdk8 #加载本地的jdk8至容器中

#RUN tar zxvf /softwares/jdk-8u60-linux-x64.tar.gz -C /softwares/jdk8 # 由于执行ADD命令时,会自动将压缩包解压,所以此行无效

#RUN apt-get install -y openjdk-8-jdk # 也可自行安装,但耗时较长

#ADD sources.list /etc/apt/sources.list.bak #换源,可忽略

Dockerfile的使用详细可参考官方文档

ok,到此文件编辑结束,最后使用进行构建镜像

docker build -t jdk8 .

注意,需在dockerfile所在的文件夹内运行此命令。 build命令的详细介绍可参考这里.

启动容器

镜像有了,那么我们来使用镜像来启动容器,我们前面说过,挂载宿主机文件至容器,即可以使用volumn,也可以在run命令增加-volumn参数,唯一不同的是,使用参数的方式,可以指定挂载到容器何处。

两者的详细介绍可参考这篇文章.

ok,执行命令

docker run -it -name jdk8-test -v /data /data jdk8 /bin/bash

解释: 使用jdk8镜像启动一个容器,容器的名称未jdk8-test,并且将本地的/data目录挂载到容器的/data目录,启动后开启一个交互式终端,并执行/bin/bash命令。

docker run命令的详细介绍,可参考官方文档.

好了,到此,大功告成!

测试

我们在Mac上使用vscode编辑好文件,并编译好,存储至/data目录,然后我们进入容器,可在/data目录中直接看到编译好的class文件,后面,就可以做任何自己想做的事情了。

另外需要注意一点的是:在mac上,进入容器中,使用ssh的方式基本上是行不通的(并不说不行,是很费事,需要你安装一个vpn),这个是由于mac的网络限制的(官方介绍)。我们可以直接使用docker的exec命令

docker exec -it jdk8-test bash

就可以直接进入刚才启动的容器了!

exec的参考资料,可查看这里.

另外附带一个宿主机上进入容器的四种方式

  1. docker attach命令,基本上不使用
  2. 使用ssh,mac上不合适
  3. 使用nsenter
  4. 使用 docker exec,强烈推荐!

参考资料:进入Docker容器的4种方式

最最后,欢迎关注我的公众号,每天推送文章!

以上是 Mac结合Docker开发 的全部内容, 来源链接: utcz.com/z/513999.html

回到顶部