Docker数据管理与网络通信

Posted on 2020-06-17 19:52  留不住的时间  阅读(215)  评论(0编辑  收藏  举报

一:使用国内仓库

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