Docker基础知识
目录
什么是Docker?
Docker与虚拟主机的区别?
Docker的最大优点?
Docker安装
Docker的核心组件
Docker Container隔离机制
Docker中的网络模式
Docker的持久化机制
Docker常用命令
什么是Docker?
- 通俗地讲,Docker 类似于集装箱。在一艘大船上,各种货物要想被整齐摆放并且相互不受到影响,我们就需要把各种货物进行集装箱标准化。
- Docker 要做的就是把各种软件打包成一个集装箱(镜像),然后分发,且在运行的时候可以相互隔离。
Docker与虚拟主机的区别?
- 虚拟主机创建时必须指定CPU、内存、磁盘的大小,这些是固定的,不能动态分配;
- 而Docker可以动态申请资源。
Docker的最大优点?
- Docker 镜像解决了环境打包的问题,它直接打包了应用运行所需要的整个“操作系统”,而且不会出现任何兼容性问题,它赋予了本地环境和云端环境无差别的能力,这样避免了用户通过“试错”来匹配不同环境之间差异的痛苦过程, 这便是 Docker 的精髓。
- 它通过简单的 Dockerfile 来描述整个环境,使开发者可以随时随地构建无差别的镜像,方便了镜像的分发和传播。相较于以往通过光盘、U盘、ISO文件等方式进行环境的拷贝复制,Docker镜像无疑把开发者体验提高到了前所未有的高度。这也是 Docker 风靡全球的一个重要原因。
Docker安装
https://docs.docker.com/engine/install/centos/
Docker的核心组件
- Container:运行的每一个应用相当于一个Container,由对应的Image模板创建,Container相当于一个小型Linux,在Centos中通过namespace隔离;
- Image:包含了容器运行时所需要的所有基础文件和配置信息,如果将Image比喻为Class,则Container为Class创建的Object;
- Docker engine:Docker的执行引擎;
- Docker hub:用于存储和分发Image,分为共有仓库和私有仓库。
Docker Container隔离机制
Docker 容器则是通过 Linux 内核的 Namespace 技术实现了文件系统、进程、设备以及网络的隔离,然后再通过 Cgroups 对 CPU、 内存等资源进行限制,最终实现了容器之间相互不受影响。
- Namespace:用于资源隔离,如进程、网络等;
- CGroup:用来做资源限制,如内存、cpu限制;
- UnionFileSystem:用来做image和container分层,每一层可以被共享。例如两个业务镜像都是基于 CentOS 7 镜像构建的,那么这两个业务镜像在物理机上只需要存储一次 CentOS 7 这个基础镜像即可,从而节省大量存储空间。
Docker中的网络模式
Libnetwork常见网络模式 | 作用 | 场景 |
---|---|---|
null空间网络模式 | 不提供任何容器网络 | 出于安全考虑,通过一种隔离的网络环境处理一些保密任务 |
bridage桥接模式(默认) | 使容器间可以互通 | 容器间需要网络互通 |
host主机网络模式 | 使容器内的程序可以使用主机的网络 | 容器需要控制主机网络或通过主机网络提供服务 |
container网络模式 | 将两个容器放到同一网络空间中,可以直接通过localhost本地访问 | 两个容器直接通过localhost访问,一般用于网络接管或代理 |
Docker的持久化机制
- Docker通过volume技术将container中的数据持久化到宿主机;
- volume的实现原理是在主机的 /var/lib/docker/volumes 目录下,根据volume的名称创建相应的目录,然后在每个volume的目录下创建 _data 目录,在容器启动时如果使用 —mount 参数,Docker 会把主机上的目录直接映射到容器的指定目录下,实现数据持久化。
Docker常用命令
docker engine
# 启动docker
sudo systemctl start docker
仓库
# 登录阿里云个人仓库
docker login --username=白与黑0319 registry.cn-hangzhou.aliyuncs.com
# 给要推送的image打tag
docker tag f9d940b74ba5 registry.cn-hangzhou.aliyuncs.com/hujinyang/onlylove-image:v1.0
# push推送镜像到指定仓库和命名空间下
docker push registry.cn-hangzhou.aliyuncs.com/hujinyang/onlylove-image:v1.0
# pull image从指定仓库和命名空间
docker pull registry.cn-hangzhou.aliyuncs.com/hujinyang/onlylove-image:v1.0
image
# 查看docker镜像
docker images
# 拉取镜像
docker pull tomcat
# 重命名镜像
docker tag tomcat mytomcat
# 删除镜像
docker rmi mytomcat
# 创建image有两种方式:
# 1、docker build dockerfile【推荐的方式:可以明确过程】
docker build -t onlylove-image .
# 2、docker commit【将运行中的容器提交为镜像,不确定过程】
docker commit [container] [newimage]
container
# 查看运行的容器
docker ps
# 查看全部container,包括exited的容器,并列出容器的大小
docker ps -as
# 通过image创建容器并启动
docker run -d --name my-tomcat -p 8888:8080 tomcat
# 直接启动现有容器
docker start my-tomcat
# 进入容器
docker exec -it my-tomcat sh
# 停止容器
docker stop my-tomcat
# 删除容器
docker rm my-tomcat
# 删除所有容器
docker rm -f $(docker ps -a))
# 查看所有容器的ip
docker inspect -f '{
{.Name}} - {
{.NetworkSettings.IPAddress }}' $(docker ps -aq)
构建自定义镜像并启动
#1.定义dockerfile
vim dockerfile
# 输入内容保存
FROM openjdk:8
ADD ./4528102_www.5qel4c.cn.pfx /
COPY onlylove.jar onlylove-image.jar
CMD ["java","-jar","onlylove-image.jar"]
#2.构建镜像
docker build -t onlylove-image .
#3.根据镜像创建容器
docker run -d --name onlylove -p 8081:8081 onlylove-image
#4.查看日志
docker logs onlylove
docker资源查看与资源限制
# 查看容器使用状态
docker stats onlylove
# --memory 100M :内存限制
# --cpu-shares 10 :CPU权重
docker run -d --name my-tomcat --memory 100M --cpu-shares 10 -p 8888:8080 tomcat
还没有评论,来说两句吧...