Docker介绍
- 讲docker之前,先讲一下容器,容器是一种操作系统级别的虚拟化,依赖于Linux内核特性:Namespace和Cgroups(control)
- docker是一款以容器虚拟化技术为基础的软件
- 虚拟化技术:虚拟化技术是一种将计算机物理资源进行抽象、转换为虚拟的计算机资源提供给程序使用的技术。
- 因为要配置各种环境等,给开发造成了很多困扰。
- 虚拟化还有一种作用,就是将虚拟化应用于资源管理.
- 假想一下,你要装mysql,redis等等,跑起一个服务端就比较费资源,虚拟化就可以很好地解决这件事情。就会有一种效果,那就是1 1<2.
- 虚拟化技术通过资源隔离的方式,无形地也可以把这些程序隔离在不同的虚拟环境中,既然虚拟环境不同,自然运行在不同环境中的程序就不会互相干扰或争抢资源了
- Docker是一种C/S架构的容器引擎。docker三大核心组件-镜像,容器和库
- 镜像:是一个只读的静态模板,它保存着容器需要的环境和应用的执行代码,可以把镜像看成是容器的代码,当代码运行起来的时候就成了容器
- 容器:是一个运行时环境,它是一个镜像的运行状态,相对于静态的镜像而言,容器是镜像执行的动态表现,用户可以在容器中运行想要的程序和服务,所有应用的运行方式都是创建--开始--停止--重启--和销毁
- 库:Docker采用注册服务器来存储和共享用户的镜像,库是某个特定用户存储镜像的目录
dockerfile
Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建
- docker build 的工作原理
- Docker 在运行时分为 Docker 引擎(也就是服务端守护进程)和客户端工具。Docker 的引擎提供了一组 REST API,被称为 Docker Remote API,而如 docker 命令这样的客户端工具,则是通过这组 API 与 Docker 引擎交互,从而完成各种功能。因此,虽然表面上我们好像是在本机执行各种 docker 功能,但实际上,一切都是使用的远程调用形式在服务端(Docker 引擎)完成。也因为这种 C/S 设计,让我们操作远程服务器的 Docker 引擎变得轻而易举 。
一些实例
- 启动mysql实例
- docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
- 比如:docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=111111 -d mysql:8.0
- some-mysql: 容器别名
- my-secret-pw:初始化设置的root用户的密码
- tag:mysql的版本,不写默认使用最新版
- -p 3306:3306:表示在这个容器中使用3306端口(第二个)映射到本机的端口号也为3306(第一个)
- 启动redis实例
- 先run起来,然后查看已经创建的容器docker ps
- docker exec -it containerid redis-cli
- docker run --name myredis -d -p63791:6379 redis
- 启动容器MongoDB - docker run -d -p 27017:27017 -v mongo_configdb:/data/configdb -v mongo_db:/data/db --name mongo docker.io/mongo //文件去哪儿了 - 运行MongoDB的shell docker exec -it containerNameOrContainerID mongo admin
- 进入mysql内部
- docker exec -it mysql bash
- 登录mysql
- mysql -uroot -p
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!