Docker----数据库管理与网络通信

                                                               (实验准备1台虚拟机--网络yum源,网络centos-7-x86_64_minimal.tar.gz包)

1号机#

#桥接网络例如ip:192.168.1.10

#ifdown ens33;ifup ens33

#systemctl stop firewalld

#setenforce 0

#yum -y install  https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

#yum -y install docker

# ystemctl  start  docker \\启动
#systemctl  enable  docker  \\设为开机自动启动
#docker  version \\查看docker版本
#docker  search  dhcp                      搜索镜像(默认搜索路径:dockerhub)(下面为显示结果项)
INDEX              NAME          DESCRIPTION            STARS          OFFICIAL      AUTOMATED
索引                   镜像名             描述                         星级                  官方创建              自主创建
#docker  pull  docker.io/networkboot/dhcpd        下载镜像(时间看带宽)

#docker  images                              查看本地镜像

#docker  tag  docker.io/networkboot/dhcpd    dhcp:dhcp          修改镜像标签

#docker  run  -d  dhcp:dhcp  /bin/bash  -c  "while  true;do  echo  ok;done;" 由镜像创建容器并运行命令:作为后台进程,持续执行(注意:-d代表后台守护进程)

#docker ps -a            启动后查看容器运行状态up为运行状态

#docker  commit  -m  "newdhcp"  -a  "t3117"  10e727b392b5  centos:dhcp1注释:-m:描述      -a:作者信息      -p:把正在运行中的容器停止  //查看已经镜像并复制后,用docker comint 创建一个新镜像-------------------(基于已有镜像创建新镜像)

#docker  images

由本地模板创建镜像适用于创建全新纯净版底层系统)

#wget  http://download.openvz.org/template/precreated/centos-7-x86_64-minimal.tar.gz           或者:上传已有centos镜像

#cat  centos-7-x86_64-minimal.tar.gz  | docker  import  -  docker:centos7.1    // 命令创建镜像

#docker images

基于Dockfile创建(适用于高级服务搭建和配置)

#docker search centos

#docker pull docker.io/centos                 //下载centos

#docker images

#docker save -o centos docker.io/centos              //将docker.io/ceonts改名为centos

#docker load --input centos  //将centos上传到本地镜像

#mkdir  apache

#cd apacke/

#ls

#vim Dockerfile

FROM  centos \\指定基于的基础镜像,镜像centos必须存在
MAINTAINER  THE CENTOS\\维护该镜像的用户信息
RUN  yum  -y  install  httpd  \\镜像中的操作命令,可写多条
EXPOSE  80 \\容器开放的端口CMD  ["/usr/sbin/sshd","-D"]  \\启动容器时执行命令,可写多条但仅最后一条生效

ADD index.html  /var/www/html/index.html  // 复制网站首页文件
ADD run.sh  /run.sh  //将脚本复制到镜像中

RUN chmod 775 /run.sh   

RUN systemctl disable httpd  //设置apache服务不自行启动

CMD ["/run.sh"]

保存退出

#vim run.sh  //编写执行脚本

