经过几天看书,我自己总结了一下Docker。
- Docker适用于微服务(数据库那些大服务就不太适合放在docker)。
- docker更容易配置服务。
- docker更适于发布软件。
- docker有利于多版本测试。
- docker会比saltstack更方便一点。
- docker比OpenStack更容易处理一些业务扩容(时间短,秒级;资源利用率比OpenStack高)
(OpenStack会引发一个IO风暴的问题。)
docker的部署
Docker可以在linux下,window下,mac下部署。但是目前最支持的是Linux下的Ubuntu系统。
- 有yum仓库就可以直接用yum仓库,很方便
-
yum install docker-io (Centos) sudo apt-get install docker-io(Ubuntu)
- 安装完之后,启动Docker。
-
sudo systemctl start docker 或者 /etc/init.d/docker start
完了之后,就可以运行docker的镜像。docker那么火其实一部分原因我觉得是因为docker像GitHub一样,有一个仓库。
里面存放着很多docker镜像。
我们可以从上面搜索我们想要的镜像,或者pull一个镜像下来
比如我们搜索一个关于debian的镜像
sodu docker search debian
解释:
name 名称 格式:用户名/项目的名称
description 描述
stars 被引用多少次
official 是否是官方的
automated 是否是自动构建的
那么我们怎么去使用这些镜像呢?
直接pull下来就可以用了。
sudo docker pull debian
结果:
我们获取完之后,我们可以使用
sudo docker images
就可以看见我们当前系统拥有的镜像了!
repository 仓库。我们可以查看这个镜像来自哪个仓库
tag 标志;lastest说明是最新一个
image ID 镜像ID;每个镜像都有一个唯一的ID
created 镜像创建的时间
Size 镜像的大小
我们先使用一个docker发出一个hello docker
sudo docker run debian /bin/echo 'Hello Docker'
Docker -a 可以查看所有的docker容器的情况
//我们可以从里面看见运行的容器和停止运行的容器
//每一个容器都会有一个自己的ID比如这里的:541b249174bb
//image 表示他的镜像是什么
//command 表示他运行的命令是什么
//created 表示他的创建时间是什么时候
//status 表示当前的状态,Exited是已经退出了
//name 表示名字,不指定名字的时候,docker会在他的名字库里面自动找一个生成
//我们可以使容器保持打开,并且自定义名字
sudo docker run -name FirDocker -it debian /bin/bash
在这里:
-name选项可以自定义名字
-it选项是 -i和-t的结合。
-i是表示让容器的标准输入保持打开
-t是表示让容器开出一个tty,并绑定到容器的标准输入上
比如我们不加 -it选项,docker运行完所需要的指令就会退出。
生产中常用的进入container的方法(十分不推荐使用ssh进去):
- 获取container的pid
-
sudo docker inspect --format "{{.State.Pid}}" mynginx1 //mynginx1可以是container的id或者是名字
- 通过nsenter命令进入
-
sudo nsenter --target 32029 --mount --uts --ipc --net --pid --target 后接pid
当然,我们也可以用attach方法附着到容器上
sudo docker attach containername
(顺带提一下,docker是一个一次只能执行单任务的机器,他执行完这个任务就会自动退出)
我们把hello docker 的机器启动
但是一启动就退出了,因为他一执行完hello Docker这任务就退出了
退出docker
这个模式是退出并且关闭容器
显示名为Nick_Docker的container以及退出了
删除某一个container
sudo docker rm containername
很明显,我们要先停止这个容器才可以删除掉。(其实很好,可以防止误删,对服务造成影响)
删除container的顺序是先stop container,然后再rm container.
Docker是一个只允许一个用户同时登录的容器,并不能像虚拟机一样,这也是他和虚拟机的一个区别