学习网络开发过程中不想“污染”macOS,考虑到之后部署网络应用主要是与linux打交道,所以安装了 ubuntu 虚拟机以满足短期的知识学习需求。十里安装了 ubuntu 虚拟机,一般就是在 mac 中 ssh 连接 ubuntu 虚拟机在终端下进行操作学习,可见安装一个包含完整GUI的 ubuntu 有点多余,还占用很多资源!所以想到了使用 docker 来创建 ubuntu 容器用来开发学习,本文就分享一下这个过程!

本文就不介绍 Docker 是什么了,主要描述搭建符合自己需求的 ubuntu 容器的过程。

1. 容器需求

  • 可以 ssh 连接
  • 包含 vim、git等基本工具

2. 安装和配置 Docker

2.1 下载并安装 Docker

  1. 访问 Docker 官网 了解和下载 Docker,这里也可以点我下载最新稳定版的 Docker for mac
  2. 打开下载的 dmg 文件,将 Docker 拖放到 Application 文件夹中即可完成安装
  3. 首次运行会有提示输入密码,用来获取完整的操作权限
  4. Docker 运行起来会在顶栏出现一个小鲸鱼的logo
  5. 安装成功后,在终端中查看 Docker 版本会得到下面类似信息:
➜  docker --version
Docker version 18.09.0, build 4d60db4
➜  docker-compose --version
docker-compose version 1.23.2, build 1110ad01
➜  docker-machine --version
docker-machine version 0.16.0, build 702c267f

2.2 配置 Docker

由于国内访问 Docker 官方默认的镜像源很慢,所以需要更换国内的镜像源进行加速,这里使用官方提供的一个镜像仓库地址:https://registry.docker-cn.com。

  1. 点击顶栏小鲸鱼的 logo,找到 Preferences点击调出 Doker 配置窗口;
  2. 点击 Daemon 按钮,就可以看到 Registry Mirrors 的配置页;
  3. 点击 + 号,添加上面提供的地址即可,添加完成后,点击 Apply & Restart ,等待一会儿 Docker 重启之后,配置即可生效,最终如下:

3. 定制 ubuntu 镜像

3.1 获取 ubuntu 镜像

运行命令

docker pull ubuntu

就会拉取官网上的最新 ubuntu 镜像,这是一个极其精简的镜像,作为我们定制 ubuntu 镜像的基础。

使用命令 docker image ls 可以查看当前安装的 Docker 镜像。

3.2 ubuntu 容器

3.2.1 创建 ubuntu 容器

使用命令 docker run -i -t --name mineos ubuntu bash 可以创建并运行一个可以使用终端交互的 ubuntu 容器,命令参数解释:

上面的命令执行后,就会登陆 ubuntu 容器的 bash 中,执行命令cat /etc/issue 可以查看系统版本,十里的ubuntu版本是 18.04。此时按快捷键组合 ctrl + d 就会退出 ubuntu 容器,此时就会停止容器运行。

3.2.2 查看已有容器

使用命令 docker ps 可以查看当前运行的容器,如果此时执行,会发现没有容器信息,因为我们已经停止了刚才创建的容器。怎么查看已经关闭的容器信息呢?使用命令 docker ps -a,会列出所有容器信息,包括已经关闭的。此时执行,就会看到已经关闭的 mineos 容器。

3.2.3 以交互的形式启动容器

执行命令 docker start mineos 就会启动容器,但是你会发现无法像刚创建时登陆容器的 bash,先使用命令 docker stop mineos,此时加入 -i 参数启动就可以了 docker start -i mineos

3.3 ubuntu 容器的基本配置

登陆进 ubuntu 的 bash 以后就可以当正常的 ubuntu 进行使用了。

  • 更新软件源信息:apt-get update
  • 因为这个 ubuntu 的依赖镜像太精简了,所以好多工具没有安装,先安装一下 vim: apt-get install vim
  • 可以看到安装挺慢的,之所以先安装 vim 是为了可以编辑 /etc/apt/source.list 更换为国内访问更快的软件源,比如将文件中的内容替换为如下阿里云的:
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse 

  • 重新更新软件源信息:apt-get update,会发现快很多
  • 飞一般的安装 git 和 python3:apt-get install git python3

3.4 配置 SSH

这一步主要是为了mac 可以 ssh 连接 ubuntu 容器。

