遇到这些问题可以考虑使用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 宿主机目录(文件):容器内目录(文件) ...
- 如果宿主机目录不存在,会自动创建