1.Docker技术介绍
Docker是一个虚拟化平台( 官网https://www.docker.com/),诞生于 2013 年初,基于 Google 公司的 Go 语言进行实现。可以通过虚拟化方式,为应用提供可运行的容器。基于这种方式,可更快地打包、测试以及部署应用程序。
1.1Docker 核心对象
1.1.1 镜像(Image)
Docker 镜像是一个特殊的文件系统(https://hub.docker.com/),除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。例如JDK镜像、Centos镜像、MySQL镜像等,可以暂时先将其理解为一个安装程序。
1.1.2 容器(Container)
Docker容器可以将其理解为一个运行镜像的载体,镜像(Image)和容器(Container)的关系,就像是光盘和光驱。容器基于镜像创建、启动,然后运行镜像的中的文件。
1.2Docker 应用架构分析
Docker 是一种Client/Server架构的应用程序,
~Docker Host是我们的docker宿主机(就是安装了docker的操作系统)
~Registry是docker拉取镜像的远程仓库,提供大量的镜像供下载,下载完成之后保存在Images中
~Docker Daemon是docker的服务线程,处理Docker客户端命令。
~Images 是Docker本地的镜像仓库,可以通过docker images查看镜像文件。
docker pull 执行过程:
1)客户端将指令发送给docker daemon 2)docker daemon 先检查本地images中有没有相关的镜像 3)如果本地没有相关的镜像,则向镜像服务器请求,将远程镜像下载到本地
docker run 执行过程:
检查本地是否存在指定的镜像,不存在就从公有仓库下载 利用镜像创建并启动一个容器 分配一个文件系(简版linux系统),并在只读的镜像层外面挂载一层可读写层 从宿主机配置的网桥接口中桥接一个虚拟接口到容器中去 从地址池配置一个 ip 地址给容器 执行用户指定的应用程序
2 .Docker服务基本操作
2.1启动docker服务
systemctl start docker
2.2 查看Docker状态
systemctl status docker
2.3 设置Docker开机自启
systemctl enable docker
2.4 禁用Docker开机自启
systemctl disable docker
2.5 重新启动Docker服务
systemctl restart docker
2.6 查看Docker信息
docker info
查看docker info中具体key的信息,例如
docker info | grep 'Docker Root Dir:'
2.7 停止docker服务
systemctl stop docker
2.8 Docker镜像加速
直接生成文件 daemon.json
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
EOF
3.Docker镜像操作实践
3.1下载镜像
docker pull 镜像名
3.2 浏览镜像文件
docker images
3.3查看镜像详情
docker inspect 镜像名或镜像id
docker inspect hello-world
docker images 查看所有镜像文件列表
3.4 查看镜像历史
一个镜像是由多个层(layer)组成的,那么,我们要如何知道各个层的具体内容呢?通过 docker history 命令,可以列出各个层(layer)的创建信息,例如:
docker history 镜像名或镜像id
docker history hello-world
3.5 导出镜像文件
镜像导出(linux系统中的镜像文件下载到本地-例如window)
docker save hello-world | gzip > hello-world.tar.gz
3.6 删除镜像文件
docker image rm hello-world
3.7 导入镜像操作
docker load < hello-world.tar.gz
3.8 运行镜像文件
docker run hello-world 运行镜像文件
docker build -t jdk:8 创建镜像文件
doclker push 上传镜像文件
4.Docker 容器操作
4.1 创建并启动容器
docker run -it xxxx bash #创建并启动
docker run -it centos:7 bash
-d后台执行 -p 定义端口 , -e环境配置 -v挂载mulv
docker container start 802 #启动已存在容器
1)xxxx - 镜像名, 或 image id 的前几位,
2)-it 这是两个参数(-i表示交互式操作, -t 表示终端)
3) bash 表示进入操作终端,基于交互式进行相关操作(例如执行linux相关指令
4.2 查看Docker中的容器
docker ps # 查看docker运行中的容器
docker ps -a #查看docker运行中的所有容器
docker container logs 802 # 查看容器日志信息 802容器id
docker inspect 容器id #查看指定容器信息
4.3 进入指定容器
docker exec -it 802 bash #802为容器id
停止或重启容器
docker container start 802 #启动已存在容器
docker container stop 802 #停止容器
docker container restart 802 #重新启动容器
4.4 退出容器
exit
4.5 删除容器
docker container rm 802 #802为容器id
docker container prune #清理所有的状态容器
5.数据卷
5.1介绍
在容器中管理数据主要有两种方式:
挂载主机目录 (Bind mounts)-最常用 (docker run -v 宿主机目录:容器目录)
数据卷(Volumes)
数据卷是一个可供一个或多个容器使用的特殊目录,可以在容器之间共享和重用,默认会一直存在,即使容器被删除。
5.2 创建数据卷
docker volume create container-vol
5.3 查看所有数据卷
docker volumes ls
5.4 查看指定 数据卷 的信息
docker volume inspect container-vol
5.5 启动挂载数据卷的容器
docker run -it -v container-vol:/root centos:7 bash
5.6 删除数据卷
docker volume rm container-vol
5.7清理无主数据卷
docker volume prune
5.8 挂载主机目录
docker run -it -v /usr/app:/opt/app centos:7 bash
其中:
1)/usr/app:为宿主机目录
2)/opt/app: 为启动容器的一个目录
3)-v 用于指定挂载目录,如果本地目录(宿主机目录)不存在, Docker 会自动为你按照挂载目录进行目录的创建。
5.9 查看挂载目录信息
docker inspect 91a #91a 为容器id
6.网络操作
6.1 创建
docker network create t-net 网络名称