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 ## ...
随机推荐
- 关于vyos 防火墙配置
VyOS是一个基于Debian的网络操作系统,是Vyatta的社区fork.Vyatta是博通的企业级的产品,通过这套系统,能在x86平台提供路由,防火墙和×××的功能. 这个系统提供了和其他诸如Ci ...
- EX_KMP算法总结
EX_KMP算法总结 By viv 2014-8-9 0:30 吐槽1:字符串神马的我最讨厌了,但不学不行啊.TAT 吐槽2:写这东西差点错过CF(codeforces). 今天学了ex_kmp,故总 ...
- java 的ConcurrentHashMap底层数据结构
集合是编程中最常用的数据结构.而谈到并发,几乎总是离不开集合这类高级数据结构的支持.比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap).这篇文章主 ...
- jQ给下拉框绑定事件,为什么要绑定在框(select标签)上,而不是绑定在选项(option标签)上
这是我在学习锋利的 jquery 书中 5.1.4 的代码时遇到的一个小问题,源代码如下: <head> <style type="text/css"> * ...
- CCD (电荷耦合元件)
CCD 是指电荷耦合器件,是一种用电荷量表示信号大小,用耦合方式传输信号的探测元件,具有自扫描.感受波谱范围宽.畸变小.体积小.重量轻.系统噪声低.功耗小.寿命长.可靠性高等一系列优点,并可做成集成度 ...
- centos 6.* 修改时间
一.查看Centos的时区和时间 1.使用date命令查看Centos时区 [root@VM_centos ~]# date -R Mon, 26 Mar 2018 19:14:03 +0800 2. ...
- [LC] 295. Find Median from Data Stream
Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...
- openssl nodejs https+客户端证书+usbkey
mac sslconfig 文件路径 /System/Library/OpenSSL/openssl.cnf 一生成CA openssl req -new -x509 -keyout ca.key - ...
- Sublime Text2 使用心得总结
sublime text2是开发代码编辑的神器 ,编辑器界面优美,操作速度快速.而且Sublime Text2是一款跨平台的编辑器,再也不用为换平台而找不到合适的.熟悉的编辑器担忧了. Sublime ...
- CF_Edu.#51_Div.2_1051F_The Shortest Statement
F. The Shortest Statement time limit per test:4 seconds memory limit per test:256 megabytes input:st ...