首页 > 其他 > 详细

Docker

时间:2021-09-06 21:45:35      阅读:19      评论:0      收藏:0      [点我收藏+]

 1. Docker 简介

1.1 虚拟化技术

  虚拟化技术是一种计算机资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来。虚拟化技术打破了计算机实体结构间的,不可切割的障碍。使用户可以比原本的组态更好的方式,来应用这些资源。

技术分享图片

 

 

 

  • 主要作用:
    • 高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件
    • 软件跨环境迁移问题
    • 在一台主机上实现多个操作系统,关键技术就是硬件的虚拟化

1.2 什么是Docker

Docker 是一个开源的应用容器引擎,诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc

Docker 可以让开发者打包他们的应用,以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。Docker容器是完全使用沙箱机制,相互隔离,性能开销也极低。

Docker通俗的讲是服务器中高性能的虚拟机,可以将一台物理机虚拟N多台虚拟机的机器,互相之间隔离,互不影响

  • 特点
    • 标准化交付:Docker将应用打包成标准化单元,用于交付、部署;
    • 轻量级:容器及包含了软件运行所需的所有环境,而且非常轻量级
    • 高可靠:容器化的应用程序,可以在任何Linux环境中始终如一的运行
    • 隔离性:容器化的应用程序,具备隔离性,这样多团队可以共享同一Linux系统资源
    技术分享图片
  • 容器与虚拟机
    • 相同:容器和虚拟机都是虚拟化技术,具备资源隔离和分配优势
    • Docker是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
    • 不同:
      • Docker虚拟化的是操作系统,虚拟机虚拟化的是硬件
      • 传统虚拟机可以运行不同的操作系统,Docker主要运行同一类操作系统(Linux)
      • 虚拟机是携带操作系统,本身很小的应用程序却因为携带了操作系统而变得非常大,很笨重。Docker是不携带操作系统的,所以Docker的应用就非常的轻巧
      技术分享图片
特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生硬件 弱鸡
系统支持量 单机可跑几十个容器 单机几个虚拟OS
运行环境 主要在Linux 主要在window

1.3 Docker 基本概念

宿主机:安装Docker守护进程的Linux服务器,称之为宿主机;

镜像(Image):Docker 镜像,就相当于是一个 root 文件系统。除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。

容器(Container):镜像运行之后的实体,镜像和容器的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

仓库(Repository):仓库可看成一个镜像控制中心,用来保存镜像。

  • Docker镜像,是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。
  • 镜像不包含任何动态数据,其内容在构建之后也不会被改变。
  • 负责对Docker镜像进行管理的,是Docker Registry服务(类似仓库管理员)。Docker Registry服务对镜像的管理是非常严格的,最常使用的Registry公开服务,是官方的Docker Hub,这也是默认的 Registry,并拥有大量的高质量
    的官方镜像。

技术分享图片

 

 

