Docker原理与部署实践

1、Docker的基本使用

镜像与镜像仓库的概念

为了更好的理解 Docker 是什么,我们先来讲个故事:

我需要盖一个房子,于是我搬石头、砍木头、画图纸、盖房子。一顿操作,终于把这个房子盖好了。

图片

结果,住了一段时间,心血来潮想搬到海边去。这时候按以往的办法,我只能去海边,再次搬石头、砍木头、画图纸、盖房子。

图片

烦恼之际,跑来一个魔法师教会我一种魔法。这种魔法可以把我盖好的房子复制一份,做成「镜像」,放在我的背包里。

图片

等我到了海边,就用这个「镜像」,复制一套房子,拎包入住。

是不是很神奇?对应到我们的项目中来,房子就是项目本身,镜像就是项目的复制,背包就是镜像仓库。

如果要动态扩容,从仓库中取出项目镜像,随便复制就可以了。Build once,Run anywhere!

不用再关注版本、兼容、部署等问题,彻底解决了「上线即崩,无休止构建」的尴尬。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker 技术的三大核心概念,分别是:

  • 镜像 Image

  • 容器 Container

  • 仓库 Repository

  • 核心概念如下:
    
    Build,Ship and Run(搭建、运输、运行)。
    
    Build once,Run anywhere(一次搭建,处处运行)。
    
    Docker 本身并不是容器,它是创建容器的工具,是应用容器引擎。
    
    Docker 三大核心概念,分别是:镜像 Image,容器 Container、仓库 Repository。
    
    Docker 技术使用 Linux 内核和内核功能(例如 Cgroups 和 namespaces)来分隔进程,以便各进程相互独立运行。
    
    由于 Namespace 和 Cgroups 功能仅在 Linux 上可用,因此容器无法在其他操作系统上运行。那么 Docker 如何在 macOS 或 Windows 上运行?Docker 实际上使用了一个技巧,并在非 Linux 操作系统上安装 Linux 虚拟机,然后在虚拟机内运行容器。
    
    镜像是一个可执行包,其包含运行应用程序所需的代码、运行时、库、环境变量和配置文件,容器是镜像的运行时实例。

    2、Linux系统安装Docker

  • 安装步骤:

  • 1、检查内核版本,返回的值大于3.10即可。

  • 输入指令: uname -r

    2、确保yum是最新的

  • 建议首先输入“yum check-update”更新包数据库。
    添加 yum 仓库
    输入指令:
    
    tee /etc/yum.repos.d/docker.repo<<-'EOF'
    
    [dockerrepo]
    
    name=Docker Repository
    
    baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
    
    enabled=1
    
    gpgcheck=1
    
    gpgkey=https://yum.dockerproject.org/gpg
    
    EOF
    
    安装 Docker
    输入指令:yum install -y docker-engine
    启动docker
    在启动之前可以查看是否安装成功.
    
    输入指令: docker version或者docker -v
    
    然后启动,输入指令:systemctl start docker
    输入指令:systemctl status docker 查看状态
    设置开机自启动
    输入指令:systemctl enable docker
    
    
    
    配置镜像加速
    
    
    设置 Docker Engine 写入配置:
    
    {
      registry-mirrors: [
        http://hub-mirror.c.163.com/,
        https://registry.docker-cn.com
      ],
      insecure-registries:[],
      experimental: false,
      debug: true
    }

    3、制作Docker基础镜像

  • 基础镜像制作方法常见的有两种:

    1、第一种是本地直接打包然后导入:

  • #从本地端环境端打包镜像
    # tar --exclude=/usr/lib32 --exclude=/sys  -cPvf nk-base.tar /usr
    此命令将本机运行的操作系统打成一个.tar包,可以使用--exclude参数将不需要的目录进行排除,可排除多个目录。文件打包支持的类型只有.tar, .tar.gz, .tgz, .bzip, .tar.xz等几种格式。打包完成后放在/usr目录下。
    
    #导入镜像(需要运行端)
    # cat nk-base.tar | docker import - nk-base
    将制作的tar包使用docker import镜像导入,并命令为:nk-base:
    
    #查看镜像
    docker images
     
    #创建并启动镜像构成容器
    # docker run -i -t nk-base  /bin/bash
    使用docker命令启动镜像。-i 以交互模式运行容器 -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用 /bin/bash是指在容器启动后容器内执行的命令
    
    #docker run -dit --name modis_seafog 9b5839a64119  /bin/bash
    3、创建并启动容器
    docker run -dit --name pythonFirst 镜像id /bin/
    docker run -dit --name python3.8 942a6c3f7d5b /bin/sh
    
    
    #4、查看目前环境有多少容器
    
    docker ps -a
    
    
    5、进入容器
    docker exec -it <NAMES> /bin/bash
    
    此外还可以通过容器ID进入容器
    docker container -it <容器ID> bash
    
    6、退出容器exit
    或者 ctrl+d
    
    7、关闭、启动、重启容器
    docker stop <容器ID>
    docker start<容器ID>
    docker restart<容器ID>
    
    
    10、查看容器日志
    docker logs -f -t --since="日期" --tail=数量 容器id或名称
    说明:
    -f : 查看实时日志 -t : 查看日志产生的日期 --since : 即只输出指定日期之后的日志 --tail=5 : 查看最后的5条日志
    
    11、容器备份和恢复
    1、备份容器
    docker commit -p <容器ID> 备份命名
    
    12、接着将备份的镜像导出到本地
    docker save 备份命名 > d:\备份命名.tar
    
    导出和导入容器
    导出容器
    
    如果要导出本地某个容器,可以使用 docker export 命令。
    
    $ docker export 1e560fca3906 > ubuntu.tar
    
    导入容器快照
    
    可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
    
    $ cat docker/ubuntu.tar | docker import - test/ubuntu:v1
    
    13、恢复容器
    docker load -i mypython.tar
    
    
    2、拉取镜像
    docker image pull <repository>:<tag>
    或者  docker pull <repository>:<tag>
    演示:拉取python镜像
    
    
    
    #3、查看目前环境有多少容器
    
    docker ps -a
    
    docker container ls
    
    或者 docker ps
    
    #删除容器ID
    
    docker rm 2cbfe9bfaa89
    
    需要删除所有容器,加上$(docker ps -a -q)
    
    docker rm $(docker ps -a -q)
    
    #删除镜像
    
    docker rmi 800fdea41150
    

    2、第二种方式也非常简单,直接使用脚本来制作:

  • # wget https://raw.githubusercontent.com/docker/docker/master/contrib/mkimage-yum.sh
    # chmod a+x ./mkimage-yum.sh
    # ./mkimage-yum.sh -y /etc/yum.conf nk-base

    执行完成后,基础镜像就创建成功了,使用docker images查看一下:

    [root@192 hxb]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nk-base             7.4                a1942dd1e289      1 hours ago          383 MB

 3、拉取官方基础镜像仓库

