zoukankan      html  css  js  c++  java
  • Docker数据管理与网络通信

    一:使用国内仓库

    1:修改内核参数

    [root@localhost dockerfile]# vim /etc/sysctl.conf

    在末尾添加:

    net.ipv4.ip_forward=1

    2:对于大于1.9docker版本可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

    此文件原本不存在,需要创建

    [root@localhost ~]# vim /etc/docker/daemon.json

    添加如下代码:

    {

    "registry-mirrors": ["https://v10sz3o0.mirror.aliyuncs.com"],

    "insecure-registries": ["192.168.1.149:8000"]

    }

    [root@localhost ~]# systemctl daemon-reload

    [root@localhost ~]# systemctl restart docker

    注释:

    https://v10sz3o0.mirror.aliyuncs.com为申请的阿里专属加速器

    如果没有专属加速器,可以使用其他国内仓库:https://registry.docker-cn.com

    没有此文件表示使用默认的docker官方仓库

    Docker镜像加速地址可以在阿里上申请

    https://cr.console.aliyun.com/cn-hangzhou/mirrors

    3:测试拉取镜像

    二:构建私有仓库

    1:在仓库服务器上构建私有仓库

    1)拉取registry镜像

    [root@localhost ~]# docker pull 192.168.1.149:8000/registry

    或导入registry镜像

    [root@localhost ~]# docker load --input registry

    2)启动registry容器,并挂载本地目录

     [root@localhost ~]# docker run -d -p 8000:5000 -v /data/registry:/var/lib/registry registry

    7e0ba35b8a0c7c85df48a51857b43466bc57e5b7f57ab416d5e42dd31258290e

    注释:

    Registry默认的镜像目录是/var/lib/registry,老版本的在/tmp/registry目录

    -v选项是将宿主机的目录/data挂载给registry/var/lib/registry目录

    注意:docker镜像仓库的端口号默认为5000

    [root@localhost ~]# docker ps -a

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

    7e0ba35b8a0c        registry            "/entrypoint.sh /etc…"   9 seconds ago       Up 7 seconds        0.0.0.0:5000->5000/tcp   relaxed_poincare

    2:在Docker主机上使用私有仓库

    1)修改仓库地址

    [root@localhost ~]# vim /etc/docker/daemon.json

    添加如下代码:

    {

    "insecure-registries": ["192.168.10.105:8000"]

    }

    [root@localhost ~]# systemctl daemon-reload

    [root@localhost ~]# systemctl restart docker

    (2)拉取镜像

    [root@localhost ~]# docker pull 192.168.10.105:8000/centos1804

    (3)上传镜像

    将镜像标签重命名(必须)

    [root@localhost ~]# docker tag 192.168.10.105:8000/centos1804 192.168.10.149:8000/mycentos 

    上传到私有仓库

    [root@localhost ~]# docker push 192.168.10.105:8000/mycentos

    一:Docker镜像的创建

    1:基于已有的镜像创建(此处模拟一个环境迁移的步骤)

    (1)先拉取或导入一个镜像

    [root@localhost ~]# docker pull 192.168.1.149:8000/centos1804

    (2)使用上面的镜像创建一个容器

    [root@localhost ~]# docker run -dit 192.168.1.149:8000/centos1804 /bin/bash

    [root@localhost ~]# docker ps -a

    (3)登录到容器

    [root@localhost ~]# docker exec -it ae /bin/bash

    登录成功后可以对容器进行修改,比如创建文件或目录,修改系统参数等

    (4)退出容器后,用此容器创建一个新的镜像

    [root@localhost ~]# docker commit ae mycent:latest

    (5)导出此镜像

    [root@localhost ~]# docker save -o mycent c5

    (6)将此镜像拷贝到其他服务器中导入,完成环境的迁移

    2:基于本地模板创建

    (1)下载模板

    [root@localhost ~]# wget http://download.openvz.org/template/precreated/ubuntu-12.04-x86_64-minimal.tar.gz

    (2)导入模板

    [root@localhost ~]# cat ubuntu-12.04-x86_64-minimal.tar.gz |docker import - myubuntu:new

    [root@localhost ~]# docker images

    注意:横杠两边有空格

    二:基于DockerFile创建镜像

    1什么是Dockerfile

    Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像。

    Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建

    2Dockerfile指令的特征:

      只支持Docker自己定义的一套指令,不支持自定义

      大小写不敏感,但是建议全部使用大写

      根据Dockerfile的内容顺序执行

    3:典型的Dockerfiler

    [root@localhost ~]# mkdir /opt/dockerfile

    [root@localhost ~]# cd /opt/dockerfile/

    (1)设置内核参数(必须有这一步,否则镜像无法桥接到宿主网络)

    [root@localhost dockerfile]# vim /etc/sysctl.conf

    在末尾添加:

    net.ipv4.ip_forward=1

    1)创建dockerfile

    [root@localhost dockerfile]# vim dockerfile

    FROM 192.168.1.129:8000/centos1804

    MAINTAINER The CentOS Project <cloud-ops@centos.org>

    #RUN yum -y update

    RUN rm -rf /etc/yum.repos.d/*

    ADD myrepo.repo /etc/yum.repos.d/myrepo.repo

    RUN yum clean all

    RUN yum -y install httpd

    EXPOSE 80

    ADD index.html /var/www/html/index.html

    ADD run.sh /run.sh

    RUN chmod 775 /run.sh

    #RUN systemctl disable httpd

    CMD ["/run.sh"]

    注意:如果使用私有仓库

    FROM 192.168.1.149:8000/centos

    2)创建apache的启动脚本

    [root@localhost dockerfile]# vim run.sh

    #!/bin/bash

    rm -rf /run/httpd/*

    exec /usr/sbin/apachectl -D FOREGROUND

     

    注释:

    rm -rf /run/httpd/*  清除http缓存

    exec /usr/sbin/apachectl -D FOREGROUND  启动http进程

    3)创建网页测试文件

    [root@localhost dockerfile]# echo "www.benet.com">index.html

    (3)创建yum仓库文件

    [root@localhost dockerfile]# vim myrepo.repo

    [myrepo]

    name=myrepo

    baseurl=ftp://192.168.1.149/yum-1804

    gpgcheck=0

    enabled=1

    注意:提前在宿主机上部署好ftpyum

     

    4)生成镜像

    [root@localhost dockerfile]# docker build -t myhttpd .

    注意:最后有个点,点前有空格

    --no-cache 构建镜像时不使用缓存

    -f 指定dockerfile的位置

    -t 指定镜像的标签信息

    5)查看镜像

    [root@localhost ~]# docker images

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

    myhttpd             latest              55a6d9335cca        3 minutes ago       396MB

    6)创建并开启容器

    [root@localhost ~]# docker run -d -i -p 8080:80 myhttpd

    c179d1acb9812f2412b2cb9ef00d22e249c7e6ebdcf7ee8acf180df36e0960c4

    [root@localhost ~]# docker ps -a

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

    c179d1acb981        myhttpd             "/run.sh"                4 seconds ago       Up 2 seconds        0.0.0.0:8080->80/tcp     thirsty_roentgen

    b33c723b6528        registry            "/entrypoint.sh /etc…"   10 minutes ago      Up 9 minutes        0.0.0.0:5000->5000/tcp   practical_lumiere

    (6)查看容器

    [root@localhost ~]# docker ps -a

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                  NAMES

    c7cca4a122ef        myimage             "/run.sh"                8 seconds ago       Up 6 seconds                  0.0.0.0:8080->80/tcp   adoring_noether

    (7)测试网站访问

    [root@localhost ~]# curl http://192.168.10.105:8080

    test html

    四:Docker的数据管理

    1:创建数据卷

    1)创建卷

    [root@localhost ~]# docker run -d -it -v /data1 -v /data2 --name cent01 192.168.1.149:8000/centos1804 /bin/bash

    febaed9a3ddc925470346e5bf9b8bd78f15c6d963a3bae4bc1a7dc84a41e4430

    [root@localhost ~]# docker ps -a

    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES

    79b0c86314a3         192.168.1.149:8000/centos1804              "/bin/bash"         3 hours ago         Up 3 hours                                   mycent01

    注释:

    -v:在容器中创建数据卷

    2)进入容器可以看到创建的两个卷

    [root@localhost ~]# docker exec -it 63 /bin/bash

    2:在创建数据卷的同时挂载主机目录

    (1)创建卷

    [root@localhost ~]# docker run -d -it -v /web1:/data1 -v /web2:/data2 --name cent02  192.168.1.149:8000 /bin/bash

    2)进入容器,在卷中创建一个测试文件

    [root@localhost /]# docker exec -it cent02 /bin/bash

    [root@febaed9a3ddc /]# cd /data1

    [root@febaed9a3ddc data1]# touch test

    [root@febaed9a3ddc data1]# exit

    Exit

    3)主机上查看挂载点的测试文件

    [root@localhost /]# ls /web1

    test

    2:典型案例

    lamp创建数据卷,并挂载到主机上,在主机上发布网站

    (1)拉取或导入lamp镜像

    [root@localhost ~]# docker pull 192.168.1.149:8000/tutum-lamp

    2)创建数据卷并将容器的网站根目录挂载主机目录

    [root@localhost ~]# docker run -dit -v /www:/var/www/html -p 80:80 --name mylamp 192.168.1.149:8000/tutum-lamp /bin/bash -c /run.sh

    注意:

    Lamp的容器网站根目录在/var/www/html

    [root@localhost ~]# docker ps -a

    (2)查看mylamp容器的ip地址

    [root@localhost ~]# docker inspect mylamp | grep IP

    注释:

    查看容器的ip地址

    (3)创建测试网页

    [root@localhost ~]# cd /www

    [root@localhost www]# echo "aa">index.html

    (4)访问网站

    (5)创建php测试网站

    [root@localhost ~]# cd /www

    [root@localhost www]# vim index.php

    <?php

    phpinfo();

    ?>

    (6)访问网站

    (7)创建数据库连接测试文件

    [root@localhost ~]# vim /www/index.php

    <?php

    $link=mysqli_connect('172.17.0.2','root','');

    if($link)

    echo "CONNECT SUCCESS";

    mysqli_close($link);

    ?>

    注意:ip地址是容器的ip,数据库不要设置密码,保持容器参数默认即可

    3:数据卷容器

    数据卷容器用于在容器之间共享数据

    1)用镜像centos创建容器mycent01,并为此容器创建数据卷

    [root@localhost ~]# docker run -d -it -v /data1 -v /data2 --name mycent01  192.168.1.149:8000/centos1804 /bin/bash

    2)用镜像centos创建容器mydb,并挂载mycent01中的数据卷

    [root@localhost ~]# docker run -d -it --volumes-from mycent01 --name mydb  192.168.1.149:8000/centos1804

    3)测试数据共享

    [root@localhost ~]# docker exec -it mycent01 /bin/bash

    [root@5ecd613c88b3 /]# touch /data1/aaa

    [root@5ecd613c88b3 /]# touch /data2/bbb

    [root@5ecd613c88b3 /]# exit

    Exit

    [root@localhost ~]# docker exec -it mydb /bin/bash

    [root@1cefc839e1cc /]# ls /data1

    aaa

    [root@1cefc839e1cc /]# ls /data2

    bbb

    4:端口映射

    将容器的指定端口映射给主机的ip对应的端口

    [root@localhost ~]# docker run -d -it -p 8080:80 -v /www:/var/www/html --name mylamp07 192.168.1.149:8000/tutum-lamp /bin/bash -c /run.sh

    注意:

    访问测试时,因为使用的端口映射,要使用主机的自身ip访问映射出来的端口

    此案例访问时用http://192.168.10.105:8080

    5:容器互联

    1)创建源容器

    [root@localhost ~]# docker run -d -it -P --name web1 centos /bin/bash

    (2)创建接收容器

    [root@localhost ~]# docker run -d -it -P --name web2 --link web1:web1 192.168.1.149:8000/centos1804 /bin/bash

    注释:--link web1:web1

    第一个web1是容器web1

    第二个web1是在web2容器中生成web1的名称,是一个别名

    (3)查看两个容器的IP

    [root@localhost ~]# docker inspect web1 | grep IP

    [root@localhost ~]# docker inspect web2 | grep IP

    4)进入容器ping测试对方容器的名称

    [root@localhost ~]# docker exec -it web2 /bin/bash

    [root@8249174c6e4c /]# cat /etc/hosts

    127.0.0.1 localhost

    ::1 localhost ip6-localhost ip6-loopback

    fe00::0 ip6-localnet

    ff00::0 ip6-mcastprefix

    ff02::1 ip6-allnodes

    ff02::2 ip6-allrouters

    172.17.0.8 web1 b5c4b419b2b1

    172.17.0.9 8249174c6e4c

    [root@8249174c6e4c /]# ping web1

  • 相关阅读:
    Java Excel导入
    Git在Eclipse中忽略文件提交
    Git客户端安装(仅限windows用户)
    Java输出流文件下载
    Centos6.3源码安装Mysql-5.5.34
    Centos6.3安装Mongodb2.2.4
    Jacob操作Word各格式转换参数
    sublime text3使用小结
    获得select下拉框的值
    sublim text3 配置
  • 原文地址:https://www.cnblogs.com/ccshi/p/13154461.html
Copyright © 2011-2022 走看看