2.Docker安装与启动

  • 本地电脑安装虚拟机,虚拟机搭配Linux操作系统,在Linux操作系统上安装Docker容器。Docker需要从镜像仓库下载镜像,需要联网。
    提供的虚拟机网卡地址:192.168.200.128;用户名root;密码lagou
  • 准备工作:确保Linux系统能够连接网络
    • 调整虚拟网络编辑器:
      • 桥接模式的虚拟机,可以直接和外面通信
      • NAT模式的虚拟机,向外面发送点的信件都得交给主机以主机的名义转发出去,NAT专门负责这些虚拟机的发信、收信事宜
      • 仅主机模式的虚拟机,能够保障我们在拔掉网线的情况下继续连接我们的虚拟机,不依靠公网连接,而是依靠物理机和虚拟机的关系连接。在断网的情况下,利用这个模式,我们可以继续连接虚拟机
      技术分享图片
    • VMware Network Adapter VMnet8网卡设置
    技术分享图片
    • 打开虚拟机文件:提供的虚拟机文件已经安装了CentOS7,并且在CentOS7上已经安装了Docker环境,IP地址:
      192.168.200.128
    • 连接到虚拟机
  • docker安装:Docker官方建议在Ubuntu中安装Docker软件。因为Docker基于Ubuntu发布,而且Docker出现问题时,Ubuntu系统版本的一般是先打补丁。很多版本在CentOS中,是不支持更新最新补丁包的。一定安装在CentOS 7.x及以上版本,CentOS6.x的版本中有Bug
    • 查看电脑上已经已经安装Docker
    yum list installed | grep docker
    • 安装docker
    yum -y install docker
    • 安装后查看docker版本
    docker -v
  • Docker守护进程相关命令
    • 启动docker服务
    systemctl start docker
    • 停止docker服务
    systemctl stop docker
    • 重启docker服务
    systemctl restart docker
    • 查看docker服务状态
    systemctl status docker
    • 开机启动docker服务
    systemctl enable docker
    • 查看docker概要信息
    docker info
    • 查看docker帮助文档
    docker --help
  •  镜像加速的2个方案:默认情况,将从docker hubhttps://hub.docker.com/)下载docker镜像太慢,一般都会配置镜像加速器
    • 方案一:中科大:中国科学技术大学(ustc)是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustcdocker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。https://lug.ustc.edu.cn/wiki/mirrors/help/docker
      • 编辑该文件
      vim /etc/docker/daemon.json
      • 在该文件中输入如下内容
      { 
      "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }
    • 方案二:阿里云:如果中科大镜像加载速度很慢,建议配置阿里云镜像加速,这个镜像仓库如果不好使,可以自己从阿里云上申请必须要注册,每个人分配一个免费的docker镜像加速地址,速度极快
      • 配置
      {
      "registry-mirrors": ["https://3ad96kxd.mirror.aliyuncs.com"]
      }
    • 配置完成记得刷新配置
    sudo systemctl daemon-reload
    sudo systemctl restart docker

3. docker 常用命令

3.1 镜像相关命令

  • 查看镜像 docker images,这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

技术分享图片

  • 搜索镜像 docker search imageName

技术分享图片

 

 

 技术分享图片

  • 拉取镜像 docker pull imageNameversion
  • 删除镜像 docker rmi imageId rmi-->remove Image

技术分享图片

docker images -q #查看所有镜像的ID
docker rmi `docker images -q` #批量删除镜像

3.2 容器相关命令

  • 查看容器
#查看正在运行的容器
docker ps
#查看正在运行的容器
docker ps -a
docker ps -all
#查看最后一次运行的容器
docker ps -l
#查看停止的容器
docker ps -f status=exited
  • 创建容器:docker run 参数 镜像名称:镜像标签 /bin/bash
## 命令参数详解
-i:表示运行容器,如果不加该参数那么只是通过镜像创建容器,而不启动。
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端(如果只加it两个参数,创建后就会自动进去容器)。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
--name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射,例如:
可以将Docker中Tomcat容器的8080端口映射到宿主机上的某一个端口8080,那么以后访问tomcat只需要:http://宿主机的IP:8080/
进入容器之后,初始化执行的命令:/bin/bash;可写可不写
    • 交互式:容器运行后直接进入到容器内部,退出容器内部后,容器直接关闭;只有第一次才会这样,以后再启动容器就是一个守护式的
      docker run -it --name=容器名称 镜像名称:标签 /bin/bash
      
      docker run -it --name=容器名称 镜像ID  /bin/bash

      exit #退出容器
    • 守护式:docker run -di --name=容器名称 镜像名称(或镜像ID):标签 /bin/bash
  • 进入容器: docker exec -it 容器名称 (或者容器ID) /bin/bash , /bin/bash必须写
  • 启动容器 docker start 容器ID或名称
  • 停止容器 docker stop 容器ID或名称
  • 删除容器 docker rm  容器ID或名称
  • 文件拷贝
    • 将宿主机的文件拷贝到容器内可以使用cp命令
      docker cp 需要拷贝的文件或目录 容器名称:容器目录
      #新建一个空文件
      touch latou.html
      #拷贝到tomcat容器的webapps目录下
      docker cp lagou.html 59b35c0bbe6d:/usr/local/tomcat/webapps
      #切换到tomcat容器中查看
      docker exec -it tomcat容器ID /bin/bash
    • 拷贝容器内文件到外部
    docker cp 容器名称:容器目录 需要拷贝的文件或目录
    #将copy到tomcat容器的文件再copy出来
    docker cp 59b35c0bbe6d:/usr/local/tomcat/webapps/lagou.html ./
  • 目录挂载:创建容器的时候,将宿主机的目录与容器内的目录进行映射,就可以通过修改宿主机某个目录的文件从而去影响容器
    • 格式:创建容器 添加-v参数 宿主机目录:容器目录

 

docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
  • 查看容器IP地址:docker inspect 容器名称(容器ID
    • 直接输出IP地址:docker inspect --format=‘{{.NetworkSettings.IPAddress}}‘ 容器名称(容器ID

技术分享图片

 

 4. 数据卷

  数据卷是宿主机中的一个目录或文件,当容器目录和数据卷目录绑定后,对方的修改会立即同步。一个数据卷可以被多个容器同时挂载,一个容器也可以被挂载多个数据卷。简单来说数据卷本质其实是共享文件夹,是宿主机与容器间数据共享的桥梁。
  数据卷作用:容器数据持久化;外部机器和容器间接通信;容器之间数据交换

  • 1个容器挂载1个数据卷
    • 创建启动容器时,使用 –v 参数 设置数据卷 docker run ... –v 宿主机目录(文件):容器内目录(文件) ...
    • 目录必须是绝对路径
    • 如果宿主机目录不存在,会自动创建
    • 可以挂载多个数据卷
    #拉取centos镜像
    docker pull centos:7
    #安装启动容器并挂载
    docker run -di --name=c1 -v /root/host_data1:/root/c1_data centos:7 /bin/bash
  • 查看容器已挂载的数据卷:docker inspect 容器名称(容器ID

技术分享图片

  • 1个容器挂载多个数据卷
docker run -di --name=c1 -v /root/host_data1:/root/c1_data1 -v /root/host_data2:/root/c1_data2 centos:7 /bin/bash
  • 多个容器挂载1个数据卷
#多个容器挂载1个数据卷,实现数据共享
docker run -di --name=c2 -v /root/host_data_common:/root/c2_data centos:7
docker run -di --name=c3 -v /root/host_data_common:/root/c3_data centos:7
#多个容器挂载1个容器(这个容器挂载1个数据卷)
##创建启动c3数据卷容器,使用 –v 参数 设置数据卷
docker run -di --name=c3 -v /root/host_data_common:/root/c3_data centos:7
/bin/bash
##创建启动 c1 c2 容器,使用 –-volumes-from 参数 设置数据卷
docker run -di --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -di --name=c2 --volumes-from c3 centos:7 /bin/bash

5. Docker中部署软件

5.1 MySQL部署

  • 搜索mysql镜像:docker search mysql
  • 拉取mysql镜像:docker pull mysql:5.7
  • 创建容器,设置端口映射、目录映射
docker run -di --name=mysql -p 3307:3306 -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
  • 技术分享图片
    • -p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。
    • -v /root/mysql/logs:/logs:将主机目录(/root/mysql)下的 logs 目录挂载到容器中的/logs
    • 日志目录-v /root/mysql/data:/var/lib/mysql :将宿主机目录(/root/mysql)下的data目录挂载到容
      器的 /var/lib/mysql
    • 数据目录-e MYSQL_ROOT_PASSWORD=123456初始化 root 用户的密码。
  • 进入容器,操作mysql:docker exec –it  mysql  /bin/bash
  • 使用Navicat连接容器中的mysql:端口映射,连接192.168.200.128:3307

5.2 Tomcat部署

  • 搜索tomcat镜像 docker search tomcat
  • 拉取tomcat镜像 docker pull tomcat:8-jdk8
  • 创建容器,设置端口映射、目录映射

技术分享图片

    • -p 8080:8080将容器的8080端口映射到主机的8080端口
    • -v /root/tomcat/webapps:/usr/local/tomcat/webapps将主机目录(/root/tomcat/webapps)挂载到容器的webapps
  • Tomcat中部署服务

  技术分享图片

  • 使用外部机器访问Tomcat,测试部署服务

5.3 Nginx部署

  • 搜索Nginx镜像:docker search nginx,选最新的
  • 拉取Nginx镜像:docker run -di --name=mynginx -p 80:80 nginx
  • 测试访问:http://192.168.200.128:80

5.4 Redis部署

  • 搜索Redis镜像:docker search redis
  • 拉取Redis镜像:docker pull redis
  • 创建容器、设置端口映射:docker run -id --name=c_redis -p 6379:6379 redis
  • 使用外部机器连接Redis测试

6. 迁移和备份

开发环境Docker,在Docker中安装很多的容器,进行对应的配置,将Docker中的运行的容器持久化为镜像,将对应的镜像安装到生产环境中。

  • 步骤:将开发环境下的Docker中对应的容器持久化为镜像;将镜像保存为一个压缩包,发送到生产环境服务器中;生产环境中需要将压缩包-->镜像-->容器
  • 容器保存为镜像 
docker commit {正在运行容器名称/容器ID} {镜像名称}:{镜像标签}
# 例如
docker commit dbc261edcdff redis:version_lagou_1.0.0
  • 镜像备份
docker save -o {压缩包存放路径} {镜像名称/镜像ID}
# 举例
docker save -o redis.tar redis:version_lagou_1.0.0 #压缩包在生产环境下会还原为一个image,还原之后的name和tag
# -o :输出到的文件
  • 镜像恢复与迁移:先删除掉c_tomcat_bak镜像 然后执行此命令进行恢复
docker load -i {备份的镜像文件}
# 举例
docker load -i redis.tar
# -i :指定导入的文件
#执行后再次查看镜像,可以看到镜像已经恢复,可以再次运行测试
docker run -di --name=mytomcat -p 8081:8080 -v
/root/tomcat/webapps/:/usr/local/tomcat/webapps redis:version_lagou_1.0.0

t连接容器中的mysql

Docker

原文:https://www.cnblogs.com/forever-fate/p/15233787.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!