(三)Docker

131 阅读5分钟

Docker 是一个开源的应用容器引擎,基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

概述

优点

  1. 一致的运行环境
  2. 更快的启动时间
  3. 隔离性
  4. 弹性伸缩,快速扩展
  5. 迁移方便
  6. 持续交付和部署

应用场景

  1. Web应用的自动化打包和发布
  2. 自动化测试和持续集成、发布
  3. 在服务型环境中部署和调整数据库或者其他的后台应用。

组成部分

Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。

名称说明
镜像(images)镜像是用于创建Docker容器的模板,镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。
容器(Container)容器是独立运行的一个或者一组应用。镜像相当于类,容器相当于类的实例
客户端(Client)客户端通过命令行或者其他工具使用Docker API和Docker的手误进程通信
主机(Host)一个物理或者虚拟的机器用于执行Docker守护进程和容器
守护进程是Docker服务器端进程,负责支持Docker容器的运行以及镜像的管理
仓库Docker Hub(Registry)·仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub提供了庞大的镜像集合供使用,用户也可以将自己本地的镜像推送到Docker仓库供其他人下载。

Registry(注册中心)

Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像(说明:在Docker Hub下载镜像巨慢,可以自己构建私有的Registry)。

hub.docker.com/

安装和使用

安装

安装手册:docs.docker.com/install/lin…

yum安装gcc相关

  1. CentOS7能上外网

  2. 检查gcc和g++是否安装好,如果没有安装好,则需要安装。

  3. 安装gcc和g++

    1. yum -y install gcc
    2. yum -y install gcc-c++
  4. 安装需要的软件包

  5. yum install -y yum-utils device-mapper-persistent-data lvm2

  6. 设置阿里云服务器作为仓库

    yum-config-manager --add-repo mirrors.aliyun.com/docker-ce/l…

  7. 更新yum软件包索引

    yum makecache fast

  8. 安装DOCKER CE(社区版)(DOCKER EE企业版收费)

    yum -y install docker-ce

  9. 启动docker

  10. 手动启动:systemctl start docker

  11. 自动启动:systemctl enable docker

  12. 配置镜像加速CentOS7版本

    mkdir -p /etc/docker

    vim /etc/docker/daemon.json

    1. · 阿里云(推荐)

      {
      "registry-mirrors": ["https://8y2y8njn.mirror.aliyuncs.com"]
      }
      

如何卸载

  1. systemctl stop docker
  2. yum -y remove docker-ce
  3. rm -rf /var/lib/docker

命令

命令指令
停止docker:systemctl stop docker
启动docker:systemctl start docker
重启docker:systemctl restart docker
查看docker状态:systemctl status docker
开机启动:systemctl enable docker
查看docker概要信息:docker info
查看docker帮助文档:docker --help
查看镜像docker images
从网络查找镜像docker search 镜像名称
拉取镜像docker pull 镜像名称
删除镜像docker rmi 镜像ID
删除单个镜像(-f 强制删除)docker rmi -f 镜像ID
删除多个镜像docker rmi -f 镜像名1:TAG 镜像名2:TAG
删除所有镜像docker rmi -f $(docker images -qa)
正在运行的容器docker ps
查看所有容器docker ps -a
查看最后一次运行的容器docker ps -l
查看停止的容器docker ps -f status=exited
创建容器docker run
交互式创建容器docker run -it --name=容器名称 镜像名称:标签 /bin/bash
创建后台容器docker run -id --name=mycentos2 centos:7
守护式方式创建容器docker run -di --name=容器名称 镜像名称:标签
停止容器docker stop 容器名称(或者容器ID)
启动容器docker start 容器名称(或者容器ID)
文件拷贝docker cp 需要拷贝的文件或目录 容器名称:容器目录
目录挂载(可以通过修改宿主机某个目录的文件从而去影响容器)创建容器 添加-v参数 后边为 宿主机目录:容器目录
查看容器IP地址docker inspect 容器名称(容器ID)
删除容器(需要先停止容器)docker rm 容器名称(容器ID)

指令介绍

