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。容器内的经常是运行在一个隔离的环境里,使用起来,就好像在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全
安装
官网 然而该安装包并不支持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文件设置
- Open C:\Program Files\Docker Toolbox\start.sh with an Editor
- 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 | ## . |
此时进入了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: 码云 —- 改天试试