zoukankan      html  css  js  c++  java
  • Docker镜像、私有仓库

    一、Docker镜像

    1、Docker镜像介绍

    • 应用发布的标准格式
    • 支撑一个Docker容器的运行

    2、Docker镜像的创建方法

    • 基于已有镜像容器创建
    • 基于本地模板创建
    • 基于Dockerfile创建

    3、基于已有镜像容器创建

    1.docker create -it 原镜像名 /bin/bash
    2.docker commit -m "new" -a "stf" 已有容器id 新镜像名:标签
    -m:说明信息
    -a:作者信息
    -p:生成过程中停止容器的运行
    docker images | grep 标签
    

    4、基于本地模板创建

    1.导入本地镜像debian-7.0-x86-minimal.tar.gz
    2.cat debian-7.0-x86-minimal.tar.gz | docker import - 镜像名:标签
    3.docker images | grep 标签
    

    5、基于Dockerfile创建

    • Dockerfile是由一组指令组成的文件
    • Dockerfile结构四部分  

               基础镜像信息

                维护者信息

               镜像操作指令

               容器启动时执行指令

    • Dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用"#"开头的注释
    • Dockerfile操作指令

    一、Dockerfile文件的概要

    指令 含义
    FROM镜像

    指定新镜像所基于的镜像,第一条指令必须为FROM指令没创建

    一个镜像就需要一条FROM指令

    MAINTAINER 说明新镜像的维护人信息
    RUN命令 在所基于的镜像上执行命令,并提交到新的镜像中
    CMD["要运行的程序"参数1""参数2] 指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能最后一条被执行
    EXPOSE端口号 指定新镜像加载到Docker时要开启的端口
    ENV环境变量变量值 设置一个环境变量的值,会被后面的RUN使用
    ADD源文件/目录目标文件/目录 将源文件辅助到目标文件,源文件要Dockerfile位于相同目录中,或者是一个url
    COPY 源文件、目录文件目录 将本地主机上的文件、目录复制到目标地点,源文件。目录要和DOCKERfile在同一个目录中
    VOLUME["目录"] 在容器中创建一个挂载带你
    user用户名/uid 指定运行容器时的用户
    WORKDIR路径 为后续的RUN/CMD/ENTRYPOINT指定工作目录
    ONBUILD命令 指定所生成的镜像作为一个基础镜像时所要运行的命令
    HEALTHCHECK 健康检查

    注:ADD命令还有解压的功能

    Dockerfile文件生成Apache镜像实例

    创建一个专门的文件夹

    [root@server1 ~]# mkdir httpd
    [root@server1 ~]# cd httpd  
    • vim Dockerfile (名字是固定的不能修改)
    • #新镜像基于基础镜像,基础镜像未下载,会自动先进行下载
     4 #基于centos:7的基础镜像
     5 FROM centos:7
     6 #维护镜像的用户信息
     7 MAINTAINER this is project
     8 #镜像操作指令安装apache软件10 RUN yum -y install httpd
    11 #开启80端口
    12 EXPOSE 80
    13 #复制网址首页文件
    14 ADD index.html /var/www/html/index.html
    15 #将执行脚本复制到镜像中
    16 ADD run.sh /run.sh
    17 RUN chmod 755 /run.sh
    18 #启动容器时执行脚本
    19 CMD ["/run.sh"]  
    • 制作脚本
    vi run.sh
    
    #!/bin/bash
    rm -rf /run/httpd/*
    exec /usr/sbin/apachectl -D FOREGROUND  
    • 制作主页
    vi index.html
    <h1>this is my web</h1>
    

      

    •  生成镜像
    [root@server3 httpd]# docker build -t httpd:xin .
    Sending build context to Docker daemon  4.096kB
    Step 1/8 : FROM centos:7
     ---> 8652b9f0cb4c
    Step 2/8 : MAINTAINER The project
     ---> Using cache
     ---> fcdb326ea1cf
    Step 3/8 : RUN yum -y install httpd
     ---> Using cache
     ---> c78dfafc934c
    Step 4/8 : EXPOSE 80
     ---> Using cache
     ---> 2d022d3dd3a9
    Step 5/8 : ADD index.html /var/www/html/index.html
     ---> Using cache
     ---> c42927859f05
    Step 6/8 : ADD run.sh /run.sh
     ---> Using cache
     ---> 731f74992c4d
    Step 7/8 : RUN chmod 755 /run.sh
     ---> Using cache
     ---> 76bea985bb59
    Step 8/8 : CMD ["/run.sh"]
     ---> Using cache
     ---> 322afbe09de4
    Successfully built 322afbe09de4
    Successfully tagged httpd:xin
    
    •  新镜像运行容器 
    [root@server3 httpd]# docker run -d -p 2222:80 httpd:xin 
    15c343794eaca839253764eaec08d17d2693e8dc5ee5c9e66b187e4f6841da81
    [root@server3 httpd]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS                  NAMES
    15c343794eac        httpd:xin           "/run.sh"           2 seconds ago        Up 2 seconds                    0.0.0.0:2222->80/tcp   mystifying_booth
    
    •   测试

     二、私有仓库

    1、拉取镜像及修改配置文件,端口号:5000

    [root@server3 ~]# docker pull registry
    Using default tag: latest
    latest: Pulling from library/registry
    cbdbe7a5bc2a: Pull complete 
    47112e65547d: Pull complete 
    46bcb632e506: Pull complete 
    c1cc712bcecd: Pull complete 
    3db6272dcbfa: Pull complete 
    Digest: sha256:8be26f81ffea54106bae012c6f349df70f4d5e7e2ec01b143c46e2c03b9e551d
    Status: Downloaded newer image for registry:latest
    docker.io/library/registry:latest
    
    [root@server3 httpd]# vi /etc/docker/daemon.json 在客户终端中设置,指定私有仓库位置
    {
       "insecure-registries": ["20.0.0.30:5000"],
      "registry-mirrors": ["https://27vtjya6.mirror.aliyuncs.com"]
    }
    
    systemctl restart docker
    生成registry容器,开放5000端口
    docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
    在这里-v 指定外部存储时会自动创建此目录。
    #因为docker重启,容器关闭,需要重启
    docker ps -a #查看仓库id
    docker start 仓库id
    镜像打标签docker tag 原镜像名 仓库IP:端口/镜像名
    docker tag registry:latest 20.0.0.30:5000/registry
    上传镜像
    [root@server3 httpd]# docker push 20.0.0.30:5000/registry
    The push refers to repository [20.0.0.30:5000/registry]
    b3f465d7c4d1: Pushed 
    a5f27630cdd9: Pushed 
    239a096513b5: Pushed 
    f5b9430e0e42: Pushed 
    3e207b409db3: Pushed   

    验证

    [root@server3 httpd]# curl -XGET http://20.0.0.30:5000/v2/_catalog
    {"repositories":["registry"]}
    删除原有的测试从私有仓库下载镜像
    [root@server3 httpd]# docker rmi 20.0.0.30:5000/registry:latest
    [root@server3 httpd]# docker pull 20.0.0.30:5000/registry
    Using default tag: latest
    latest: Pulling from registry
    Digest: sha256:e09ed8c6c837d366a501f15dcb47939bbbb6242bf3886270834e2a0fa1555234
    Status: Downloaded newer image for 20.0.0.30:5000/registry:latest
    

    三、Docker 数据卷和数据卷容器

    •  数据卷:挂载宿主系统的存储空间:用于宿主机与容器数据同步
    •  数据卷容器:挂载容器的存储空间:用于容器间的数据同步

     

    #数据卷创建
    下载centos
    docker pull centos
    讲宿主机目录挂载到容器目录
    docker run -v /var/www:/data --name web1 -it centos /bin/bash
    进入容器
    查看当前目录
    

    进入data目录
    [root@20add2122be4 /]# cd data
    [root@20add2122be4 data]# echo "123123" > test123 
    [root@20add2122be4 data]# cat test123
    123123
    exit
    在宿主目录上查看
    [root@server3 ~]# cd /var/www
    [root@server3 www]# cat test123
    123123
    

    2、数据卷容器创建

     

    在容器里建立目录
    [root@server3 www]# docker run --name web102 -v data1 -v data2 -it centos /bin/bash
    [root@6139a1fdb392 /]# ls
    bin    data2  etc   lib    lost+found  mnt  proc  run	srv  tmp  var
    data1  dev    home  lib64  media       opt  root  sbin	sys  usr
    在data1 和 data2 分别插入文件
    [root@6139a1fdb392 data1]# echo "123" > 111.txt 
    [root@6139a1fdb392 data2]# echo "111" > 222.txt
    exit
    新建一个容器将其挂载到数据卷容器web02,并查看同步数据
    [root@server3 www]# docker run -it --volumes-from web102 --name db1 centos /bin/bash
    [root@c7233bd3b530 /]# ls
    bin    data2  etc   lib    lost+found  mnt  proc  run	srv  tmp  var
    data1  dev    home  lib64  media       opt  root  sbin	sys  usr
    [root@c7233bd3b530 /]# cat data1
    cat: data1: Is a directory
    [root@c7233bd3b530 /]# cd data1
    [root@c7233bd3b530 data1]# cat 111.txt
    123
    [root@c7233bd3b530 data1]# cd ../data2
    [root@c7233bd3b530 data2]# cat 222.txt
    

      

     四、端口映射

    • -P:随机生成端口映射
    • -p:指定端口映射
    [root@node2 ~]# docker run -d -P httpd:latest
    [root@node2 ~]# docker run -d -p 1213:80 httpd:latest
    

      

     

     五、容器互联(使用centos镜像)

    [root@node2 ~]# docker run -itd -P --name web1 centos /bin/bash
    3f1d9e65b6ca081ba4c9a08f0d89c6962e5ba894d8ea02dd9dd041601046b989#创建并运行容器web1,端口号自动映射
    [root@node2 ~]# docker run -itd -P --name web22 --link web1:web1 centos /bin/bash
    d11737249ba5677802fad17f60414eeff1856a1a27e7e49e1e1ac17097d6d1fc#创建并运行容器取名web22,链接到web1和其通信  

     进入web22容器,测试

      

     

      

      

  • 相关阅读:
    批量插入以及数据存在重复就进行更新操作
    插件-过滤器
    NamedParameterJdbcTemplate
    菜鸟python---文件 + 操作
    菜鸟python---文件操作
    菜鸟python---以后会遇到的坑
    菜鸟python---二次编码
    菜鸟python---基础数据类型补充
    菜鸟python---深浅拷贝
    菜鸟python---集合
  • 原文地址:https://www.cnblogs.com/tianzhendengni/p/14047100.html
Copyright © 2011-2022 走看看