是什么
开源的应用容器引擎。
类似于虚拟机,但不是虚拟机,实现了虚拟机技术中的资源隔离,是一种**轻量级容器技术**。
轻量级:所需资源少,启动很快。
虚拟机是重量级的。
有什么用
允许用户打包自己安装、配置好的应用环境并发布镜像,别人下载这个镜像并运行,就可以获得和该用户一模一样的应用环境。
比如,安装mysql,下载别人安装配置好的mysql镜像,直接在docker中运行,就可以获得和别人一模一样的mysql服务,而不用自己下载、安装、配置(可能还会出问题)。
如何用
- 下载镜像
- 运行镜像
基础
概念
-
镜像:安装并配置好的应用环境被打包后的产物。
一个镜像可能包含多个应用
-
容器:运行镜像就会产生一个容器,之后就可以对容器进行操作了:启动容器、停止容器、重启容器。
一个容器中可能运行一个或多个应用。
-
仓库:存放镜像。
分公有仓库、私有仓库
类比:
- 镜像 类比 软件安装包,比如.exe安装程序
- 容器 类比 使用安装包安装的应用(只不过容器中可能包含多个应用程序)
- 仓库 类比 存放软件安装包的地方
另一个角度理解:
- 镜像,就是一个应用环境模板或者配置。
- 容器,运行镜像后会得到一个容器,相当于是创建了这么一个应用环境,是应用环境实例。
- 仓库,存放镜像的。
再来一个理解:
一个人的房子做的很好、装修的也很好,然后别人也想要一模一样的,于是这个人画了房子的图纸及装修说明,其他人拿到图纸及装修说明后按照上面做房子、装修就能得到一模一样的房子。
房子的图纸及装修说明就是镜像。
房子就是容器。
安装
下载并启动elasticsearch镜像实例
docker run --name elasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:7.8.0
常用操作命令
镜像操作
repository:tag表示一个镜像,同一个仓库源可以有多个tag,代表不同版本。
-
docker images:查看本地所有镜像
-
docker pull:获取镜像
-
docker search:搜索镜像
-
docker run:运行镜像,会产生一个容器。
- -i: 交互式操作。
- -t: 终端。
- -d:在后台运行。
--name 命名容器
网络端口映射:
- -P:容器内部端口随机映射到主机的端口
- -p:容器内部端口绑定到指定的主机端口
-
docker rmi:删除镜像
-
创建镜像:
-
从已创建的容器中更新镜像,并提交
- 在运行的容器中使用apt-get update更新镜像
- exit退出镜像
- docker commit提交修改
- 使用 Dockerfile文件 + docker build来创建一个新的镜像
-
-
docker tag:设置镜像标签
容器操作
-
docker ps:查看容器(默认仅显示running的)
-a:显示所有容器
-l:查看最后一次创建的容器
-
docker create:创建容器
-
docker start [容器id]:启动已停止的容器
-
docker stop [容器id]:停止容器
-
docker restart [容器id]:重启容器
-
进入容器:
- docker attach
- docker exec:推荐,因为退出容器终端,不会导致容器的停止。
-
docker export
-
docker import
-
docker rm:删除容器
-f:强制
-
docker container prune:清理掉所有处于终止状态的容器
prune:修剪、裁剪、精简、缩减
其他命令
-
docker port 【容器id或name】:查看端口的绑定情况
-
docker logs 【id或name】:查看容器内部的标准输出
-f:tail -f的效果
-
docker inspect
docker exec详解
进入容器
docker exec -it 容器名 bash
docker run详解
重点:
-v:绑定一个卷。作用:将宿主机的一个文件和容器内的一个文件绑定,就可以通过修改宿主机中的文件来修改容器中的文件(比如,配置文件) 。
为啥要这样?
因为运行容器中的命令程序要使用容器中的配置文件,比如,redis-server。
容器中没有vi命令,无法修改文件。