Docker
一、Docker 简介
传统虚拟机中,需要虚拟出一条硬件,运行完整的操作系统,从而才能在该系统上跑程序
而容器内的应用,直接运行在宿主机的内部,容器没有自己的内核,也没有虚拟硬件,所以十分轻便;每个容器相互隔离,都有自己的文件系统,互不影响
docker 可以将应用和依赖,打包到一个轻量级的容器中,从而帮助运维人员快速部署产品
二、Docker 安装
我使用的是阿里云的 ECS,docker 的安装流程,可以参考下面的链接:
https://help.aliyun.com/document_detail/51853.html
三、Docker 架构
1、镜像
Docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像 ===> run ===> tomcat01容器, 通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)
再一个类比的话 ,就是 java 中 对象的 Class 类,可以作为模板,创建不同的对象
2、容器
- Docker利用容器技术,独立运行一个或者一组应用, 通过镜像来创建的
- 启动,停止,删除,基本命令!
- 就目前可以把这个容器理解为一个linux系统
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和对象一样, 镜像是静态的定义,容器是镜像运行时的实体。
3、仓库
- 存放镜像的地方
- Docker Hub(默认是国外的)
- 阿里云等都有容器服务(配置镜像加速!)
四、Docker 常用指令
1、帮助命令
docker version # docker版本信息
docker info # 系统级别的信息,包括镜像和容器的数量
docker 命令 --help
2、进程相关的命令
# 启动 docker
systemctl start docker
# 停止 docker服务
systemctl stop docker
# 重启 docker
systemctl restart docker
# 查看 docker 服务状态
systemctl status docker
# 设置开机启动 docker
systemctl enable docker
3、镜像相关的命令
# 查看镜像:查看本地所有镜像
docker images
# 查看所用 镜像的 id
docker images -q
# 搜索镜像:从网络中查找需要的镜像
docker search <镜像名称>
docker search redis # 查找 redis 镜像
# 拉取镜像
docker pull <镜像名称>
docker pull redis # 下载最新版本 redis
docker pull redis:5.0 # 下载 5.0 版本 redis 如果不知道要下什么版本,可以在 dockerhub 中找
# 删除镜像
docker rmi <镜像id> # 删除指定本地镜像
docker images -q # 查找所有的镜像列表
docker rmi `docker images -q` # 删除所有本地镜像
4、容器相关的命令
查看容器、创建容器、进入容器、启动容器、停止容器、删除容器、查看容器信息
# 查看正在运行的容器
docker ps
# 查看所有容器
docker ps -a
# 创建并启动容器
docker run <参数>
# 参数说明
# -i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容 器自动关闭。
# -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
# -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容 器不会关闭。
# -it 创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器
# --name:为创建的容器命名。
docker run -it --name=c1 centos:7 /bin/bash #创建交互式容器,-t 为容器创建了一个伪输入终端 这里是在宿主机中,再创建一个 centos:7 系统
docker run -id --name=c2 centos:7 #创建守护式容器
**注意:**交互式容器,exit后容器自动关闭,守护式容器会在后台执行
# 进入容器
docker exec -it c2 /bin/bash
# 停止容器
docker stop <容器名称>
# 启动容器
docker start <容器名称>
# 删除容器
docker rm <容器名称>
# 查看容器信息
docker inspect <容器名称>
五、Docker 容器的数据卷
1、数据卷的概念
我们先思考如下几个问题:
- Docker 容器删除后,容器中产生的数据还在吗?
- Docker 容器和外部机器可以直接交换文件吗?
- 容器之间怎么进行数据交互呢?
因为容器同时包含产生的数据,所以容器删除之后,数据一并删除
容器无法直接与外部及其交换文件
容器之间想要进行数据交互,需要借助一个第三方区域------数据卷<