Docker

Doker是什么?有什么作用?

       Doker是什么:当我们在开发环境开发完毕代码需要上传到测试环境却发现在我们开发环境代码运行的好好的,但是到了测试环境下bug频出,这是怎么回事呢?就是因为每个电脑的环境都是不一样的,所以可能会出现bug,那么这时候有没有可能,当我们写完代码了也没有问题在开发环境,那么上传的时候把代码所依赖我们电脑种的环境一并上传到测试环境内。然后测试环境直接就可以把这个运行,并且在测试环境不会依赖测试环境而是单独隔离起来依赖他自己所带的化境呢?
这个时候就要使用Doker了,Doker是可以完成这个功能的。也就是将环境和代码一起打包成为镜像
       Doker是可以一起运行多次镜像,运行一次镜像就会形成一个容器,每个容器是相互隔离的,这个也就是Doker的一个特性----沙箱机制
       Doker还有一个优点就是可以直接去拉去镜像,比如我们需要使用一个jdk的镜像,那么我们难道就要自己做吗?这时候就会有一个别人写好的镜像在仓库中,然后我们直接就可以去卡区镜像,然后就可以直接使用。
     
个人理解Doker: 比如我们有rides1在ubuntu操作系统上,而想要把他迁移到centos上使用,那么这时候docker是怎么做到的呢?因为这两个操作系统都是基于Linux内核的,所以我们在使用ubuntu的时候比如,我们所输入的ubuntu指令其实就是ubuntu根据指令去他的函数库解析然后再去解析出来Linux内核指令让Linux去做,这时候docker就是直接跳过操作系统,他的镜像运行完以后有一个容器,里面有函数库,然后这个容器其实就相当于是一个小型的虚拟机系统,只不过是阉割版的系统,比如在Linux有一个redis容器,其实就相当于是一个操作系统只不过是安装了redis而已,这样就可以得到和Linux内核交互的指令了,如下图:
不使用docker:

使用docker:
    直接穿透操作系统去访问Linux内核

  当我们在使用软件是,都在我们一个系统上边,这些软件都是使用的同一个函数库和依赖

 

而我们使用docker就可以避免这个问题 

镜像是什么: 

     镜像就是将我们的应用程序和应用程序的依赖,环境,配置,函数库一起打包,成为镜像

容器是什么

      容器就是将镜像运行了以后就是容器,容器可以运行多次镜像形成多个容器,比如redis镜像我们可以运行两次,那么这时候就有两个redis运行,容器就是沙箱机制,相互隔离

例如你下载了一个QQ,如果我们将QQ在磁盘上的运行文件及其运行的操作系统依赖打包,形成QQ镜像。然后你可以启动多次,双开、甚至三开QQ,跟多个妹子聊天

DockerHub
    地址:
https://cr.console.aliyun.com/

              https://c.163yun.com/hub

 这个就是一个镜像的网址,就相当于是对于maven来说是一个jar包私服,而dockerHub对于Docker就是一个远程仓库,因为我们在使用镜像时候,有别人写好的那么就可以去这些远程长裤拉去,流程如图:
        

 Linux安装docker

    如果之前安装过旧版本的Docker,可以使用下面命令卸载:

   yum remove docker \
  docker-client \
  docker-client-latest \
  docker-common \
  docker-latest \
  docker-latest-logrotate \
  docker-logrotate \
  docker-selinux \
  docker-engine-selinux \
  docker-engine \
  docker-ce 

   第二部安装docker:

首先需要虚拟机联网,安装yum工具

yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2 --skip-broken

 然后更新本地镜像源:
这个是看你自己的网址的,比如我的阿里云的地址为什么都会给阿里云里面显示直接赋值粘贴

# 设置docker镜像源
yum-config-manager \
    --add-repo \
 xxxxxxxxxxxx

xxxxxxxxxxxx

xxxxxxxxxxx

 docker-ce为社区免费版本。稍等片刻,docker即可安装成功。

 yum install -y docker-ce

  最后一步启动docker:

Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙!

