Docker
一、Docker介绍
1. 什么是Docker
Docker是轻量级的虚拟机产品,我们在使用Docker的时候,它并不会为每个虚拟化实例(容器) 创建完整的虚拟硬件环境 ,而是为每个实例,虚拟化少量的硬件环境(例如网卡)。这些虚拟化实例直接共享使用Linux系统的CPU、内存和硬盘资源。因此说,采用Docker的Linux主机,可以轻松创建几十个容器。
- 所有的Docker容器都是建立在Linux系统之上的,在Linux环境中安装Docker程序。
- Docker 是一个容器技术,用于解决环境的问题,主要用来部署项目,迁移环境。
- 让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中
实际应用场景:将相同的开发环境移植到测试环境在移植到生产环境。
开发环境打包镜像、测试环境安装、生产环境安装
这样可以保证:开发、测试、生产的环境一致。
Docker是一个客户端-服务端(C/S)架构程序
容器就相当于一个集装箱,集装箱就相当于虚拟机。也就是一个容器就是一个Linux系统
镜像不能随便删,但是容器可以,因为容器是基于镜像构建的。
2. 为什么要使用Docker
- Docker容器之间是相互隔离的,我们可以在容器中部署程序的同时,不用担心跟其他容器产生冲突。
- Docker能为我们提供快速化部署。比如说有人在网上提供了PHP镜像,里面包括了PHP环境、Apache服务器和MySQL数据库,我们从网上下载镜像,然后创建容器,就直接可以部署PHP项目了
3. 镜像和容器
Docker组件:
容器时基于镜像启动的。
Docker为了最大化的共享资源,减少资源浪费,创造出了镜像技术
- 镜像是虚拟实例之间相同的部分(相当于Java中的类)
- 差异化的部分叫做容器(容器基于镜像构建相同的部分,差异的部分构建进容器)
- 镜像对于容器是只读的
容器创建的流程:
-
先从远程仓库把镜像文件拉取到Linux本地
-
本地根据镜像文件创建容器
二、Docker安装、以及相关的操作
0. 关闭SELINUX
SELINUX是CentOS自带的安全服务,因为晦涩难用,并且跟很多程序冲突,所以强烈建议大家关闭这个服务
- 找到
/etc/sysconfig/selinux
文件,把其中的SELINUX
设置为disabled
,保存文件之后重启CentOS系统。
// 1.利用vi编辑器编辑文件
vi /etc/sysconfig/selinux
// 2. 点击i编辑文件
// 3. 编辑完成之后点击ESC
// 4. :w 然后回车保存文件
// 5. :q 退出vi编辑器
// 6. reboot 重新启动
1. 安装命令
安装在CentOS7中:
// 安装Docker
yum install docker -y
docker -v
Docker在线安装是在国外的,可以设置加速器,以腾讯云主机为例
- 打开 /etc/docker/daemon.json 修改,重新配置镜像
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
// 修改完成之后,重启docker
service docker restart
2. 管理命令
镜像相关操作:
// 启动和关闭Docker,相当于对服务端的操作
systemctl start docker
systemctl stop docker
systemctl restart docker
或者
service docker start
service docker stop
service docker restart
// 查看 Docker信息
docker info
// 查看电脑上都多少个镜像文件
docker images
// 搜索镜像(远程仓库中的镜像),也可以在官网dockerhub上查询
docker search 镜像名称
**************************************************************************************************
// 拉取镜像,也可以在拉取镜像的时候指定版本
docker pull 镜像名称
docker pull mysql:5.7
**************************************************************************************************
// 删除镜像,不要随便用
docker rmi 镜像的id(或者镜像的名称)
// 如果不知道指令意思,使用--help
docker images --help
// 配置镜像地址
编辑该文件:vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}
容器相关操作(例子中创建的是交互式容器,退出容器,容器关闭)
// 查看容器,即查看谁在运行当中
docker ps :显示正在运行的容器
docker ps -a :显示所有的容器
可以使用 dcoker ps --help 查看
// 创建和启动容器
创建容器命令:docker run
-i:交互式操作
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
–name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。类似于Vue中的双向绑定。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
// 例子,centos:7,表示指定的镜像名称。/bin/bash,表示进入命令行
***********************************************************************************************************
// 此时会进入容器centsos1,centos1也是一个Linux系统
docker -i -t --name=centos1 centos:7 /bin/bash
// 推出容器,这是一种交互式容器,退出容器容器就关闭了
exit
创建守护式容器 (重要)
// 创建并运行守护式容器,创建后不会进入容器。容器后台自动运行
docker run -di --name=mycentos2 centos:7
// 进入容器,连接到容器的内部,/bin/bash:表示进入命令行。
docker exec -it 容器名称 /bin/bash
docker exec -it centos /bin/bash :表示进入到centos这个容器的命令行
// 例子:进入到rabbitmq中,开启管理界面
rabbitmq-plugins enable rabbitmq_management
// 退出容器
exit
// 停止容器
docker stop 容器名称
docker start 容器名称
// 删除容器
docker rm 容器名
docker rm -p 容器名 强制删除
2.1 文件的拷贝(该命令一定要在宿主机执行)
拷贝到容器内部
docker cp 需要拷贝的文件或目录 容器名称:容器目录
容器内部拷贝出去
docker cp 容器名称:容器目录 需要拷贝的文件或目录
2.2 目录挂载(映射)
类似于Vue中的双向绑定,修改内容同步。看上去是同一个,其实就是宿主机的东西。
创建容器 添加-v参数 后边为 宿主机目录:容器目录
目的:能够在宿主机中对容器中文件内容的修改。可以多次使用-v指令
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
查看容器的信息
docker inspect 容器名称
2.3 查看WEB应用程序日志
docker logs [ID或者名字] 可以查看容器内部的标准输出。
显示:
docker logs -f bf08b7f2cd89
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
192.168.239.1 - - [09/May/2016 16:30:37] "GET / HTTP/1.1" 200 -
192.168.239.1 - - [09/May/2016 16:30:37] "GET /favicon.ico HTTP/1.1" 404 -
2.4 查看容器内部的进程
docker top 容器名称
UID PID PPID ... TIME CMD
root 23245 23228 ... 00:00:00 python app.py
2.5 自定义一个镜像
两种方式:
- 从已经创建的容器中更新镜像,并且提交这个镜像
- 使用 Dockerfile 指令来创建一个新的镜像
- 更新镜像
略
- 构建镜像
3. Docker Dockerfile
- Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
4. Docker Compose
- Compose 是用于定义和运行多容器 Docker 应用程序的工具
- 通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。
- 然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
5. Docker Machine
6. 导入镜像
导入镜像文件到root目录:例如 face.tar.gz
相关命令
#导入镜像文件
docker load < face.tar.gz
#查看安装的镜像
docker images
#删除镜像
docker rmi face
#查看容器运行状态
docker ps -a
#进入到node容器
// -t:表示一会进入容器,要用命令行的方式和容器进行交互
// node:表示容器的名字(根据实际情况写)
// bash:一命令行的形式交互
docker exec -it node bash
7. 例子:安装RabbitMQ镜像
1. root目录上传镜像
2. 创建RabbitMQ容器~
// 镜像文件导入到Docker环境中
docker load < rabbitmq.tar.gz
// run:表示运行容器
// -d:表示在后端自动挂起运行,-it:为容器保留交互的方式,
// -p:开放两个端口,--name:容器的名字,rabbitmq:镜像文件的名字
docker run -it -d --name mq -p 15672:15672 -p 5672:5672 rabbitmq:management
3. 访问
需要手动开启管理页面的访问权限
http://ip:15672/
8. Dcoker部署MySQl
// 1.拉取镜像
docker pull mysql
// 2.创建容器,宿主机和容器也要有一个端口映射关系。
docker run -di --name=pinyougou_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
允许远程授权登录(mysql默认是不允许远程设备的访问的)
// *.* 表示任意数据库任意的表,%表示任意的远程电脑都可以来连。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
9. Tomcat部署
可以上Dockerhub上查看
拉取Tomcat
docker pull tomcat:7-jre8
创建Toncat容器
docker run -di --name=pinyougou_tomcat -p 9100:8080 tomcat:7-jre8
10. redis和nginx的部署
nginx
docker pull nginx
docker run -di --name=pinyougou_nginx -p 80:80 nginx
redis
docker pull redis
docker run -di --name=pinyougou_redis -p 6379:6379 redis
客户端连接访问,使用redis
cd /usr/local/bin
./redis-cli
三、Docker 备份和迁移
6.1容器保存为镜像
我们可以通过以下命令将容器保存为镜像
docker commit pinyougou_nginx mynginx
pinyougou_nginx是容器名称
mynginx是新的镜像名称
此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器
6.2镜像备份
docker save -o mynginx.tar mynginx
-o 输出到的文件
执行后,运行ls命令即可看到打成的tar包.
6.3镜像恢复与迁移
首先我们先删除掉mynginx镜像,然后执行命令进行恢复
docker load -i mynginx.tar
-i 输入的文件
执行后再次查看镜像,可以看到镜像已经恢复
再创建容器。
u_redis -p 6379:6379 redis
客户端连接访问,使用redis
```json
cd /usr/local/bin
./redis-cli
三、Docker 备份和迁移
6.1容器保存为镜像
我们可以通过以下命令将容器保存为镜像
docker commit pinyougou_nginx mynginx
pinyougou_nginx是容器名称
mynginx是新的镜像名称
此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器
6.2镜像备份
docker save -o mynginx.tar mynginx
-o 输出到的文件
执行后,运行ls命令即可看到打成的tar包.
6.3镜像恢复与迁移
首先我们先删除掉mynginx镜像,然后执行命令进行恢复
docker load -i mynginx.tar
-i 输入的文件
执行后再次查看镜像,可以看到镜像已经恢复
再创建容器。