Mac结合Docker开发
Mac结合Docker开发
前几天在看Java并发实战时,在Mac上写了一个示例,结果运行后无法按照书本上运行。主要是有些命令,在Mac和Linux是有区别的,比如top,
Mac上是不支持-Hp,意即查看进程内的所有线程资源占用情况。因此,想在Linux上运行一把,但前提是得将写好的代码复制到Linux上;唉,总不能手工复制到Linux上吧,或者在Linux上再写一遍。
明确我们的目标:在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开发的更多相关文章
- docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用
.net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看 ...
- Mac 下 docker安装
http://www.th7.cn/system/mac/201405/56653.shtml Mac 下 docker安装 以及 处理错误Cannot connect to the Docker d ...
- Visual Studio Code和Docker开发asp.net core和mysql应用
Visual Studio Code和Docker开发asp.net core和mysql应用 .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对 ...
- Mac下docker搭建lnmp环境 + redis + elasticsearch
之前在windows下一直使用vagrant做开发, 团队里面也是各种开发环境,几个人也没有统一环境,各种上线都是人肉,偶尔还会有因为开发.测试.生产环境由于软件版本或者配置不一致产生的问题, 今年准 ...
- Springboot整合MongoDB的Docker开发,其它应用也类似
1 前言 Docker是容器开发的事实标准,而Springboot是Java微服务常用框架,二者必然是会走到一起的.本文将讲解如何开发Springboot项目,把它做成Docker镜像,并运行起来. ...
- mac通过docker一键部署Jenkins
目录 mac通过docker一键部署Jenkins 一.前言 二.系统配置 三.安装步骤 Dockerhub查看镜像地址 1.一键安装 1.1.下载脚本 1.2.安装程序 1.2.1.安装程序详情 1 ...
- mac通过docker一键部署MySQL8
目录 mac通过docker一键部署MySQL8 一.前言 二.系统配置 三.安装步骤 Dockerhub查看镜像地址 1.一键安装 1.1.克隆脚本 1.2.安装程序 1.2.1.安装程序详情 1. ...
- mac通过docker一键部署Nexus3
目录 mac通过docker一键部署Nexus3 一.前言 二.系统配置 三.安装步骤 1.Dockerhub查看镜像地址 2.一键安装 2.1.克隆脚本 2.2.安装程序 2.2.1.程序安装详情 ...
- mac下docker使用笔记
安装docker https://docs.docker.com/mac/ 启动docker环境launchpad -> Docker Quickstart Terminal ## ...
随机推荐
- Exchange Online 权限管理
在Exchange管理中心,通过权限管理可为管理员.普通用户以及Outlook Web App分别制定不同的权限和策略,以满足精细化分工或差异化角色的需要. 一.管理角色组 组织管理者使用角色组来向管 ...
- EmguCV常用函数总结
Emgucv常用函数总结: 读取图片 Mat SCr = new Mat(Form1.Path, Emgu.CV.CvEnum.LoadImageType.AnyColor); //根据路径创建指定的 ...
- XP停止更新不用愁 瑞星XP护盾给你持续保护
4月8日,微软正式结束了Windows XP的支持,所有XP系统将不会再收到来自微软提供的补丁和安全更新等服务,叱咤OS江湖十几年的一代操作系统终于完美谢幕.但谢幕不等于消失,据相关机构统计,虽然微软 ...
- WordPress快速打造个人博客
前些天用wordpress搭建了现在这个博客,所以总结了一篇文章,讲讲怎么样简单的创建一个博客.开始前这里有篇我搭建时所遇到的问题可以作为参考<WordPress建站注意事项>,首先我们要 ...
- cs231n spring 2017 lecture1 Introduction to Convolutional Neural Networks for Visual Recognition
1. 生物学家做实验发现脑皮层对简单的结构比如角.边有反应,而通过复杂的神经元传递,这些简单的结构最终帮助生物体有了更复杂的视觉系统.1970年David Marr提出的视觉处理流程遵循这样的原则,拿 ...
- [洛谷P4720] [模板] 扩展卢卡斯
题目传送门 求组合数的时候,如果模数p是质数,可以用卢卡斯定理解决. 但是卢卡斯定理仅仅适用于p是质数的情况. 当p不是质数的时候,我们就需要用扩展卢卡斯求解. 实际上,扩展卢卡斯=快速幂+快速乘+e ...
- 关于前端使用JavaScript获取base64图片大小的方法
base64原理 Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式. 如果剩下的字符不足3个字节,则用0填充,输出字 ...
- 省A类竞赛二等奖--村先游项目VUE前端重构
村先游--省二竞赛项目VUE重构 源码地址: 重构前的(前端+后台):https://github.com/Archer-Fang/cunxianyou 重构前的(前端):https://github ...
- cesium入门示例-矢量化单体分类
实现楼层的分层选择和属性信息展示,该功能基于大雁塔倾斜数据实现单体化分类显示. 数据准备: 1.大雁塔倾斜数据,已转换为3dTiles,参考cesium入门示例-3dTiles加载的第2节osgb数据 ...
- MyBatis if test 传入一个数字进行比较报错 There is no getter for property named 'userState' in 'class java.lang.Integer'
在写MyBatis映射文件中,我要传入一个 int 类型的参数,在映射文件中用 'test' 中进行比较,我花了很长时间百度,发现都是不靠谱的方法,有把数字在比较时转成字符串用 equals 比较的. ...