• docker架构之容器、镜像、仓库


    简单理解:从仓库下载镜像,运行镜像生成容器,在容器中独立运行程序,不会影响本地主机。

    1.Docker基本架构

    • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
    • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
    • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

    注:在终端直接输入docker可查看Docker客户端的所有命令选项,使用docker command --help 可以查看具体命令的使用方法。

    2.设置docker仓库

    1)设置远程仓库

    使用默认的官方仓库可能会卡,所以我们设置国内的仓库进行加速

    修改/etc/docker/daemon.json文件,如果没有可以手动创建,内容为:

    {
      "registry-mirrors":[
        "https://abcdefg.mirror.aliyuncs.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
      ]
    }
    注:阿里云的那个是个人单独的镜像加速器,登陆阿里云--控制台--容器镜像服务--镜像加速器,查看。

    重启docker服务:

    systemctl restart docker

    查看是否生效

    docker info

    2)设置本地仓库

    下载registry镜像

    docker  pull  registry

    查看镜像

    docker images
    REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
    hello-world   latest    d1165f221234   6 days ago     13.3kB
    registry      latest    678dfa38fcfa   2 months ago   26.2MB

    创建存储本地镜像的目录

    mkdir /cluster/localregistry

    启动registry镜像

    docker run -d -p 5000:5000 --name=localregistry --restart=always --privileged=true -v /cluster/localregistry:/var/lib/registry registry

    注解:

    -d 后台运行

    -p 端口映射

    --name 容器名称

    --restart=always 自动重启

    --privilege=true centos7中的安全模块selinux把权限禁止了,加上这行是给容器增加执行权限

    -v 把物理机的/cluster/localregistry目录挂载到容器中的/var/lib/registry目录下,假如容器被删除,可以保证镜像不被删除

    查看

    docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    f1446545e319 registry "/entrypoint.sh /etc…" 31 minutes ago Up 4 minutes 0.0.0.0:5000->5000/tcp localregistry

    配置http权限支持

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

    重启docker服务和registry容器

    systemctl restart docker
    docker restart localregistry

    将原来下载的hello-world镜像标记为192.168.1.199:5000/test

    docker tag hello-world 192.168.1.199:5000/test

    推送到本地仓库

    docker push 192.168.1.199:5000/test

    此时可查看到test目录

    /cluster/localregistry/docker/registry/v2/repositories/test/

    查看刚才上传的镜像

    curl http://192.168.1.199:5000/v2/_catalog
    {"repositories":["test"]}

    删除原有的镜像

    docker rmi 192.168.1.199:5000/test
    docker rmi hello-world
    docker imgag

    从本地拉取刚才创建的镜像

    docker pull 192.168.1.199:5000/test
    docker images

    3.Docker镜像

     1)镜像存放目录

    默认情况下,docker相关数据存放在/var/lib/docker/下

     2)更改存放目录

    暂无。

    3)列出本地镜像列表

    # docker images
    REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
    registry     latest    678dfa38fcfa   3 months ago    26.2MB
    hello-world     latest    bf756fb1ae65   14 months ago   13.3

    4)搜索镜像

    # docker search ubuntu
    NAME              DESCRIPTION                    STARS     OFFICIAL   AUTOMATED
    ubuntu             Ubuntu is a Debian-based Linux operating sys…   11979     [OK]

    5)下载镜像

    # docker pull ubuntu

    # docker pull ubuntu:18.10  (指定版本下载)

    6)运行镜像

    # docker run -t -i ubuntu:18.10 /bin/bash
    root@683a0787e0fe:/#

    -t 创建新的终端   -i 交互式操作   /bin/bash 指定交互式shell

    7)删除镜像

    # docker rmi ubuntu:18.10

    8)设置镜像标签

    # docker tag 678dfa38fcfa newImageName:tagName

    4.Docker容器

    1)启动容器

    当运行一个镜像的时候,便是开启了一个容器

    # docker run -itd ubuntu /bin/bash

    -d 是后台运行

    2)查看容器

    # docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    683a0787e0fe ubuntu:18.10 "/bin/bash" 22 hours ago Exited (0) 22 hours ago trusting_greider
    f1446545e319 registry "/entrypoint.sh /etc…" 13 days ago Up 10 minutes 0.0.0.0:5000->5000/tcp localregistr

    3)启动一个停止的容器

    # docker start 683a0787e0fe
    683a0787e0fe

    4)停止一个容器

    # docker stop 683a0787e0fe

    5)进入容器

    已上面的ubuntu为例:

    # docker exec-it 683a0787e0fe /bin/bash

    注:也可以用docker attach,但退出时会终止容器,exec则不会。

    6)导出和导入容器

       导出容器为容器快照文件:

    # docker export 683a0787e0fe > ubuntu.tar

       导入容器快照文件到镜像:

    # cat ubuntu.tar | docker import - test/ubuntu:v1
    sha256:bb83b07f0f72e2edf60b92d98e7ee6329fbaa6c8e354fb00a29cb08367f8a64f
    # docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    test/ubuntu v1 bb83b07f0f72 7 seconds ago 67.3M

       直接从容器创建一个新的镜像

    # docker ps
    CONTAINER ID   IMAGE     COMMAND       CREATED      STATUS         PORTS     NAMES
    ec8276fc6743   ubuntu    "/bin/bash"   4 days ago   Up 2 seconds             test
    # docker commit -a "pmgame" -m "TTT" ec8276fc6743 newtest:v2
    sha256:9aeee961850ac911fea3004ec0b530455ce82048cd24ca5c8cc4fe6d87a794be
    # docker images
    REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
    newtest               v2        9aeee961850a   6 seconds ago   195MB

       -a :提交的镜像作者        -c :使用Dockerfile指令来创建镜像

       -m :提交时的说明文字        -p :在commit时,将容器暂停

    7)删除容器

    # docker rm -f 683a0787e0fe

    清理所有处于终止状态的容器:

    # docker container prune
    WARNING! This will remove all stopped containers.
    Are you sure you want to continue? [y/N] y
    Deleted Containers:
    683a0787e0fec6a3fd2e700694493843575f76b128dd48909e34c417eb630c05
    f1446545e3199bc17344d3fc20e3b146f438cfed47f0f22495fc7b88e9e4e41c

    Total reclaimed space: 64B

    8)使用容器运行web应用

       8.1)载入镜像

    # docker pull training/webapp

       8.2)启动容器

    # docker run -d -P training/webapp python app.py
    711bdfb2340eb8ad75cdbbe312cafb172fc47ec3e88dccd1dd835ad95af9adc1
    注:-P
    将容器内部使用的网络端口随机映射到我们使用的主机上。

       8.3)查看容器

    # docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    711bdfb2340e training/webapp "python app.py" 46 seconds ago Up 45 seconds 0.0.0.0:49153->5000/tcp keen_davinc

       查看发现,Docker开放了 5000 端口(默认 Python Flask 端口)映射到主机端口49153上。

       

       也可以指定端口(将Docker的5000端口映射到本地3344端口):

    # docker run -d -p 3344:5000 training/webapp python app.py

       8.4)检查容器端口映射:

    # docker port 711bdfb2340e 
    5000/tcp -> 0.0.0.0:3344

       8.5)查看web应用程序日志

    # docker logs -f 591194e8bb9d
     * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
    192.168.1.65 - - [25/Mar/2021 06:47:54] "GET / HTTP/1.1" 200 -
    192.168.1.65 - - [25/Mar/2021 06:47:55] "GET /favicon.ico HTTP/1.1" 404 -

        8.6)查看底层信息

       该命令会返回一个JSON 文件记录着 Docker 容器的配置和状态信息。

    # docker inspect 591194e8bb9d
  • 相关阅读:
    守卫者的挑战(guard)
    pf
    放砖头
    多人背包
    TC-572-D1L2 未完!待续!
    方程的解数
    单词矩阵/贰五语言
    虫食算
    移动玩具
    UVA 125 统计路径条数 FLOYD
  • 原文地址:https://www.cnblogs.com/1016391912pm/p/14519429.html
Copyright © 2020-2023  润新知