为什么用docker?
一句话总结:平台的伸缩和弹性部署。
- 开发人员消除协作编码时“在我的机器上可正常工作”的问题(开发环境/测试环境/生产环境部署切换)
- 运维人员在隔离容器中并行运行和管理应用,获得更好的计算密度
docker是怎么做到的?
docker的两大技术
- linux虚拟化
linux操作系统=linux开源内核+文件系统 linux虚拟化=复用内核+自己定制的文件系统
- docker镜像技术
docker镜像技术=虚拟化的操作系统+服务包+容器文件=整包(集装箱),也可称作沙箱环境
docker的结构
- Host,主机 Container,容器,独立运行的一套虚拟化linux系统 Image,镜像,服务组件的镜像文件
- Registry,镜像仓库
- Client,客户端,使用api与docker交互
- Machine,docker的命令行工具
docker 仓库
存放镜像文件的仓库,类似maven仓库的概念。 分为中央仓库和私服仓库。 镜像查找顺序:私服仓库-->中央仓库 官方仓库的命名规则:docker中央仓库可以注册,然后import上传的仓库是在个人的私有仓库中,以用户名/镜像名为格式存储
docker 镜像
docker的可运行镜像是通过一层层的镜像文件包装,再加上最顶层的容器文件组成的。
每一层镜像文件都有一个唯一id,镜像文件在不同的可运行镜像中可复用,可通过docker history nginx,来查看镜像的文件层次信息
下载到本地时,相同的镜像文件也可复用
docker 容器
容器是独立运行的一个或一组应用,以及它们的运行态环境
docker run 创建一个容器并运行一个命令 docker create 创建一个容器,但不启动—>start
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-p: 端口映射,格式为:主机(宿主)端口:容器端口;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
-m :设置容器使用内存最大值;
--net="bridge": 网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[X]: 添加链接到另一个容器;
--expose=[X]: 开放一个端口或一组端口;
docker安装
`
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#默认版本安装
yum install docker-ce
#指定版本安装
yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io -y
#启动
systemctl start docker systemctl enable docker
#重启
systemctl restart docker
#修改镜像仓库地址,这里用的阿里镜像加速
vim /etc/docker/daemon.json { "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] }
systemctl daemon-reload
systemctl restart docker
#修改ip段
vim /etc/docker/daemon.json { "bip":"172.17.3.1/24", "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] }
systemctl daemon-reload
systemctl restart docker
#拉取镜像
docker pull nginx
#测试运行
docker run -d –name nginx nginx
`
Docker命令
命令集合
- docker操作 版本/信息
docker [info|version]
- 容器操作 容器生命周期管理
docker [run|start|stop|restart|kill|rm|pause|unpause]
- 容器操作运维
docker [ps|inspect|exec|logs|export|import|port]
- 容器rootfs命令
docker [commit|cp|diff]
- 镜像操作 镜像管理
docker [images|rmi|tag|build|history|save|import]
- 仓库操作 镜像仓库
docker [login|pull|push|search]
常用命令
`
#查看镜像信息列表
docker images
#查看运行中的所有容器(后面加上-a,查看所有容器包括非运行中)
docker ps
#从镜像仓库中拉取镜像,不带:version代表拉取最后版本
docker pull [images]:[version]
#进入docker容器,-it打开人机交互, /bin/bash 代表linux的shell环境
docker exec -it nginx /bin/bash
#退出也关闭容器
Exit
#退出不关闭容器
Ctrl+P+Q
#后台启动容器,--privileged容器将拥有访问主机所有设备的权限
docker run -d –name --privileged nginx nginx
#查看容器信息
docker inspect nginx
#宿主机与docker容器目录挂载(挂载宿主目录会覆盖容器镜像模版目录,使用volumes方式)
docker run -d –name nginx2 -v /docker/nginx/conf:/etc/nginx/conf.d nginx
#多个容器共享数据卷(挂载目录)
docker run -it --name nginx3 --volumes-from nginx2 nginx
#绑定宿主机端口和docker的端口
docker run -d –name nginx3 -p 8080:80 nginx
#复制宿主机文件到容器
docker cp anaconda-ks.cfg cent:/var
#删除容器
docker rm [containerID]
#删除镜像
docker rmi [imageID]
`
docker挂载原则
- 配置文件在宿主机直接配置
- 生产业务数据文件在宿主机持久保存
- 日志文件在宿主机方便查看
来源:oschina
链接:https://my.oschina.net/u/150107/blog/3214431