上海区阿里云容器服务地址: https://cr.console.aliyun.com/cn-shanghai

#1、登录阿里云Docker Registry
docker login --username=liu13752614153 registry.cn-beijing.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。

#2、从Registry中拉取镜像
dockers pull  registry.cn-shanghai.aliyuncs.com/tcc_public/python:3.8

#3、将镜像推送到Registry
docker push registry.cn-shanghai.aliyuncs.com/tcc_public/python:3.8

#4、镜像重命名
docker tag registry.cn-shanghai.aliyuncs.com/tcc_public/python:3.8  python3.8

4、创建Dockerfile

指令详解

4.1、ADD

ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:

  • ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
  • ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

4.2 、COPY

复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

格式:

COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]

[--chown=<user>:<group>]:可选参数,用户改变复制到容器内文件的拥有者和属组。

<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。例如:

COPY hom* /mydir/
COPY hom?.txt /mydir/

<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。

4.3、CMD

类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

  • CMD 在docker run 时运行。
  • RUN 是在 docker build。

作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

格式:

CMD <shell 命令> 
CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

推荐使用第二种格式,执行过程比较明确。第一种格式实际上在运行的过程中也会自动转换成第二种格式运行,并且默认可执行文件是 sh。

什么是Dockerfile?

Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),有了 Dockerfile,就可以创建我们所需要的镜像

touch Dockerfile

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值