docker
docker安装
1 | 1、yum 包更新到最新 |
docker架构
- daemon: docker在机器上以守护进程(后台运行的进程)的形式存在,客户端发送docker命令操作该进程
- image(镜像): 镜像就是一堆只读层(read-only layer)的统一视角,不可变
- container:(容器): 容器 = 镜像 + 读写层,关系就像类与对象的关系;一个运行态容器(running container)被定义为一个可读写的统一文件系统加上隔离的进程空间和包含其中的进程,注意,一个容器只能有一个进程隔离空间
- repository: 仓库,类似maven仓库,也有公共仓库和私有仓库
docker镜像加速
- 打开阿里云
- 搜索容器镜像服务
- 找到镜像加速器,复制粘贴配置即可
docker命令
服务相关命令
启动docker服务
1
systemctl start docker
停止docker服务
1
systemctl stop docker
重启docker服务
1
systemctl restart docker
查看docker服务状态
1
systemctl status docker
设置开机启动docker服务
1
systemctl enable docker
镜像相关命令
查看镜像
1
2
3
41、 查看所有镜像详细信息
docker images
2、 查看所有镜像id
docker images -q搜索镜像(查看有哪些可以下载)
1
docker search
拉取,下载镜像
1
docker pull
删除镜像
1
2
3
41、删除单个镜像
docker rmi <imageid>|<repository:tag>
2、 删除所有镜像
docker rmi `docker images -q`
容器相关命令
创建并运行容器
1
2
3
4
5
6
7
8
9
10
11
12
13docker run
####### 可配置参数
-i 保持容器运行
-t 分配一个终端,exit容器就会关闭
--name 起名
--expose 公开一个或多个端口
-d 以(守护)后台模式运行容器,并打印容器id,进入终端需要输入 docker exec -it <name> /bin/bash,exit容器不会关闭
-l 添加元数据
-p <主机port>:<容器port> 将容器端口映射到主机端口
-P 随机映射端口
--rm 当容器退出时自动移除这个容器
centos:7 <镜像名>:<tag>/<imageid>
/bin/bash 初始化运行命令查看正在运行的容器
1
docker ps
查看全部容器
1
docker ps -a
启动容器
1
docker start
停止容器
1
docker stop
删除容器
1
docker rm
删除所有不在运行的容器
1
docker rm `docker ps -aq`
查看容器信息
1
docker inspect
docker容器的数据卷
数据卷概念
思考:
- Docker容器删除后,容器中产生的数据是否会随之销毁?
- Docker容器与外部机器是否可以直接交换文件?
- 容器之间是否可以进行数据交互?
数据卷:
- 数据卷是宿主机中的一个目录或文件
- 当容器目录和数据卷目录绑定后,对方的修改会立即同步
- 一个数据卷可以被多个容器同时挂载
- 一个容器也可以被挂载多个数据卷
注意事项:
- 目录必须是绝对路径
- 如果目录不存在,会自动创建
作用:
- 容器数据持久化
- 外部机器和容器间接通信
- 容器之间数据交换
配置数据卷
1 | docker run -it --name=test -v /root/data:/root/data centos:7 |
数据卷容器
多容器进行数据交换
- 多个容器挂载同一个数据卷
- 数据卷容器
配置数据卷容器
1 | 1、 创建启动c3数据卷容器,使用-v参数设置数据卷 |
docker应用部署
mysql部署
1 | 1、搜索mysql镜像 |
dockerfile
镜像原理
思考:
- docker镜像的本质是什么?
- docker中一个centos镜像为什么只有200M,而一个centos操作系统的iso文件要几个G?
- docker中一个tomcat镜像为什么有500M,而tomcat的安装包才70多M?
docker镜像是由特殊的文件系统叠加而成
最底端是bootfs,并使用宿主机的bootfs
第二层是root文件系统rootfs,称为base image
然后再往上可以叠加其他的镜像文件
统一文件系统(Union File System)技术能够将不同层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统
一个镜像可以放在另一个镜像的上面,位于下面的镜像称为父镜像,最底部的镜像称为基础镜像
当从一个镜像启动容器时,docker会在最顶层加载一个读写文件系统作为容器
镜像制作
容器转为镜像
1 | docker commit 容器id 镜像名称:版本号 |
dockerfile概念
- dockerfile是一个文本文件
- 每一条指令构建一层,基于基础镜像,最终构建成一个新的镜像
dockerfile制作
1 | 1、定义父镜像: FROM centos:7 |
springboot项目部署
1 | 1、制作父镜像: FROM java:8 |
docker compose
docker compose概念
docker compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。使用步骤:
- 利用dockerfile定义运行环境镜像
- 使用docker-compose.yml定义组成应用的各服务
- 运行docker-compose up启动应用