神奇Docker

Docker是Go语言开发的应用容器引擎,核心概念是:镜像、容器、仓库 关键字是:分布式应用,微服务,容器,虚拟化

传统的虚拟机技术是在硬件层面实现的,需要额外的虚拟机管理软件跟虚拟机操作系统。而Docker是在操作系统层面实现的,直接使用本地操作系统

Docker的主要目标是通过对应用组件的封装。分发、部署、运行等生命周期的管理,做到“一次封装,到处运行”

Docker体系原理

一个完整的Docker有以下几部分:

  • DockerClient 客户端
  • Docker Deamon 守护进程
  • Docker Image 镜像
  • Docker Container 容器

Docker使用了C/S体系架构,Docker客户端与Docker守护进程通信,Docker守护进程负责构建,运行和分发Docker容器。

Docker Damon DockerD用来监听Docker API的请求和管理Docker对象,比如镜像、容器、网络和Volume

Docker Client docker client是我们和Docker进行交互的最主要的方式方法,比如可以通过docker run来运行一个容器,然后我们的这个client会把命令发送给上面的Docker

Docker Registry 用来存储Docker镜像的仓库,Docker Hub是Docker官方提供的一个公共仓库,而且Docker默认也是从Docker Hub上查找镜像的,当然你也可以很方便的运行一个私有仓库,当我们使用docker pull或者docker run命令时,就会从我们配置的Docker镜像仓库中去拉取镜像,使用docker push命令时,会将我们构建的镜像推送到对应的镜像仓库中

Images 镜像,镜像是一个制度模板,带有Docker容器的说明,一般来说的,镜像会基于另外的一些基础镜像上面安装一个Nginx服务器,这样就可以构建一个属于我们自己的镜像了

Containers 容器,容器是一个镜像的可运行的实例,可以使用Docker REST API或者CLI来操作容器,容器的实质是进程,但与直接在宿主执行的实例进程不同,容器进程属于自己的独立的命名空间。因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间、甚至自己的用户ID。容器内的经常是运行在一个隔离的环境里,使用起来,就好像在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全

Docker详解

安装

官网 然而该安装包并不支持WIN10 家庭版….只能用toolbox

安装指南

然而在找镜像的过程中,感受到了对Windows系统深深的敌意….我生气了,我真的要换Linux本了…

确保虚拟化已启动

启动Docker 终端遇到问题: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory"

首先检查一下电脑是否支持VT-X/AMD-v ,检测软件 我的结果是VT-X/AMD-v enabled ,那为什么还有这个问题呢?

在SO上看到一个回答,关闭虚拟化检查

cmd运行:

1
docker-machine create -d virtualbox --virtualbox-memory=1024

创建了一个内存1G的虚拟机,然后

1
docker-machine create -d virtualbox --virtualbox-no-vtx-check default

还是不行???

另一种解决方法 直接修改sh文件设置

  1. Open C:\Program Files\Docker Toolbox\start.sh with an Editor
  2. Replace line 69 from

"${DOCKER_MACHINE}" create -d virtualbox $PROXY_ENV "${VM}

to

"${DOCKER_MACHINE}" create -d virtualbox --virtualbox-no-vtx-check $PROXY_ENV "${VM}"

可能是因为之前命令行的权限不够?

再次启动终端, 上述问题消失,但又有别的问题 Downloading C:\Users\18771\.docker\machine\cache\boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v19.03.5/boot2docker.iso...

这一步下不下来,可能是众所周知的原因。

手动下载该文件 https://github.com/boot2docker/boot2docker/releases/download/v19.03.5/boot2docker.iso

放在 /Users/{user}/.docker/machine/cache/ 目录下

运行成功,会自动创建虚拟机,调用virtualBox的接口,创建虚拟网卡等一系列配置,最后出现了一只小鲸鱼!~~~

1
2
3
4
5
6
7
8
9
10
                        ##         .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===
\______ o __/
\ \ __/
\____\_______/

docker is configured to use the default machine with IP 192.168.99.100

此时进入了git命令行,即Linux环境

Docker命令

命令在Toolbox 运行的 git 终端中运行,而非cmd

基本命令

docker version 可以看到客户端OS是 Windows 而 服务端OS是 Linux

docker info 查看相关信息

docker pull ... 从官方仓库pull

docker run ... 如果本地没有该镜像,会从官方仓库pull下来,然后运行一个container

docker image ls 查看本地镜像

docker container ls 查看本地容器—-容器就是动态的镜像(类似进程与程序的关系)

同一个镜像可以运行在不同的端口,每个端口运行着的都是一个容器,也就是镜像的实例

docker container stop contain_id 终止某容器

docker-machine ls 查看虚拟机 docker-machine rm ... 移除某虚拟机

image相关

docker tag repoitory_name : old_tag repoitory_name : new_tag 添加tag, 但是ID不变,常常给某一个image加上latest标签, 在开发的过程里可以灵活地让其指向不同的image,管理更加灵活 例如从官方仓库pull时,就会默认下载latest版本

docker image history repoitory_name/id 查看更新历史

docker image inspect repoitory_name/id 查看详细信息,如开发环境,配置信息等

docker image remove repoitory_name/id 移除

container相关

docker run -p port:port -d repoitory_name/id:tag

  • -p 指定端口
  • -d 表示后台运行,返回一个container_id
  • 加上--restart==always 每次重启docker自动创建,默认为no 适用于数据库等重启后就要马上启动的服务
  • 加上-m -512m 分配内存—与实际的占用会有差异
  • 加上--cpu-quato 5000 分配CPU的5%

docker container pause container_id 暂停 docker container unpause container_id 继续

docker container stop container_id 停止

docker container kill container_id 立即停止

docker logs -f container_id 查看日志

docker container inspect container_id 查看详细信息,如状态,网络等

docker container prune 移除所有停止的container

docker events container事件动态

docker top container_id container中运行的进程信息—–可以理解为container是对进程的封装?

docker stats container占用CPU和内存的情况

docker system df 查看对比信息

其他

github下载速度过慢

这是经常遇到,但一直没有解决的问题,在github上经常遇到的,下文件很慢很慢,绝大部分是因为来自于亚马逊的国外服务器

尝试1:

更改C:\Windows\System32\drivers\etc\hosts文件,在文件中追加219.76.4.4 github-cloud.s3.amazonaws.com, 将域名指向该IP,即香港的服务器

在cmd命令行输入:ipconfig/flushdns(刷新DNS)—– 哇,果然快到飞起

方法2: 码云 —- 改天试试