3.4.1 安装 openssh-server

apt-get install openssh-server

用于开启 ssh 服务供外部连接。

3.4.2 配置 sshd

需要更改一下 sshd 的默认配置,编辑文件 /etc/ssh/sshd_config ,大概从 29 行开始主要更改三处,更改后内容如下:

PermitRootLogin yes # 可以登录 root 用户
PubkeyAuthentication yes # 可以使用 ssh 公钥许可
AuthorizedKeysFile  .ssh/authorized_keys # 公钥信息保存到文件 .ssh/authorized_keys 中

3.4.3 重启 sshd

因为 ubuntu 过于精简,不能使用 service 命令方便的重启 sshd,这里使用命令 /etc/init.d/ssh restart 进行重启,重启是为了让上面的配置生效。

3.4.4 添加主机的 ssh 公钥

这里的主机指的就是 macOS,保证此时还是在 ubuntu 容器中。

  • 在 HOME 目录下创建 .ssh 目录:mkdir ~/.ssh
  • 新建文件 ~/.ssh/authorized_keystouch ~/.ssh/authorized_keys
  • 新开一个 macOS 下的终端窗口,执行命令 cat ~/.ssh/id_rsa.pub,复制打印的一行公钥信息
  • 回到 ubuntu 容器中,将第 3 步复制的公钥粘贴到 ~/.ssh/authorized_keys 中保存。

如果使用过ssh免密码的登陆操作的话,相信您知道ssh的密钥生成方法,如果没了解过,可以参考:ssh-keys

  • 此时完成了 SSH 访问支持的添加,ctrl + d 退出容器。

3.5 提交修改到镜像

现在已经推出到正常的 mac 终端窗口中了,容器的修改不会影响到源镜像,上面的操作我们已经完成了 Ubuntu 的基本配置,并且添加了 SSH 支持,这一步是产生新的镜像版本。

  • 查看刚刚操作的容器信息,执行命令 docker ps -a ,可以看到 mineos 的状态已经是退出了,主要关注 mineos 的 CONTAINER ID ,复制这个 ID 号,比如为 e5d8c1030724
  • 执行下面的命令提交产生 ubuntu 新版本的镜像:Bash docker commit -m 'add ssh' -a '5km' e5d8c1030724 ubuntu-ssh
    • -m,指定提交信息
    • -a,指定提交者
    • 你需要把 e5d8c1030724 替换为您的容器的 CONTAINER ID
    • ubuntu-ssh 是新镜像的名称,可以随意指定
  • 使用命令 docker image ls 可以查看当前安装的镜像,上述操作正常的话就会看到 ubuntu-ssh 的镜像信息
  • 此时之前创建的容器就没用了,可以通过命令 docker rm mineos 进行删除

4. 最终的 ubuntu 容器

有了具有 SSH 支持的 ubuntu 镜像,我们就可以创建新的 ubuntu 容器,通过以下命令进行创建:

docker run -d -p 26122:22 --name learn ubuntu-ssh /usr/sbin/sshd -D

在 macOS 的终端中执行命令 ssh -p 26122 root@localhost 即可连接已经启动的 ubuntu 容器 learn

为了更方便的连接,可以为容器创建 ssh 连接的主机短名,往 macOS 的 ~/.ssh/config 中添加以下内容:

Host learnHostName localhostUser     rootPort     26122

此时就可以通过命令 ssh learn 连接 ubuntu 容器 learn 了。

参考:

Docker-SSH连接docker容器​www.jianshu.com

Ubuntu下"sshd:unrecognized service"​blog.csdn.net


博客原文:

mac 下使用 Docker 搭建 ubuntu 环境​www.smslit.top