启动docker前,一定要关闭防火墙!!

 # 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

systemctl start docker  # 启动docker服务

systemctl stop docker  # 停止docker服务

systemctl restart docker  # 重启docker服务

然后就一可以输入docker -v去查看docker的版本了

 镜像命令:


     

镜像:
    docker images   查看docker里面所有的镜像的信息
    docker pull 镜像名:tag   拉去这个镜像名的tag版本
    docker rmi 镜像名:tag    删除指定镜像名的tag版本
    docker save -o Xxx.tar 镜像名:tag 镜像名:tag    保存多个指定镜像指定版本到Xxx.tar文件
    docker load -i Xxx.tar   将Xxx.tar中的镜像加载到docker
    docker build -t 镜像名:tag .     建造一个镜像,名称为-t后面的镜像名  版本为自己指定
容器:
    docker run \  
      --name 容器名 \
      -d \
      -p 宿主机端口:容器内软件端口 \
      -v 数据卷名:/容器内的目录 \
      -v /文件夹:/容器内的文件夹 \
      -v /文件:/容器内的文件 \
      镜像名:tag      运行镜像成为容器,并且命名容器   挂在数据卷   指定端口号
    docker ps   查看开启的容器
    docker ps -a   查看所有的容器
    docker logs 容器名   查看日志
    docker stop 容器名    停止指定容器
    docker start 容器名    开始指定容器
    docker rm 容器名       删除指定容器
    docker rm -f 容器名    强制删除指定容器,不带-f就是容器在运行时不能删除,带上-f时不管运没运行都删除
    docker update --restart=always 容器名   修改以后自动重启这个指定名称的容器
数据卷:   
    docker volume create 数据卷名   生成一个数据卷
    docker volume ls   查看所有的数据卷
    docker volume rm 数据卷名    删除指定数据卷
    docker volume prune    删除此时没有启动的数据卷
    docker volume inspect   查看数据卷详情
网络:
    docker network create 网络名称
    docker network ls
    docker network rm 网络名称
    docker network prune
    docker network inspect

数据卷
     当我们想要改变容器中谭健的配置时,还需要使用很麻烦的命令,这时候我们可以在运行时绑定数据卷来达到本地就可以使用数据卷

当使用数据卷的时候要保证本地的文件是可读权限不然例如nginx就会访问不了
 创建数据卷:

docker volume create html

  查看所有数据

docker volume ls

查看数据卷详细信息卷  

docker volume inspect html 

 

 

改在数据卷步骤:
 我们在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录,命令格式如下:

 docker run \
  --name mn \
  -v html:/root/html \
  -p 8080:80
  nginx \

 这个时候-v的冒号前边 html就是我们宿主机的html目录绑定了容器的root/html目录,这时候实现了两个目录的双向绑定,修改宿主机的目录就可以实现修改容器的内容
案例:
需求:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

  docker run \   // 创建容器
  --name mysql \ // 给容器起名
  -e MYSQL_ROOT_PASSWORD=root \ // 设置root账户密码
  -p 3306:3306 \ // 端口映射
  -d \ // 后台运行
  -v /tmp/mysql/data:/var/lib/mysql \ // 绑定宿主机上的文件夹
  -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/my.cnf \ // 绑定宿主机上的文件
  --privileged \ // 设置超级管理员远程访问权限
  mysql:5.6 // 镜像名称

 自定义镜像:
镜像结构:

 命令:

 其实这些命令就是写在一个文件中,文件的名称是固定的:Dockerfile
例如我们将java成一个镜像:
将Java这个项目的jar包放到文件夹中,因为Java需要jdk,所以可以将jdk包放到文件夹中,具体如下:
 

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

 然后将这个文件夹上传到虚拟机中,进入上传到虚拟机的这个文件夹中:
将准备好的docker-demo上传到虚拟机任意目录,然后进入docker-demo目录下

运行命令: 

docker build -t javaweb:1.0 .

