Docker介绍

  • 讲docker之前,先讲一下容器,容器是一种操作系统级别的虚拟化,依赖于Linux内核特性:Namespace和Cgroups(control)
  • docker是一款以容器虚拟化技术为基础的软件
  • 虚拟化技术:虚拟化技术是一种将计算机物理资源进行抽象、转换为虚拟的计算机资源提供给程序使用的技术。
    1. 因为要配置各种环境等,给开发造成了很多困扰。
    2. 虚拟化还有一种作用,就是将虚拟化应用于资源管理.
    3. 假想一下,你要装mysql,redis等等,跑起一个服务端就比较费资源,虚拟化就可以很好地解决这件事情。就会有一种效果,那就是1+1<2.
    4. 虚拟化技术通过资源隔离的方式,无形地也可以把这些程序隔离在不同的虚拟环境中,既然虚拟环境不同,自然运行在不同环境中的程序就不会互相干扰或争抢资源了
  • 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