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的参考资料,可查看这里.

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

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

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

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

Mac结合Docker开发的更多相关文章

  1. docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用

    .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看 ...

  2. Mac 下 docker安装

    http://www.th7.cn/system/mac/201405/56653.shtml Mac 下 docker安装 以及 处理错误Cannot connect to the Docker d ...

  3. Visual Studio Code和Docker开发asp.net core和mysql应用

    Visual Studio Code和Docker开发asp.net core和mysql应用 .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对 ...

  4. Mac下docker搭建lnmp环境 + redis + elasticsearch

    之前在windows下一直使用vagrant做开发, 团队里面也是各种开发环境,几个人也没有统一环境,各种上线都是人肉,偶尔还会有因为开发.测试.生产环境由于软件版本或者配置不一致产生的问题, 今年准 ...

  5. Springboot整合MongoDB的Docker开发,其它应用也类似

    1 前言 Docker是容器开发的事实标准,而Springboot是Java微服务常用框架,二者必然是会走到一起的.本文将讲解如何开发Springboot项目,把它做成Docker镜像,并运行起来. ...

  6. mac通过docker一键部署Jenkins

    目录 mac通过docker一键部署Jenkins 一.前言 二.系统配置 三.安装步骤 Dockerhub查看镜像地址 1.一键安装 1.1.下载脚本 1.2.安装程序 1.2.1.安装程序详情 1 ...

  7. mac通过docker一键部署MySQL8

    目录 mac通过docker一键部署MySQL8 一.前言 二.系统配置 三.安装步骤 Dockerhub查看镜像地址 1.一键安装 1.1.克隆脚本 1.2.安装程序 1.2.1.安装程序详情 1. ...

  8. mac通过docker一键部署Nexus3

    目录 mac通过docker一键部署Nexus3 一.前言 二.系统配置 三.安装步骤 1.Dockerhub查看镜像地址 2.一键安装 2.1.克隆脚本 2.2.安装程序 2.2.1.程序安装详情 ...

  9. mac下docker使用笔记

    安装docker https://docs.docker.com/mac/ 启动docker环境launchpad -> Docker Quickstart Terminal ##       ...

随机推荐

  1. 共克时艰,停工不停学 Serverless 在线课堂免费开课

    二月份,Serverless 团队联合腾讯云大学与云+社区免费推出 Serverless 在线直播课程,课程涵盖 Serverless 架构解密.技术解析以及不同应用场景下的最佳实战指导,让你从 0 ...

  2. form提供的两种数据传输方式 get和post method=”post“和method=”get”

    虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生严重的影响.虽然为了方便的得到变量值,Web容器已经屏蔽了二者的一些差异,但是了解二者的差异在以后的编程也会很有帮助的. ...

  3. CentOS-TFTP服务搭建

    title date tags layout CentOS6.5 TFTP搭建 2018-08-26 Centos6.5服务器搭建 post 1.安装TFTP服务 yum install tftp-s ...

  4. OA-APP增加空间

    第一步:虚拟机增加一块200G的硬盘,使用fdisk -l 命令可以看到增加的硬盘(centos6可能需要重启系统) 第二步:然后对 /dev/sdc进行分区 第三步:创建一个分区 第四步:重新查看磁 ...

  5. 安装python第三方包

    20190822 先说一下,有4种方法(我知道的): 1.源码安装 2.python自带包管理器安装 3.外部包管理器安装 4.whl格式安装 1.源码安装 Python第三方库几乎都可以在githu ...

  6. Linux 账号管理及ACL权限设置,PAM模块简介

    有效群组与初始群组: groups:有效与支持群组的观察 newgrp:有效群组的切换,后面接群组名称 在passwd文件中记录的GID就是默认的GID,就是初始群组 /etc/passwd文件结构 ...

  7. selenium元素定位(一)

    Selenium提供了8种定位方式. id name class name tag name link text partial link text xpath css selector 这8种定位方 ...

  8. Pytorch中的variable, tensor与numpy相互转化的方法

    1.将numpy矩阵转换为Tensor张量 sub_ts = torch.from_numpy(sub_img) #sub_img为numpy类型 2.将Tensor张量转化为numpy矩阵 sub_ ...

  9. [LC] 746. Min Cost Climbing Stairs

    On a staircase, the i-th step has some non-negative cost cost[i] assigned (0 indexed). Once you pay ...

  10. JavaScript学习总结(七)Ajax和Http状态字

    转自:http://segmentfault.com/a/1190000000691919 Ajax及其工作原理 AJAX 是一种与服务器交换数据无需刷新网页的技术,最早由Google公司在谷歌地图里 ...