当前位置:   article > 正文

Docker原理与部署实践_docker的安装与部署实验原理

docker的安装与部署实验原理

1、Docker的基本使用

镜像与镜像仓库的概念

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

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

图片

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

图片

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

图片

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

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

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

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

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

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

  • 镜像 Image

  • 容器 Container

  • 仓库 Repository

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

    2、Linux系统安装Docker

  • 安装步骤:

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

  • 输入指令: uname -r

    2、确保yum是最新的

    1. 建议首先输入“yum check-update”更新包数据库。
    2. 添加 yum 仓库
    3. 输入指令:
    4. tee /etc/yum.repos.d/docker.repo<<-'EOF'
    5. [dockerrepo]
    6. name=Docker Repository
    7. baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
    8. enabled=1
    9. gpgcheck=1
    10. gpgkey=https://yum.dockerproject.org/gpg
    11. EOF
    12. 安装 Docker
    13. 输入指令:yum install -y docker-engine
    14. 启动docker
    15. 在启动之前可以查看是否安装成功.
    16. 输入指令: docker version或者docker -v
    17. 然后启动,输入指令:systemctl start docker
    18. 输入指令:systemctl status docker 查看状态
    19. 设置开机自启动
    20. 输入指令:systemctl enable docker
    21. 配置镜像加速
    22. 设置 Docker Engine 写入配置:
    23. {
    24. registry-mirrors: [
    25. http://hub-mirror.c.163.com/,
    26. https://registry.docker-cn.com
    27. ],
    28. insecure-registries:[],
    29. experimental: false,
    30. debug: true
    31. }

    3、制作Docker基础镜像

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

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

    1. #从本地端环境端打包镜像
    2. # tar --exclude=/usr/lib32 --exclude=/sys -cPvf nk-base.tar /usr
    3. 此命令将本机运行的操作系统打成一个.tar包,可以使用--exclude参数将不需要的目录进行排除,可排除多个目录。文件打包支持的类型只有.tar, .tar.gz, .tgz, .bzip, .tar.xz等几种格式。打包完成后放在/usr目录下。
    4. #导入镜像(需要运行端)
    5. # cat nk-base.tar | docker import - nk-base
    6. 将制作的tar包使用docker import镜像导入,并命令为:nk-base:
    7. #查看镜像
    8. docker images
    9. #创建并启动镜像构成容器
    10. # docker run -i -t nk-base /bin/bash
    11. 使用docker命令启动镜像。-i 以交互模式运行容器 -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用 /bin/bash是指在容器启动后容器内执行的命令
    12. #docker run -dit --name modis_seafog 9b5839a64119 /bin/bash
    13. 3、创建并启动容器
    14. docker run -dit --name pythonFirst 镜像id /bin/
    15. docker run -dit --name python3.8 942a6c3f7d5b /bin/sh
    16. #4、查看目前环境有多少容器
    17. docker ps -a
    18. 5、进入容器
    19. docker exec -it <NAMES> /bin/bash
    20. 此外还可以通过容器ID进入容器
    21. docker container -it <容器ID> bash
    22. 6、退出容器exit
    23. 或者 ctrl+d
    24. 7、关闭、启动、重启容器
    25. docker stop <容器ID>
    26. docker start<容器ID>
    27. docker restart<容器ID>
    28. 10、查看容器日志
    29. docker logs -f -t --since="日期" --tail=数量 容器id或名称
    30. 说明:
    31. -f : 查看实时日志 -t : 查看日志产生的日期 --since : 即只输出指定日期之后的日志 --tail=5 : 查看最后的5条日志
    32. 11、容器备份和恢复
    33. 1、备份容器
    34. docker commit -p <容器ID> 备份命名
    35. 12、接着将备份的镜像导出到本地
    36. docker save 备份命名 > d:\备份命名.tar
    37. 导出和导入容器
    38. 导出容器
    39. 如果要导出本地某个容器,可以使用 docker export 命令。
    40. $ docker export 1e560fca3906 > ubuntu.tar
    41. 导入容器快照
    42. 可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
    43. $ cat docker/ubuntu.tar | docker import - test/ubuntu:v1
    44. 13、恢复容器
    45. docker load -i mypython.tar
    46. 2、拉取镜像
    47. docker image pull <repository>:<tag>
    48. 或者 docker pull <repository>:<tag>
    49. 演示:拉取python镜像
    50. #3、查看目前环境有多少容器
    51. docker ps -a
    52. docker container ls
    53. 或者 docker ps
    54. #删除容器ID
    55. docker rm 2cbfe9bfaa89
    56. 需要删除所有容器,加上$(docker ps -a -q)
    57. docker rm $(docker ps -a -q)
    58. #删除镜像
    59. 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. #1、登录阿里云Docker Registry
  2. docker login --username=liu13752614153 registry.cn-beijing.aliyuncs.com
  3. 用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
  4. 您可以在访问凭证页面修改凭证密码。
  5. #2、从Registry中拉取镜像
  6. dockers pull registry.cn-shanghai.aliyuncs.com/tcc_public/python:3.8
  7. #3、将镜像推送到Registry
  8. docker push registry.cn-shanghai.aliyuncs.com/tcc_public/python:3.8
  9. #4、镜像重命名
  10. 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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/73939
推荐阅读
相关标签
  

闽ICP备14008679号