Docker学习笔记

遇到这些问题可以考虑使用Docker

  • 合作开发的时候,在本机可以跑,别人的电脑跑不起来

    • 这里我们拿Java Web应用程序举例,我们一个Java Web应用程序涉及很多东西,比如JDK、tomcat、spring等等。当这些其中某一项版本不一致的时候,可能就会导致应用程序跑不起来这种情况。Docker则将程序直接打包成镜像,直接运行在容器中即可。
  • 服务器自己的程序挂了,结果发现是别人程序出了问题把内存吃完了,自己程序因为内存不够就挂了

    • 这种也是一种比较常见的情况,如果你的程序重要性不是特别高的话,公司基本上不可能让你的程序独享一台服务器的,这时候你的服务器就会跟公司其他人的程序共享一台服务器,所以不可避免地就会受到其他程序的干扰,导致自己的程序出现问题。Docker就很好解决了环境隔离的问题,别人程序不会影响到自己的程序。
  • 公司要弄一个活动,可能会有大量的流量进来,公司需要再多部署几十台服务器

    • 在没有Docker的情况下,要在几天内部署几十台服务器,这对运维来说是一件非常折磨人的事,而且每台服务器的环境还不一定一样,就会出现各种问题,最后部署地头皮发麻。用Docker的话,我只需要将程序打包到镜像,你要多少台服务,我就给你跑多少容器,极大地提高了部署效率。

Docker特点

  • 标准化交付:Docker将应用打包成标准化单元,用于交付、部署;
  • 轻量级:容器及包含了软件运行所需的所有环境,而且非常轻量级
  • 高可靠:容器化的应用程序,可以在任何Linux环境中始终如一的运行
  • 隔离性:容器化的应用程序,具备隔离性,这样多团队可以共享同一Linux系统资源

虚拟机和Docker比较

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生硬件 弱鸡
系统支持量 单机可跑几十个容器 单机几个虚拟OS
运行环境 主要在Linux 主要在window

相关概念

  • 宿主机:安装Docker守护进程的Linux服务器,称之为宿主机。
  • 镜像image:就相当于是一个 root 文件系统。除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。
  • 容器container:容器是镜像运行后的实体,可以启动,停止,删除,暂停等操作。
  • 仓库repository:存放镜像的中心,最常使用的Registry公开服务,是官方的Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。

遇到问题

docker容器中无法使用vim命令

执行命令:apt-get update

执行命令:apt-get install vim -y

常用命令

  • systemctl start docker 启动docker服务
  • systemctl stop docker 停止docker服务
  • systemctl status docker 查看docker服务状态
  • systemctl enable docker 开机启动docker服务
  • docker info 查看docker概要信息
  • docker -v 查看版本
  • docker images 查看本地所有镜像
  • docker search 镜像名称
  • docker pull 镜像名称
  • docker rmi 镜像ID
  • docker rmi 镜像ID 删除镜像
  • docker ps 查看容器
  • docker run 参数 镜像名称:镜像标签 /bin/bash 创建容器:交互式、守护式

创建容器常用的参数说明:

## 命令参数详解 
-i:表示运行容器,如果不加该参数那么只是通过镜像创建容器,而不启动。 
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端(如果 只加it两个参数,创建后就会自动进去容器)。 
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。 
--name :为创建的容器命名。 
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录 或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。 
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射,例如: 可以将Docker中Tomcat容器的8080端口映射到宿主机上的某一个端口8080,那么以后访问tomcat只需 要:http://宿主机的IP:8080/ 
进入容器之后,初始化执行的命令:/bin/bash;可写可不写
  • docker run -it --name=容器名称 镜像名称:标签 /bin/bash 交互式
  • docker run -di --name=容器名称 镜像名称(或镜像ID):标签 /bin/bash 守护式
  • docker exec -it 容器名称 (或者容器ID) /bin/bash 进入容器
  • docker start 容器名称(或者容器ID) 启动容器
  • docker stop 容器名称(或者容器ID) 停止容器
  • docker rm 容器名称(容器ID) 删除容器(无法删除正在运行的容器,需要先停止容器)

数据卷

数据卷是宿主机中的一个目录或文件,当容器目录和数据卷目录绑定后,对方的修改会立即同步。

一个数据卷可以被多个容器同时挂载,一个容器也可以被挂载多个数据卷。

简单来说数据卷本质其实是共享文件夹,是宿主机与容器间数据共享的桥梁。

命令:

  • docker run ... –v 宿主机目录(文件):容器内目录(文件) ...
  • 如果宿主机目录不存在,会自动创建
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。