这样一个镜像就制作完成,其中上边命令的 javaweb就是这个镜像的名称  1.0为版本号
其实上边还有一个更简单的方法,因为上边是将jdk打包进来的,但是我们可以从仓库拉下来jdk别人写好的镜像,这时候Dockerfile可以改为:
 

FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
EXPOSE 8090
ENTRYPOINT java -jar /tmp/app.jar

安装DockerCompose

Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行,也就是说可以通过这个软件然后我们自己写compose的文件,然后直接运行这个文件就可以直接运行起来多个容器,一般都是来搭建集群。格式如下:
 

version: "3.8"
services:
 mysql:
   image: mysql:5.7.25
   environment:
    MYSQL_ROOT_PASSWORD: 123 
   volumes:
    - "/tmp/mysql/data:/var/lib/mysql"
    - "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
 web:
   build: .
   ports:
    - "8090:8090"

上面的Compose文件就描述一个项目,其中包含两个容器:

  • mysql:一个基于mysql:5.7.25镜像构建的容器,并且挂载了两个目录

  • web:一个基于docker build临时构建的镜像容器,映射端口时8090

 DockerCompose的详细语法参考官网:Compose specification | Docker Documentation

 # 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

 安装完毕以后修改文件权限
# 修改权限
chmod +x /文件路径/docker-compose
ln -s /文件路径/docker-compose /usr/bin/docker-compose

 编写docker-compose文件例子:
 

version: "3.2"

services:
  nacos:
    image: nacos/nacos-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"

可以看到,其中包含5个service服务:

  • nacos:作为注册中心和配置中心

    • image: nacos/nacos-server: 基于nacos/nacos-server镜像构建

    • environment:环境变量

      • MODE: standalone:单点模式启动

    • ports:端口映射,这里暴露了8848端口

  • mysql:数据库

    • image: mysql:5.7.25:镜像版本是mysql:5.7.25

    • environment:环境变量

      • MYSQL_ROOT_PASSWORD: 123:设置数据库root账户的密码为123

    • volumes:数据卷挂载,这里挂载了mysql的data、conf目录,其中有我提前准备好的数据

  • userserviceorderservicegateway:都是基于Dockerfile临时构建的

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
虚拟化诞生的重要原因就是提升资源利用率,从而起到节约成本的主要目的,这也是高级运维工程师必须掌握的技能之一。本套视频完整的讲解了虚拟化在不同阶段出现的关键性技术。Vcent是 VMware 公司出品的企业级虚拟化产品,也是公认最优秀的虚拟化产品之一,在世界百强企业的利用率居高不下。Vcent 是一种基础架构虚拟化,或者我更愿意称它为“传统虚拟化”,基于裸金属结构模式开发而来,大大提升了稳定性以及运行效率。在视频中讲解了虚拟化的常见分类、安装 、网络配置、资源分割等常用技术,让你在生产化境配置中游刃有余!DockerDockerCloud公司出品,现已成为了容器级虚拟化的标准方案。Docker的优点非常众多,但是最让人印象深刻的莫过于“秒”级启动了,这是很多平台常用的一种描述方式。其实,这种说法不太友好,应该说为容器的启动时间等于容器内部进程的启动时间,这就可以让我们做到很多事情了。比如,不再去关注进程的失败原因从而找到解决方案,只需关心当前是否存在即可,失败 〉删除容器 〉重新启动容器,成了我们常见的操作。视频中对Docker技术的讲解非常细致,Docker常用命令、网络、存储、驱动、仓库一应俱全,是你走入容器世界的必备资料OpenStack,也就是常说的云计算平台,它在云计算市场的使用率达到了自然垄断的地位。比如:阿里云、百度云、红帽云平台等都是使用OpenStack作为底层平台为构建基础。如果你处于云计算行业,那么OpenStack是你的必备技能。视频中对OpenStack框架进行分离讲解,对不同的组件进行解析安装到最终的实例部署构建,带你走入云计算的大门!关于虚拟化的技术,这里应有尽有,快来学习吧!本视频中:01-02为虚拟化概述03-06为Vcent07-29为Docker30-53为云计算OpenStack

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值