Docker基础

Docker

一、Docker介绍

1. 什么是Docker

Docker是轻量级的虚拟机产品,我们在使用Docker的时候,它并不会为每个虚拟化实例(容器) 创建完整的虚拟硬件环境 ,而是为每个实例,虚拟化少量的硬件环境(例如网卡)。这些虚拟化实例直接共享使用Linux系统的CPU、内存和硬盘资源。因此说,采用Docker的Linux主机,可以轻松创建几十个容器。

  • 所有的Docker容器都是建立在Linux系统之上的,在Linux环境中安装Docker程序。
  • Docker 是一个容器技术,用于解决环境的问题,主要用来部署项目,迁移环境。
  • 让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中

在这里插入图片描述


实际应用场景:将相同的开发环境移植到测试环境在移植到生产环境。

开发环境打包镜像、测试环境安装、生产环境安装

这样可以保证:开发、测试、生产的环境一致。

在这里插入图片描述


Docker是一个客户端-服务端(C/S)架构程序

容器就相当于一个集装箱,集装箱就相当于虚拟机。也就是一个容器就是一个Linux系统

镜像不能随便删,但是容器可以,因为容器是基于镜像构建的。

2. 为什么要使用Docker

  1. Docker容器之间是相互隔离的,我们可以在容器中部署程序的同时,不用担心跟其他容器产生冲突。
  2. Docker能为我们提供快速化部署。比如说有人在网上提供了PHP镜像,里面包括了PHP环境、Apache服务器和MySQL数据库,我们从网上下载镜像,然后创建容器,就直接可以部署PHP项目了

3. 镜像和容器

Docker组件:

  • Docker客户端和服务器
  • Docker镜像
    • 镜像是构建Docker的基石。用户基于镜像来运行自己的容器
  • Registry(中央仓库)
    • Docker用Registry来保存用户构建的镜像
  • Docker容器
    • Docker可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可

容器时基于镜像启动的。

Docker为了最大化的共享资源,减少资源浪费,创造出了镜像技术

  • 镜像是虚拟实例之间相同的部分(相当于Java中的类)
  • 差异化的部分叫做容器(容器基于镜像构建相同的部分,差异的部分构建进容器)
  • 镜像对于容器是只读的

容器创建的流程:

  1. 先从远程仓库把镜像文件拉取到Linux本地

  2. 本地根据镜像文件创建容器

二、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 指令来创建一个新的镜像
  1. 更新镜像

  1. 构建镜像

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 输入的文件

执行后再次查看镜像,可以看到镜像已经恢复

再创建容器。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值