指令含义
cp本地文件系统(OS操作系统|宿主机)和容器之间进行文件或者文件夹拷贝
exec登录一个容器,使用命令行操作正在运行的容器。
images镜像的集合查询。
ps容器列表
pull下载镜像
restart重启一个或多个容器
rm删除一个或多个容器
rmi删除一个或多个镜像
run创建一个容器,并运行起来
save导出镜像到一个文件(tar)中
search搜索镜像(从Docker Hub)
start启动一个或多个已经停止的容器
stop停止一个或多个正在运行的容器

迁移和备份

命令含义
docker commit 容器名称 镜像名称将容器保存为镜像
docker save –o tar文件名 镜像名将镜像备份为tar文件
docker load -i tar文件名根据tar文件恢复为镜像

Dockerfile

Dockerfile其实就是一个文本文件,由一系列命令和参数构成,Docker可以读取Dockerfile文件并根据Dockerfile文件的描述来构建镜像。

1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;

2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;

3、对于运维人员:在部署时,可以实现应用的无缝移植。

命令作用
FROM image_name:tag定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name声明镜像的创建者
ENV key value设置环境变量 (可以写多条)
RUN command是Dockerfile的核心部分(可以写多条)
ADD source_dir/file dest_dir/file将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file和ADD相似,但是如果有压缩文件并不能解压
WORKDIR path_dir设置工作目录

使用脚本创建镜像

步骤

  1. 创建目录

    mkdir –p /usr/local/dockerjdk8
    
  2. 下载jdk-8u144-linux-x64.tar.gz并上传到服务器(虚拟机)中的/usr/local/dockerjdk8目录

  3. 移动目录刚刚上传的 jdk 到 /usr/local/dockerjdk8 目录下面

  4. 创建文件Dockerfile 并vi Dockerfile

    # Dockerfile 名字不要改
    vi Dockerfile
    

    设置环境变量 ,设置完成之后 先按下esc , 然后在 :wq 保存退出

    #依赖镜像名称和ID
    FROM centos:7
    #指定镜像创建者信息
    MAINTAINER atguigu
    #切换工作目录
    WORKDIR /usr
    #RUN yum install -y glibc.i686
    RUN mkdir /usr/local/java
    #ADD 是相对路径jar,把java添加到容器中
    ADD jdk-8u144-linux-i586.tar.gz /usr/local/java/
    #配置java环境变量
    ENV JAVA_HOME /usr/local/java/jdk1.8.0_144
    ENV JRE_HOME $JAVA_HOME/jre
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
    ENV PATH $JAVA_HOME/bin:$PATH
    
    
  5. 执行命令构建镜像

    docker build -t='jdk1.8' .
    

    注意后边的空格和点,不要省略

  6. 查看镜像是否完成

    docker images
    
  7. 运行容器测试,如果出错,可能是因为缺少依赖插件,安装即可

    yum install glibc.i686
    

私有仓库

私有仓库搭建与配置

  1. 拉取私有仓库镜像

    docker pull registry
    
  2. 启动私有仓库容器

    docker run -di --name=registry -p 5000:5000 registry
    

    创建私有仓库容器

    通过 docker ps 查看容器是否创建成功

  3. 打开浏览器 输入地址 http://虚拟机IP地址:5000/v2/_catalog 看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空

  4. 修改daemon.json

    vi /etc/docker/daemon.json
    

    添加以下内容,保存退出。目的是让容器信任这个地址

    "insecure-registries":["IP地址:5000"]
    
  5. 重启docker服务

    systemctl restart docker
    

镜像上传到私有仓库

  1. 标记此镜像为私有仓库的镜像

    # 标记镜像为私有仓库的镜像  
    # docker tag jdk1.8 宿主机IP:5000/jdk1.8
    docker tag jdk1.8 虚拟机IP:5000/jdk1.8
    
  2. 再次启动私服容器

    # 再次启动私有仓库容器  
    docker start registry
    
  3. 上传标记的镜像

    # 上传标记的镜像  
    # docker push 宿主机IP:5000/jdk1.8
    docker push 虚拟机IP:5000/jdk1.8
    

从私有仓库拉取镜像

# 执行拉取镜像命令并查看
docker pull 虚拟机IP:5000/jdk1.8
docker images