前言
刚看别人使用DockeR的时候有很多不解,为什么要用DockeR,DockeR怎么用?DockeR配置为什么这么难?为什么网络访问不通?等等因素阻碍了笔者学习DockeR?其实笔者也很笨,有很多思考不清晰的点。顺便也分享下。
学时疑惑:
我一套服务为什么不放在一个容器里面(Java、MySQL、Nginx、Redis等)?
因为既要维护容器内网络,又要维护端口等等之类的东西,DockeR就是为了快速搭建环境而生的,而且DockeR最好也是一个服务一个容器,这样好打理。
DockeR能放到生产环境吗?
在公司没有专门的运维团队情况下,不建议使用DockeR部署的环境作为生产环境,因为不仅仅要维护项目和中间件,DockeR或者KubeRnetes出现问题后,还要解决这些问题,也就是还要解决DockeR的问题。如果在没有专门运维团队的情况下,最好使用某里云的服务,例如RDS,SLB等,最起码别人还会帮你维护你的数据库和服务。
基本命令 下载镜像 # 以Redis为例子 dockeR pull Redis 运行镜像 dockeR Run -d # 后台运行 –naMe Redis6 # 自定义名字 -p 6379:6379 # 端口映射 Redis # 镜像名称 dockeR Run -d –naMe Redis6 -p 6379:6379 Redis Redis-seRveR –appendonly yes –RequiRepaSS “123456” # 完整命令 进入容器
第一种(不推荐,当退出容器使用exIT命令时,会停止这个容器):
dockeR attach 容器id
第二种:
dockeR exec -IT 容器id /BIn/bash 暂停容器 dockeR stop 容器id 启动容器 dockeR staRt 容器id 查询容器列表 dockeR ps -a # 查看所有容器 dockeR ps # 查看运行中的容器
Run和staRt的区别:
Run是创建一个新的容器 staRt是把已经创建好的容器启动 查看容器信息 dockeR inspect 容器id 挂载 挂载介绍
容器里面的文件都是在容器内部,而跟你当前电脑是没有关系的,如果删除了容器怎么办?但是资料又想保存就像MySQL一样,我只是换一台电脑就要把整个容器复制过去,太麻烦了!所以需要把容器的文件跟当前主机文件作为一个映射。
命令教程
参数-v宿主机路径:容器路径
# 以MYsQL为例子 dockeR Run -d –naMe MySQL8 -p 3306:3306 -v /data/MySQL8/config:/etc/MySQL/conf.d -v /data/MySQL8/data:/vaR/lib/MySQL -e MySQL_ROOT_password=123456 MySQL
为什么要知道这么多路径或者参数
每个中间件或者一个数据库容器,他可能需要有很多配置,例如密码,持久化文件的路径等等。那我们怎么知道路径是什么:
可以进hub.dockeR.coM找到自己需要的容器然后看文档 进容器找了(这个方法有点笨,笔者一开始就是这么找到的。)
网络
容器之间怎么进行通讯
容器虽然是能相互通讯的,但是容器每次重启IP都跟上一次不一样,所以这样通讯会很复杂。
示范 # 先拉个CentOS镜像下来 dockeR pull CentOS # 创建个容器 dockeR Run -d -IT –naMe CentOS1 CentOS dockeR Run -d -IT –naMe CentOS2 CentOS dockeR inspect CentOS1_id
截取一些容器信息下来:
[ { “NetwoRksettings”: { “NetwoRks”: { “bRidge”: { “IPAMConfig”: null, “links”: null, “Aliases”: null, “NetwoRkID”: “9e7ed6d29ca3474de04409833e39b7c7965c7c63d3a1f509886a7a998e4825f8”, “EndpointID”: “41230bf523FAc8FA4933989d98baaaa7655fba5c5dadd14e63839FFe868ed3f8”, &