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)浏览器http://192.168.1.100:32764
# docker ps -a //查询得知,内部的80端口映射到本机的32769端口
#docker run -d -p(小p)
#docker ps -a
容器互联
容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道从而实现的互联。注意:容器互联是通过容器的名称来执行的,“--name”选项可以给容器创建一个友好的名称,这个名称是唯一的,如果已经命名了一个相同名称的容器,当要再次使用这个名称的时候,需先使用“docker run”来删除之前创建的同名容器。
(1)创建源容器
#docker run -d -P(大p)
(2)创建接收容器
#docker run -d -P(大p)
(3)测试容器互联
# docker exec -it web2 /bin/bash
#ping web1 (平通测试成功)这时可以看出web2容器已经和web1容器建立互联关系
#ping web (不通证明没有创建互联)
如果现在还要在加入一个容器C,使容器C与容器A和容器B进行互联,进行一下操作
# docker run -d -P(大p)
# docker exec -it web3 /bin/bash
# ping web1通测试成功
# ping web2通测试成功
docker与外部服务通信
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
SpringBoot使用Feign进行服务间通信
SpringBoot使用Feign进行服务间通信
Feign SpringBoot 通信 -
树莓派串口与外部设备通信
树莓派串口与外部设备通信,树莓派串口与外部设备通信。
树莓派 ubuntu 串口 ico -
docker desktop链接其他服务器的docker docker与外部主机通信
文章索引:1、docker入门之镜像、容器和仓库2、docker的安装与镜像加速器的配置3、docker系列基础课程--如何获取镜像、列出镜像和删除镜像4、docker系列基础课程:利用commit 理解镜像构成5、docker系列基础课程:使用 Dockerfile 定制镜像6、docker系列基础课程:Dockerfile 指令详解(1)7、docker系列基础课程:Dockerfil
docker 容器之间通信 docker 端口映射 udp docker 网络配置 docker增加端口映射 docker外部执行容器内部命令