MacOS Docker的简单使用笔记


好久了,一年前我听到docker的时候不为所动,原因是那时候我本身就是用的Linux,什么Ubuntu,Centos,Arch都在玩,在Linux上用了整整一年后,现在转到mac上,总觉得缺了点啥,所以今天想起了这个玩意儿,就玩了下,不得不说,给我的感觉就是 “轻盈 高效率”,别问我为什么不用虚拟机,

。。。我已经受够了这种,主要是一个虚拟机贼大,我将其放在NTFS上进行大量读写的时候,100%的崩溃卡死,连带主机,我买的是这货

一百大洋,他能帮我解决很多问题,但是他不是能完美的处理所有大的文件流达到完美驱动NTFS

正题

网上的教程都,好老,好老,好老!!!

最起码你得知道Docker现在已经不需要Oracle的那个免费虚拟机了,需要的话我就不用这玩意儿了,我干嘛不用上面的两个虚拟机哪个不比它强?

先下载:https://docs.docker.com/docker-for-mac/install/#download-docker-for-mac

我下载的稳定版,英文不合格的请自行右键翻译或者面壁思过

拿到DMG了就安装,MAC的软件咋安装就咋安装哈,别多想

弄完后运行,登录阿里云->容器镜像服务->镜像加速器

针对直接使用Docker for mac的 原文如下:

针对安装了Docker for Mac的用户,您可以参考以下配置步骤:
1.右键点击桌面顶栏的 docker 图标,选择 Preferences ,在 Daemon 标签(Docker 17.03 之前版本为 Advanced 标签)下的 Registry mirrors 列表中
2.将https://xxxxxxxxxxx每个人的不一样xxxx加到"registry-mirrors"的数组里,点击 Apply & Restart按钮,等待Docker重启并应用配置的镜像加速器。

然后,你就可以用国内阿里爸爸的速度来下载你要的镜像了

参考:https://yangshunjie.com/change-the-docker-image-origin-to-aliyun.html

https://www.binss.me/blog/review-of-docker-for-mac-beta/

安装镜像

这里有份文档:https://yeasy.gitbooks.io/docker_practice/content/image/pull.html

因为为了我需要的软件可以正常运行,所以我选择了ubuntu,按例子一路下来,就好了。

比如安装一个16.04的ubuntu基本包:

docker pull ubuntu:16.04

接着开启这个容器:

docker run -it ubuntu:16.04 bash

然后,你正常要干嘛就干嘛,我去折腾一个图形界面然后本地登录上去了再补文吧。。。

数据盘与主机交互等等,看上面文档部分的:

Docker 数据管理
这一章介绍如何在 Docker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式:
数据卷(Volumes)
挂载主机目录 (Bind mounts)

好了,其实真的部署就这么点。。。。折腾。。。

相关命令补充记录

哈哈,从来没想过在hfs+的卷上进行ext4的挂载读写,这样我的ROM修改就可以从Linux转到mac了

简直不能再人性化,附上整理和测试过的一些命令

正文

三个概念:

镜像:Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

容器:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会混淆容器和虚拟机。

仓库:镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

新手体验:首先你需要下载镜像(这里是安装Ubuntu16.04):

docker pull ubuntu:16.04

如果你想运行下试试:

docker run -it --rm \
 ubuntu:16.04 \
 bash

 

镜像

下载镜像:

docker pull ubuntu:16.04

列出镜像:

docker image ls

列出镜像-详细层级:

docker image ls -a

删除镜像(id 可以从docker image ls中获取)

docker image rm id

强制删除镜像(无论是否有容器在运行)

docker image rm -f id

镜像大小:

docker system df

数据卷

创建数据卷:

docker volume create my-data

查看所有数据卷

docker volume ls

删除数据卷

docker volume rm my-data

查看指定 数据卷 的信息

docker volume inspect my-data

启动一个挂载数据卷的容器

docker run -it --name linux --mount source=my-data,target=/my-data ubuntu:16.04 bash

容器使用

运行:

docker run --rm -it \
 ubuntu:16.04 \
 bash
docker run --rm -it \
 mono:latest \
 bash

后台启动后进入bash (-t后面可以是容器id 也可以是容器name,通过docker container ls -a可以得到)
docker exec -it linux bash

查看容器

docker container ls -a

终止容器

docker container stop linux

删除容器

docker container rm linux

重新启动容器

docker container restart linux

查看容器日志

docker logs linux

清理掉所有处于终止状态的容器

docker container prune

数据交互

启动一个挂载本机目录的容器(需要指定type=bind, 其中source必须为绝对路径)

docker run -it --name linux \
 --mount type=bind,source=/Users/lckiss/Downloads/,target=/my-data \
 ubuntu:16.04 bash

PS:如果你想进行以下参数 那么你需要加上
--privileged
你将有完整的访问主机的/dev。
你将能够挂载文件系统。
您将能够修改容器内的网络配置
上面的命令将变为

docker run -it --privileged \
 --name linux \
 --mount type=bind,source=/Users/lckiss/Downloads/,target=/my-data \
 ubuntu:16.04 bash

------------------------docker可能需要的linux包--------------
无法执行file命令

apt install file

没有sudo

apt-get update && apt-get install -y sudo && rm -rf /var/lib/apt/lists/*

安装32位库(比如make_ext4fs就是32位的程序 所以需要32位库)

apt-get install lib32c-dev 
apt-get install lib32stdc++6

无法找到add-apt-repository问题的解决方法

apt-get install python-software-properties && sudo apt-get install software-properties-common

安装Java

add-apt-repository ppa:webupd8team/java 
apt-get update 
apt-get install oracle-java8-installer

安装apt-fast

add-apt-repository ppa:saiarcot895/myppa
apt-get update
apt-get -y install apt-fast

Docker执行java代码输出的中文乱码

先为 Ubuntu 系统添加中文字符编码

locale-gen zh_CN.UTF-8

安装简体中文语言包

apt-get install language-pack-zh-hans language-pack-zh-hans-base

设置当前环境为UTF-8

export LANG=C.UTF-8

参考:http://blog.konghy.cn/2016/11/26/ubuntu-zh-support/

https://my.oschina.net/u/915811/blog/744643

弄完基本环境后,总算知道了什么叫轻量

额,原谅我装的东西 比较多 ...

最后,有问题记得看官方文档:https://docs.docker.com/

网上很多东西已经过时,请多使用-h 配合官方DOC食用,效果最佳。

声明:TIL|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA[ZH]协议进行授权

转载:转载请注明原文链接 - MacOS Docker的简单使用笔记


Life is very interesting. In the end, some of your greatest pains become your greatest strengths.