Docker
1.1 docker是什么
Docker是基于go语言实现的开源容器项目。利用操作系统本身已有的机制和特性,可以实现远超传统虚拟机的轻量级虚拟化。它是内核级的虚拟化。期望达到使项目运行环境“一次封装,到处运行的目的”
利用docker创建的运行环境叫做docker容器,容器是通过docker镜像创建的,docker镜像文件可以放在私有仓库中,也可以放在公有仓库中
1.2 Docker特点
1.2.1 效率高
用户只需要几分钟,就可以把自己的程序Docker化。Docker依赖于“写时复制”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界。
随后,就可以创建容器来运行应用程序了。大多数Docker容器只需要不到1秒钟即可启动。由于去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。
1.2.2 职责明确
使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而降低那种“开发一切正常,生产出问题”的现象发生。
1.2.3 结构完整
Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。
1.2.4 契合微服务架构
Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。
1.3 Docker和VM的对比
1.3.1 结构区别
1.3.2 应用区别
- Docker:面向内核、软件,docker是秒级别的
- 虚拟机:面向硬件,分钟级别
1.4 Docker 架构
1.4.1 Docker daemon(Docker守护线程)
Docker daemon是一个运行在宿主机(Docker_HOST)的后台进程。我们可以通过Docker客户端与之通信。
1.4.2 Client(Docker客户端)
Docker客户端是Docker的用户界面,它可以接受用户命令和配置标识,并与Docker daemon通信。图中,docker build等都是Docker的相关命令。
1.4.3 Images(Docker镜像)
Docker镜像是一个只读模板,它包含创建Docker容器的说明。它和系统安装光盘有点像 - 我们使用系统安装光盘安装系统,同理,我们使用Docker镜像运行Docker镜像中的程序
1.4.4 Container(容器)
容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。我们可通过Docker API或者CLI命令来启停、移动、删除容器
1.4.5 Registry(仓库)
Docker Registry是一个集中存储与分发镜像的服务。我们构建完Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,我们就需要手动拷贝。此时,我们可借助Docker Registry来避免镜像的手动拷贝
- 一个Docker Registry 可包含多个Docker仓库;
- 每个仓库可包含多个镜像标签;
- 每个标签对应一个Docker镜像
这跟Maven仓库有点类似,如果把Docker Registry比作Maven仓库的话,那么Docker仓库就可理解为某jar包的路径,而镜像标签则可理解为jar包的版本号。
2.Docker安装与启动
2.1 安装
2.1.1 下载docker -ce repo
- 为本地yum提供远程repo信息
curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
- 安装依赖
yum install -y https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
- 安装docker -ce
yum install -y docker-ce
2.2 启动
2.2.1 启动命令
systemctl start docker
2.2.2 查看docker信息
docker info
3.镜像加速器
3.1 镜像加速器配置
默认情况下Docker从Docker Hub上下载镜像资源,但速度很慢,可以通过配置国内的镜像来解决。如:阿里云镜像加速器
- 登录阿里云【https://www.aliyun.com/】,搜索【容器镜像服务】
- 修改daemon.json文件,如下(选择自己linux服务器版本)
- 查看docker状态
3.2 Docker镜像操作
3.2.1 什么是Docker镜像
Docker镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引导系统,即bootfs,这很像典型的Linux、Unix的引导文件系统。Docker用户几乎永远不会和
引导系统有什么交互。
3.2.2 列出Docker镜像
列出docker下的所有镜像
docker images
注意:
- 镜像创建日期不是下载到本地的时间,而是这个镜像的创建时间
- 镜像标签为当前镜像名称的版本号
3.2.3 Docker镜像搜索
- 命令行搜索
- 阿里云控制界面搜索
3.2.4 镜像下载
- 登录 www.docker.com 搜索要下载的服务
- 默认下载最新版本
- 列出镜像
4.Docker 容器操作
可以把容器看成简易版的Lnux环境(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序
4.1 新建容器
docker create [options] 镜像名字或者id[COMMAND][AGR...]
- 查看具体参数
docker create --help
创建容器
docker create -p 3306:3306 --name bao_mysql -e MYSQL_ROOT_PASSWORD=root mysql
-v /opt/docker_datas/conf:/etc/mysql
-v /opt/docker_datas/logs:/var/log/mysql
-v /opt/docker_datas/datas:/var/lib/mysql mysql:5.7.30
- -p 端口映射
- – name 容器名称
- -e 环境变量 MYSQL_ROOT_PASSWORD=root表示设置为当前root用户的密码为root
- -v 为防止容器损坏导致数据丢失,将容器中数据与容器外作映射(容器外目录可自行设置)
4.2启动容器
- 查看容器
- 启动容器
-- 通过容器名称启动
docker start bao_mysql
-- 通过id启动
docker start 2bc75efd3c8e
- 查看启动状态
- 本地连接
4.3停止容器
docker stop 2bc75efd3c8e
4.4 强制杀死进程
docker kill bao_mysql -- 若 docker stop 命令不起作用,或者说容器脱离了docker容器控制时可以使用此命令
4.5 创建并启动容器
docker run -p 3306:3306 --name second_mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.30
4.6 Docker 容器访问
docker exec -i -t bao_mysql /bin/bash
4.7 Docker查看日志
4.8 查看容器中的进程
docker top bao_mysql
4.9 查看容器内部信息
docker inspect bao_mysql
4.10 容器的删除
docker rm bob_mysql
5. Docker File管理
Docker File是用来构建Docker镜像的构建文件,是由一系列命令和参数构成脚本。案例构建一个java工程镜像。
5.1 使用本地命令构建镜像
5.1.1下载JDK镜像
一般使用openjdk镜像
docker search openjdk
docker pull openjdk
5.1.2 创建构建文件
要构建到镜像汇总的jar文件需要和buildFile处于同一个目录。