Docker
一、Docker
1、docker是什么
docker是一个工具,是一款软件
2、docker可以干什么
可以用它来安装软件|应用、安装mysql\redis\nginx... ,甚至可以用来部署项目。
3、为什么用来docker来安装软件
1、docker是使用沙箱机制来解决软件|应用之间互相干扰问题。
2、docker把软件|应用使用的系统函数库和用到的依赖,一起打包,做成一个镜像。
3、这些做出来的镜像,完美的匹配操作系统,因为他把用到的系统函数也一起打包了。
3.1 MySQL安装程序+Linux的函数库+用到的其他依赖 ==> 镜像文件
这些镜像文件都放在docker的仓库里
3.2 只要在你的Linux系统里面,使用docker来拉取这个镜像即可。自己安装即可。
4、可以用docker来部署项目|应用
4.1 自定义自己的镜像,把项目、依赖、系统函数打包成镜像。
4.2 部署集群就很方便
二、Docker和虚拟机的差异
1、docker是一个系统进程;docker体积小,启动速度快、性能好。
2、虚拟机是在操作系统中的操作系统;虚拟机体积大、启动速度慢、性能一般。
三、Docker中名称的简介
1、镜像(Image)
Docker将应用程序机器所需要的依赖、函数库、环境、配置等文件打包在其一起,称为镜像。
2、容器(Container)
镜像中的应用程序运行后形成的进程就是容器。
只是Docker会给容器做隔离,对外不可见。
3、DockerHub
DockerHub是一个Docker镜像的托管平台(类似的有阿里云镜像服务)。也被称为Docker Registry,
其实就是一个镜像仓库。
4、Docker架构
1. Docker是一个CS架构的程序。
1.1 服务端(server): Docker守护进程,负责处理Docker指令、管理镜像、容器等。
1.2 客户端(client):通过命令或RestAPI向Docker服务端发送指令,可以在本地或远程向服务端发送。
四、Docker基本操作
1、镜像操作
1、语法
1、镜像名称一般分为两部分组成--> [repository]:[tag] --> 列如mysql:5.7
2、在没指定tag时,默认latest,代表最新版本的镜像。
2、拉取镜像
docker pull redis或redis:2.7.9
3、查看镜像
docker images
4、把镜像打成一个包
docker save -o xxx.tar xxx
xxx --> 镜像名称
5、删除镜像
docker rmi xxx或镜像id
强制删除
docker rmi -f xxx
6、将镜像压缩包还原给镜像(将压缩包导入成镜像)
docker load -i xxx.tar
2、容器基本操作
1、语法
1、docker run --> 创建并运行一个容器
2、--name --> 给容器起名字
3、-p : --> 将主机端口与容器端口映射,冒号左侧是主机端口,右侧是容器端口
4、-d 后台运行容器
5、nginx: 镜像名称
2、创建一个容器
docker run --name mynginx -p 880:80 -d nginx
3、查看所有运行的容器以及状态
docker ps -a
-a --> 查看所有运行
4、停止运行容器
docker stop mynginx
5、启动容器
docker start mynginx
6、暂停容器
docker pause mynginx
7、停止暂停容器
docker unpause mynginx
8、查看容器日志信息
docker logs mynginx
docker logs -f mynginx --> -f 实时查看日志信息
9、进入容器内部
1、语法
1、docker exec --> 进入容器内部
2、-it --> 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
3、name --> 要进入容器的名称
4、bash --> 进入容器后执行的命令,bash是一个Linux终端交互命令
9.1 进入容器
docker exec -it mynginx bash
9.2 进入nginx的HTML所在目录
cd /usr/share/nginx/html/
9.3 修改idex.html的内容
sed -i 's#Welcome to nginx# hellow world#g' index.html
sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html
10、删除容器
docker rm mynginx
docker rm -f mynginx --> -f强制删除
11、数据持久化
持久化
1、RBD --> 每满多少时间,有多少个key发生变化,开始持久化。
2、AOF --> 每秒的持久化,每次操作的持久化。
docker run --name myredis -p 7379:6379 -d redis redis-server --appendonly yes
3、数据卷(容器数据管理)
1、解决容器与数据耦合的问题
2、数据卷(volume) 是一个虚拟的目录,指向主机文件系统中的某个目录。
3、数据卷的作用
将容器与数据分离、解耦合,方便操作容器内的数据,保证数据安全。
容器与数据耦合的问题
1. 不便于修改: 当我们要修改Nginx的HTML内部时,需要进入容器内部修改,很不方便。
2. 数据不可复用: 在容器内的修改对外是不可见的,所有修改对新建的容器是不可服用的。
3. 升级维护困难: 数据在容器内,如果要升级容器必然要删除旧容器,所有的数据都要跟着删除。
数据挂载与目录直接挂载
数据卷挂载耦合度低,由docker来管理目录,但是目录较深,不好找。
目录挂载耦合度高,需要我们自己管理目录,目录容易查找。
1、数据卷操作基本语法
1、docker volume --> 命令是数据卷操作。
2、create --> 创建一个volume
3、inspect --> 显示一个或多个volume的信息
4、ls --> 列出所有的volume
5、prune --> 删除未使用的volume
6、rm --> 删除一个或多个指定的volume
2、创建数据卷
docker volume create html
3、查看所有数据卷
docker volume ls
4、查看数据卷详细信息
docker volume inspect html
5、删除数据卷
docker volume rm aa
6、删除所有未使用的数据卷
docker volume prune
4、数据卷–挂载数据卷
1、挂载数据卷
数据卷的挂载或映射,只能在创建容器的时候设置。
1、docker run --> 创建并运行容器
2、-- name mn --> 给容器起一个名字叫mn
3、-v html:/root/html --> 把html数据卷挂载到容器内的/root/html之个目录中
4、 -p 8080:80 --> 把主机的8080端口映射到容器内的80端口
5、nginx --> 镜像名称
docker run --name mynginx -v html:/usr/share/nginx/html -p 9090:80 -d nginx
2、目录直接挂载
1、语法
1、-v [主机目录]:[容器目录]
2、-v [主机文件]:[容器内文件]
1、将xxx.tar弄成镜像
docker load -i xxx.tar
2、创建映射容器
docker run --name mymysql -p 23306:3306 \
-v /tmp/mysql/data:/var/lib/mysql \
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7.25
3、测试
mysql -h 192.168.211.128 -P 23306 -u root -p