docker ubuntu镜像_macOS 下使用 Docker 搭建 ubuntu 环境相关推荐

  1. WIN7下使用iis搭建php环境(上)

    Win 7下使用iis搭建php环境 上 在win7下进行php环境搭建,因为自己最近也在自学php,在搭建php环境的时候遇到了很多问题,也上网查了很多的资料来学习怎么搭建,但是还是不能很好的解决我 ...

  2. apt ubuntu 指定ipv4_macOS 下使用 Docker 搭建 ubuntu 环境

    学习网络开发过程中不想"污染"macOS,考虑到之后部署网络应用主要是与linux打交道,所以安装了 ubuntu 虚拟机以满足短期的知识学习需求.十里安装了 ubuntu 虚拟机 ...

  3. 深入浅出Docker(五):基于Fig搭建开发环境

    本文原创版权归 infoq 肖德时 所有,此处为技术收藏,如有再转,请于篇头保留原创作者及出处,以示尊重! 作者: 肖德时 原文: http://www.infoq.com/cn/articles/d ...

  4. docker yum php mysql_Centos下 使用Docker, 配置PHP+Nginx+Mysql(多PHP版本)

    Centos下 使用Docker, 配置PHP+Nginx+Mysql(多PHP版本) 2年前 阅读 6556 评论 0 喜欢 0 ### 一.先安装Dokcer: 1.安装一些必要的系统工具: `s ...

  5. docker 安装oracle_Windows系统下安装Docker,包你满意!

    如果使用的是Windows系统,则可以通过安装Docker Community Edition for Windows(Win10 专业版/企业版)或Docker Toolbox(Win7,Win8, ...

  6. docker 导入镜像_官方下一代Docker镜像构建神器 -- BuildKit

    BuildKit是Docker官方社区推出的下一代镜像构建神器--可以更加快速,有效,安全地构建docker 镜像.Docker v18.06已经集成了该组件.BuildKit可用于多种导出格式(例如 ...

  7. docker 安装 oracle12,Centos7下利用docker安装oracle12c

    实战在windows局域网下可以进行连接,并执行sql语句: 执行结果 具体的步骤如下: 1.在centos7下安装docker [root@localhost /]# yum install doc ...

  8. linux下的svn搭建,Ubuntu 14.04 下搭建SVN服务器 svn://

    Ubuntu 14.04 下搭建SVN服务器 svn:// 安装软件包: sudo apt-get install subversion 之后选择SVN服务文件及配置文件的放置位置.我放在了/srv下 ...

  9. 轻松玩转树莓派Pico之三、Windows+Ubuntu虚拟机模式下VSCode C语言开发环境搭建

    目录 1.VSCode下载与安装 2.VSCode基础插件安装 3.SSH连接与配置 4.SSH免密登录 5.Pico编译 工欲善其事,必先利其器.之前的介绍的Pico流程都是通过命令行编译,没有进行 ...

最新文章

  1. PHP Webservice的发布与调用
  2. 脑机接口可以实时从脑电波中重建人脑中的图片?
  3. 网络营销推广软件教你学会单页面SEO优化技巧,轻松赢流量!
  4. Meterpreter Guide
  5. python语言程序的特点_Python语言有哪些优点?
  6. 设置本地yum源优先
  7. vue 项目配合zepto的巨坑
  8. Spring 框架学习 —— 容器
  9. MySQL架构体系(从一条语句出发了解MySQL各部分的作用)
  10. Dubbo视频教程--基础篇--第03节--ZooKeeper注册中心安装详细步骤(单节点)
  11. 产品-Axure9英文版,轮播图效果
  12. 2020年度中国雇主榜发布;全球发布商用5G移动宽带网络数量已达109个 | 美通企业日报...
  13. 音视频从入门到精通——视频 码率 帧率 分辨率
  14. 电压基准和稳压电源-BUCK\BOOST原理讲解
  15. 关于ARM公司的cortex系列
  16. 网传程序员加班猝死,当事人:我还在写代码
  17. Nvjdc(诺兰)再续经典——诺兰方舟ARK
  18. 一个资深程序员看12306 (三)
  19. 图像处理学习笔记-05-图像复原与重建1
  20. 用什么软件工具可以一键添加渐入效果同时虚化边框背景呢?

热门文章

  1. 【Clickhouse】Clickhouse MergeTree家族引擎
  2. 【Elasticsearch】索引和查询性能调优的21条建议-以及调优参数
  3. 【Spring】CGLIB动态代理
  4. spark学习-Spark算子Transformations和Action使用大全(Transformations章(一))
  5. RHEL/CentOS 6.x 系统服务详解
  6. linux套接字端口,多端口监听套接字linux(multiport listening socket linux)
  7. Springboot 关于日期时间格式化处理方式总结
  8. oracle存储过程插入自动编号,Oracle生成单据编号存储过程的实例代码
  9. php xml cdata 解析,![CDATA[文本内容]]代表的意思
  10. php写的注册登录系统吗,php注册登录系统简化版_php技巧