这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
前言
产品从设计到开发再到部署上线,从操作系统到运行环境,再到应用的配置,产品的反复迭代会出现不同版本的兼容问题,无论是对开发还是对运维人员来说都是一件头疼的事。
开发对运维经常会说:“在我的机器上可以正常运行。”。 环境的配置问题非常麻烦,并且不同版本的环境存在非常奇妙的差异,因此非常有必要能够原封不动得将底层环境配置复制过来,于是**Docker(容器技术)**出现了
Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。
介绍
Docker镜像的出现,打破了程序就是单个应用的思维模式,镜像(image)将整个系统自下而上从环境开始打包,使得应用可以跨平台无缝衔接运作。
- 虚拟化和容器是有差异的
虚拟化使得许多操作系统可以在一个操作系统上运作,而容器技术的出现使得多容器可以共享一个操作系统的内核,将应用的进程和系统的其他进程隔离开。
Docker
Docker可以在Linux、Mac和Windows等平台上安装,安装后可以用docker version查看版本信息,当然不建议在Win上使用Docker,需要借助于WSL2的支持,而WSL2目前并不完善。
Docker镜像加速,可以用Ali的docker加速,在/etc/docker/daemon.json中增加"registry-mirrors":["your config"]
docker search name将搜索官方仓库镜像,docker pull name将拉去镜像到本地
docker run -d -p 80:80 nginx将启动一个nginx容器,-d表示后台运行,-p localPort:containerPort表示容器和本地的端口映射,可以使用多个-p添加多个映射,可以增加-it表示运行容器后打开交互,若之前没有pull过此版本的此镜像,将首先会将镜像拉到本地。
docker image list 查看本地镜像
docker image rm name 删除本地镜像
docker image load -i name.tar.gz 从压缩包加载镜像
docker image inspect name 查看镜像详细信息
docker container ls 查看当前容器
docker ps -a 查看所有容器(包括已经退出的)
docker attach 和 docker exec都可以进入容器,但推荐使用后者,从exec退出后不会退出容器,从attach退出容器后,容器也会退出。
...
Docker-compose
docker-compose能够以单引擎模式(Single-Engine Mode)进行多容器应用的部署和管理。多数的现代应用通过多个更小的微服务互相协同来组成一个完整可用的应用。
docker创建单个大型镜像是方便的,但如果一个应用程序需要多个服务支持(这是常态),部署和管理繁多的服务是困难的。而这正是docker-compose要解决的问题。docker-compose并不是通过脚本和各种冗长的 docker 命令来将应用组件组织起来,而是通过一个声明式的配置文件描述整个应用,从而使用一条命令完成部署。
安装完成后docker-compose -v查看当前版本
docker-compose使用YAML文件来定义多服务的应用。
在docker-compose.yml中用versino声明版本,service下列多个服务,image表示需要使用的镜像和版本,volumns表示数据盘挂载路径,environment表示当前服务的配置参数,ports表示端口映射列表,可映射多个端口,depends_on表示主服务依赖于其他子服务。
What's more?
当然,docker-compose也仅限于单机部署。Docker是容器技术的核心、基础,Docker Compose是一个基于Docker的单主机容器编排工具.而k8s是一个跨主机的集群部署工具,功能并不像Kubernetes是基于Dcoker的跨主机的容器管理平台那么丰富
Reference
史上讲解最好的 Docker 教程,从入门到精通(建议收藏的教程) - 腾讯云开发者社区-腾讯云 (tencent.com)