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的参考资料,可查看这里.
另外附带一个宿主机上进入容器的四种方式
- docker attach命令,基本上不使用
- 使用ssh,mac上不合适
- 使用nsenter
- 使用 docker exec,强烈推荐!
参考资料:进入Docker容器的4种方式
最最后,欢迎关注我的公众号,每天推送文章!
以上是 Mac结合Docker开发 的全部内容, 来源链接: utcz.com/z/513999.html