添加:
#!/bin/bash
rm  -rf  /run/httpd/*         清理httpd的缓存
exec  /usr/sbin/apachectl  -D  FOREGROUND   启动apache服务
保存退出

#echo "www.benet.com" > index.html         //创建测试页面

#ls       (出现Dockerfile, index.html,run.sh)

#docker  build  -t  httpd:centos7  .      \\使用刚编好的Dockerfile脚本自动运行生成镜像注意:最后的“.”代表当前Dockerfile所在目录

#docker images        //查看新生成的镜像httpd:centos

#docker  run  -d  -p  12345:80  httpd:centos7         //将生成的镜像加载到容器中运行映射端口

#docker ps -a   //查看新镜像

浏览器:httpd://192.168.1.100:12345          //检查网页

#cd

创建私有仓库

#docker pull registry   //上传registry镜像到仓库

#docker  tag  docker.io/registry  192.168.1.100:5000/registry        修改镜像tag(必须指定ip和端口)

#systemctl start firewalld         //需要启动防火墙

#vim  /etc/sysconfig/docker                修改docker配置文件,指定私有仓库url
添加:
OPTIONS='-selinux-enabled  -insecure-registry=192.168.1.100:5000'
保存退出

vim  /etc/docker/daemon.json
添加:
{
"registry-mirrors":  [  "https://pee6w651.mirror.aliyuncs.com"],"insecure-registries":  ["192.168.1.104:5000"]
}
保存退出

#systemctl restart docker

#docker  run  -d  -p  5000:5000  -v  /data/registry:/tmp/registry    registry     使用下载好的registry镜像启动一个容器,默认情况下仓库存放于容器内的/tmp/registry目录下,使用“-v”选项可以将本地目录挂载到容器内的/tmp/registry目录下使用,这样就不怕容器被删除后镜像也会随之丢失  ---启动私有仓库,监听5000端口

#docker  push  192.168.1.100:5000/registry    //上传本地镜像到服务器上

# docker rmi -f 192.168.1.1:5000/registry               //删除本地镜像进行测试

# docker pull 192.168.1.1:5000/registry                   //从本地私有仓库进行下载
# docker images | grep 192.168.1.1:5000/registry                                    私有仓库搭建完成,验证成功!

数据卷

数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现在宿主机与容器之间的迁移,数据卷的使用类似于Linux下对目录进行的挂载操作

创建数据卷

在“docker run”命令中使用“-v”选项可以在容器内创建数据卷。多次使用“-v”选项可以创建多个数据卷。使用“--name”选项可以给容器创建一个友好的自定义名称

# docker  run  -d  -v  /data1  -v  /data2  --name  web  httpd:centos           通过httpd:centos镜像创建名为web的容器,并同时创建数据卷/data1和/data2            -v:可在容器内创建数据卷   --name:给容器创建一个友好的自定义名称

#docker exec -it web /bin/bash //进入容器并查看两个目录是否存在

#ls -l

#exit

挂载主机目录为数据包

使用“-v”选项可以在创建数据卷的同时,将宿主机的目录挂载到数据卷上使用,以实现宿主机与容器之间的数据迁移。

#docker  run  -d  -v  /var/www:/data1  --name  web-1  httpd:centos 使用httpd:centos镜像创建一个名为web1的容器,并将宿主机的/var/www目录挂载到容器的/data1目录上

#cd /var/www/

#touch file          

#ls         (出现file)

#cd

#docker exec -it web-1 /bin/bash

#ls

#cd data1/

#ls          (在容器数据卷中创建的数据在宿主机相应的挂载目录中可见)

.数据卷容器

如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器就是一个普通的容器,专门提供数据卷给其他容器挂载使用

# docker run -it --volumes-from web --name db1 httpd:centos /bin/bash  //使用实现创建好的容器web,使用“--volumes-from”来挂载web1容器中的数据间到新的容器db1

# docker start db1           

#docker exec -it db1 /bin/bash

#cd data1

# touch file   //db1容器在/data1目录下创建一个新的文件

#ls                   (出现file)

# exit

#docker exec -it web /bin/bash

#cd data1/

#ls 

#exit                                   -----------------------(证明数据共享)

Docker网络通信
Docker提供了映射容器端口到宿主机和容器互联机制来为容器提供网络服务。

1.端口映射
在启动容器的时候,如果不指定对应的端口,在容器外是无法通过网络来访问容器内的服务的。Docker提供端口映射机制来将容器内的服务提供给外部网络访问,实质上就要将宿主机的端口映射到容器中,使得外部网络访问宿主机的端口可以访问容器内的服务。

实现端口映射,需要在运行“docker run”命令时使用“-P(大写)”选项可以实现随机映射,Docker会随机映射一个端口范围在49000~49900的端口到容器内部开放的网络端口,但是不是绝对的,也有例外不会映射到这个范围内。这种情况并不是很常用。
# docker run -d --name httpd  -P(大P) httpd:centos //创建容器httpd,并随即生成一个端口----自动映射端口

浏览器http://192.168.1.100:32764

# docker ps -a           //查询得知,内部的80端口映射到本机的32769端口

#docker run -d  -p(小p) 49888:80 httpd:centos //手动映射端口,将容器的80端口映射到本机的49888端口这种方法并不常用。一般都使用“-p(小写)”指定要映射的端口

#docker ps -a

容器互联
容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道从而实现的互联。

注意:容器互联是通过容器的名称来执行的,“--name”选项可以给容器创建一个友好的名称,这个名称是唯一的,如果已经命名了一个相同名称的容器,当要再次使用这个名称的时候,需先使用“docker run”来删除之前创建的同名容器。

(1)创建源容器

#docker run -d -P(大p) --name web1 httpd:centos //使用“docker run”命令创建容器A,指定名称为web1

(2)创建接收容器

#docker run -d -P(大p) --name web2 --link web1:web1 httpd:centos   //使用“docker run”命令创建容器B,指定名称为web2,使用“--link”选项与web1互联

(3)测试容器互联

# docker exec -it web2 /bin/bash

#ping web1      (平通测试成功)这时可以看出web2容器已经和web1容器建立互联关系

#ping web     (不通证明没有创建互联)

如果现在还要在加入一个容器C,使容器C与容器A和容器B进行互联,进行一下操作

# docker run -d -P(大p) --name web3 --link web1:web1 --link web2:web2 httpd:centos //创建容器C,使其与容器A、容器B进行互联

# docker exec -it web3 /bin/bash

# ping web1通测试成功

# ping web2通测试成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值