• 只要肯下功夫,十岁也能学得会的 Docker 精简版!


    一、Docker简介

    1.1 什么是Docker

    我们用的传统虚拟机如 VMwareVisualBox之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。

    而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。

    容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。通过使用容器,我们可以轻松打包应用程序的代码、配置和依赖关系,将其变成容易使用的构建块,从而实现环境一致性、运营效率、开发人员生产力和版本控制等诸多目标。容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高。

    特性容器虚拟机启动秒级分钟级硬盘使用一般为MB一般为GB性能接近原生弱于系统支持量单机支持上千个容器一般是几十个

    1.2 Docker中包括三个基本的概念

    Image

    (镜像)Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。 Container

    (容器)容器 (container)

    的定义和镜像 (image)

    几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。 Repository

    (仓库) Docker

    仓库是集中存放镜像文件的场所。仓库又可以分为两种形式:public(公有仓库)、private(私有仓库)

    1.3 Docker组件

    Docker 服务器与客户端

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

    Docker 镜像与容器

    镜像是构建 Docker的基石。用户基于镜像来运行自己的容器。镜像也是 Docker生命周期中的"构建"部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。例如:【添加一个文件】【执行一个命令】【打开一个窗口】,也可以将镜像当作容器的"源代码"。镜像体积很小,非常"便携",易于分享、存储和更新。

    Docker可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是 Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。所以 Docker容器就是:【一个镜像格式】【一些列标准操作】【一个执行环境】。

    Registry (注册中心)

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

    1.4 安装Docker

    安装一些必要的系统工具: sudo yum install -y yum-utils device-mapper-persistent-data lvm2

    添加软件源信息sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    更新 yum 缓存: sudo yum makecache fast

    安装 Docker-ce sudo yum -y install docker-ce

    启动 Docker 后台服务: sudo systemctl start docker

    配置国内镜像仓库,修改完毕后,重启 docker,使用 docker info命令即可查看 docker的镜像仓库信息

    vi /etc/docker/daemon.json
    
    {
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/","https://hub-mirror.c.163.com","https://registry.docker-cn.com"],
    "insecure-registries": ["10.0.0.12:5000"]
    }
    

    二、Docker常用命令

    ** docker 命令大全: https://www.runoob.com/docker/docker-command-manual.html**

    搜索镜像: docker search image_name

    拉取镜像: docker pull image_name

    拉取某个版本的镜像: docker pull centos:latest

    查看镜像: docker images

    删除镜像docker rmi image_name/docker rmi container_id(强制加 -f)

    查看运行中的启动: docker ps

    查看所有容器: docker ps -a

    启动容器: docker start container_name/container_id

    重启容器: docker restart container_name/container_id

    关闭容器: docker stop container_name/container_id

    进入容器: docker run container_name/container_id

    删除容器: docker rm container_name/docker rmi container_id(强制加 -f)

    查看运行容器的各种数据docker inspect container_name/container_id

    打标签docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
    例: docker tag ubuntu:15.10 runoob/ubuntu:v3

    将指定镜像保存成 tar 归档文件: docker save [OPTIONS] IMAGE [IMAGE...]
    例: docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
    OPTIONS说明:

    • -o :输出到的文件

    导入使用 docker save 命令导出的镜像: docker load [OPTIONS]
    例: docker load --input fedora.tar
    OPTIONS说明:

    • --input, -i: 指定导入的文件,代替 STDIN
    • --quiet, -q : 精简输出信息

    三、应用部署

    3.1 mysql部署

    下载: docker pull mysql:5.6

    启动 mysql并指定 root用户的密码: docker run -itd --name mysql5.6 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 mysql:5.6

    进入 mysql容器: docker exec -it mysql5.6 /bin/bash

    进入命令行: mysql -u root -p

    复制 sql脚本到容器: docker cp /opt/create.sql mysql5.6:/home/sql/;

    3.2 安装Redis

    下载: docker pull redis:3.2

    启动: docker run -p 6379:6379 -v $PWD/data:/data -d redis:3.2 redis-server --appendonly yes

    查看 redis运行的id:docker ps

    启动 redis客户端: docker exec -it container_id redis-cli

    3.3 安装Elasticsearch

    下载: docker pull elasticsearch:2.4.4

    启动: docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch elasticsearch:2.4.4

    9300是 TCP通讯端口,集群间和 TCP Client都走的它,9200是 HTTP协议的 RESTFUL接口

    3.4 安装oracle11g

    安装oracle11g

    四、迁移与备份

    容器保存为镜像: docker commit mysql5.6 mysql5.6_i

    镜像备份,将镜像保存为 tar 文件: docker save -o mysql5.6.tar mysql5.6_i

    镜像恢复与迁移:

    首先先删除掉 mysql5.6镜像 然后执行此命令进行恢复: docker load -i mynginx.tar-i:输入的文件)

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

    五、Dockerfile

    Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

    • 对于开发人员:可以为开发团队提供一个完全一致的开发环境
    • 对于测试人员:可以直接拿开发时所构建的镜像或者通过 Dockerfile文件构建一个新的镜像开始工作
    • 对于运维人员:在部署时,可以实现应用的无缝移植

    5.1 常用命令

    命令作用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设置工作目录

    5.2 使用脚本创建镜像

    ① 上传 jdk-8u171-linux-x64.tar.gz 到服务器(虚拟机)中的 /usr/local/dockerjdk8 目录

    ② 创建文件 Dockerfile

    [root@rich ~]
    
    FROM centos:7
    
    MAINTAINER RICH
    
    WORKDIR /usr
    RUN mkdir  /usr/local/java
    
    ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
    
    ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
    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
    

    ③ 执行命令构建镜像

    [root@rich ~]
    

    注意后边的空格和点,不要省略,指定当前 Dockerfile的位置

    ④查看镜像是否建立完成: docker images

    六、Docker私有仓库

    6.1 私有仓库搭建与配置

    ① 拉取私有仓库镜像docker pull registry

    ② 启动私有仓库容器docker run -di --name=registry -p 5000:5000 registry

    访问 http://ip:5000/v2/_catalog:看到 {"repositories":[]} 表示私有仓库搭建成功并且内容为空

    ④修改 daemon.json

    vi /etc/docker/daemon.json
    
    {"insecure-registries":["192.168.184.141:5000"]}
    

    此步用于让 Docker信任私有仓库地址

    ⑤ 重启 Docker 服务systemctl restart docker

    6.2 镜像上传至私有仓库

    ① 标记此镜像为私有仓库的镜像docker tag jdk1.8 ip:5000/jdk1.8

    ② 再次启动私服容器docker start registry

    ③ 上传标记的镜像docker push ip:5000/jdk1.8

    微信搜一搜 : 全栈小刘 ,获取文章 pdf 版本

  • 相关阅读:
    MySQL的双主配置
    MySQL主从复制配置部署
    Linux centOS安装MySQL
    hive搜索报错
    常用设计模式
    Cookie禁用 获取session
    排序算法
    MySQL优化
    javascript Map和Set
    ThinkPHP的基本操作
  • 原文地址:https://www.cnblogs.com/spiritmark/p/13850255.html
Copyright © 2020-2023  润新知