docker网络

理解docker0

将之前学习的镜像全部删除,查看一下ip,发现基础的网卡有三个,分别如下

[root@izbp1bc82otjd8cslsu9zsz ~]# ip attr
Object "attr" is unknown, try "ip help".
[root@izbp1bc82otjd8cslsu9zsz ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lo  # 本机回环地址valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:16:3e:19:b0:15 brd ff:ff:ff:ff:ff:ffinet 172.26.24.2/18 brd 172.26.63.255 scope global dynamic eth0 # 阿里云内网地址valid_lft 314794283sec preferred_lft 314794283sec
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN link/ether 02:42:cf:90:6f:f8 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 # docker0 地址valid_lft forever preferred_lft forever

这时候我们尝试启动一个tomcat服务器

[root@izbp1bc82otjd8cslsu9zsz ~]# docker run  -d -P --name tomcat01 tomcat
078664df26cc252f74ff55eb5f855ffe0c0a1025093892330d07e101f0f81874
# 通过
docker inspect 容器名  可以获取容器的详细信息,包括ip

从Linux服务器上ping内部容器,是可以ping的通的

[root@izbp1bc82otjd8cslsu9zsz ~]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.134 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.081 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.054 ms
64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.053 ms

在Linux的网卡中也会多出一个网卡,每启动一个容器就会生成一个网卡

[root@izbp1bc82otjd8cslsu9zsz ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:16:3e:19:b0:15 brd ff:ff:ff:ff:ff:ffinet 172.26.24.2/18 brd 172.26.63.255 scope global dynamic eth0valid_lft 314793055sec preferred_lft 314793055sec
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether 02:42:cf:90:6f:f8 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft forever
105: vethd69f9f8@if104: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP link/ether b2:d0:0e:26:bf:bf brd ff:ff:ff:ff:ff:ff link-netnsid 0
# 我们发现这个容器带来的网卡都是一对一对的
# 桥接模式,使用的技术是evth-pair技术

这时候我们就会想着,两个独立运行的容器,是否能相互ping的通

# 最新版的docker镜像被阉割严重,使用ip addr 命令或者 ping命令需要进入容器安装
apt update && apt install -y iproute2 # 这是ip addr命令
apt -y install iputils-ping # 这是安装ping命令
# 需要注意的是 ping必须ping的是ip地址
[root@izbp1bc82otjd8cslsu9zsz ~]# docker exec -it tomcat01 ping 127.17.0.3
PING 127.17.0.3 (127.17.0.3) 56(84) bytes of data.
64 bytes from 127.17.0.3: icmp_seq=1 ttl=64 time=0.082 ms
64 bytes from 127.17.0.3: icmp_seq=2 ttl=64 time=0.045 ms
64 bytes from 127.17.0.3: icmp_seq=3 ttl=64 time=0.059 ms

画图来理解一下两个不同的容器间是如何交互的

两个不同的容器间是相互隔离的,不能直接交互,需要通过docker0来交互

自定义网络

查看docker网络

[root@izbp1bc82otjd8cslsu9zsz ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
616acb3593a0   bridge    bridge    local
dafcf4fc58c1   host      host      local
390a55c28643   none      null      local
# bridge 桥接,docker默认的
# none 不配置网络
# host 与宿主机共享网络
# container 容器网络互通(用的少)

创建docker网络

# 不了解如何创建之前,我们都可以使用help命令
[root@izbp1bc82otjd8cslsu9zsz ~]# docker network create --helpUsage:  docker network create [OPTIONS] NETWORKCreate a networkOptions:--attachable           Enable manual container attachment--aux-address map      Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])--config-from string   The network from which to copy the configuration--config-only          Create a configuration only network-d, --driver string        Driver to manage the Network (default "bridge") # 默认为bridge--gateway strings      IPv4 or IPv6 Gateway for the master subnet # 网关传输到哪--ingress              Create swarm routing-mesh network--internal             Restrict external access to the network--ip-range strings     Allocate container ip from a sub-range--ipam-driver string   IP Address Management Driver (default "default")--ipam-opt map         Set IPAM driver specific options (default map[])--ipv6                 Enable IPv6 networking--label list           Set metadata on a network-o, --opt map              Set driver specific options (default map[])--scope string         Control the network's scope--subnet strings       Subnet in CIDR format that represents a network segment # 必须填写网关

接下来我们就自定义一个网络

[root@izbp1bc82otjd8cslsu9zsz ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
94fa3626b5c0cca4b4a29ede86fb768f07aeb32666ce9f0899b5ed51dbf7e654
[root@izbp1bc82otjd8cslsu9zsz ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
616acb3593a0   bridge    bridge    local
dafcf4fc58c1   host      host      local
94fa3626b5c0   mynet     bridge    local
390a55c28643   none      null      local

通过这个网络创建两个容器,这时候两个容器是可以直接通过名称ping通的

自定义的网络配置很高,功能很齐全

[root@izbp1bc82otjd8cslsu9zsz ~]# docker run -d -P --name tomcat-net01 --net mynet tomcat
6a7dddff6c9c3c2e2ffa1025ca0389434276db466d6f0725f25104007ce899c3
[root@izbp1bc82otjd8cslsu9zsz ~]# docker run -d -P --name tomcat-net02 --net mynet tomcat
ba435de77b8957d392a504accd03803e8cac66c5d439ed52b858ee019b071104[root@izbp1bc82otjd8cslsu9zsz ~]# docker exec -it tomcat-net01 ping tomcat-net02
PING tomcat-net02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat-net02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.075 ms
64 bytes from tomcat-net02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.087 ms
64 bytes from tomcat-net02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.108 ms

实战演练

说了这么多,docker我们也基本介绍完了,通过现在的所学知识,小黄已经觉得将自己的个人博客部署在阿里云服务器上了,我们来看一下具体操作应该如何

1、将项目打成jar包

只需要执行maven中的package即可

2、编写Dockerfile文件

有了dockerfile文件,我们项目在发送给需求人的时候,就只需要发送jar包和dockerfile文件即可,dockerfile文件可以帮我们构建docker镜像

FROM java:8MAINTAINER YellowStar <614028802@qq.com>VOLUME /tmp ADD YellowStarBlog-0.0.1-SNAPSHOT.jar app.jar RUN bash -c 'touch /app.jar'ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

3、构建docker镜像

在构建镜像之前我们需要通过xftp将jar包和dockerfile文件传输到服务器上

# 执行以下命令   千万不要忘记还有一个.哦
docker build -t myblog .
Sending build context to Docker daemon   35.1MB
Step 1/6 : FROM java:8---> d23bdf5b1b1b
Step 2/6 : MAINTAINER YellowStar <614028802@qq.com>---> Running in 3a22e98aa4fd
Removing intermediate container 3a22e98aa4fd---> dfd821cdf795
Step 3/6 : VOLUME /tmp---> Running in 1e785aa73614
Removing intermediate container 1e785aa73614---> e69ddea89fbc
Step 4/6 : ADD YellowStarBlog-0.0.1-SNAPSHOT.jar app.jar---> 036f5347bb08
Step 5/6 : RUN bash -c 'touch /app.jar'---> Running in 41193ca56ecc
Removing intermediate container 41193ca56ecc---> 4b1d84751192
Step 6/6 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]---> Running in 5363a737ba34
Removing intermediate container 5363a737ba34---> 9fc5c70cc4d0
Successfully built 9fc5c70cc4d0

4、启动容器

我们在项目中暴露的端口号为8080,这只是容器内部的端口号,映射到宿主机我们设置为8888

注意:需要阿里云服务器打开8888防火墙才可以访问

[root@izbp1bc82otjd8cslsu9zsz idea]# docker run -d -p 8888:8080 --name yellowstarblog myblog
8b613e99d05214fa524d2bafa74e8070723d79cf2db6ccc2338c3df93e18bf32

以上我们的网站就已经部署完成啦!大家可以访问小黄的个人博客 http://121.40.45.37:8888/

过几天小黄的域名备案完成之后,大家可以访问 yellowstar.top 来访问小黄的博客哦

补充

小黄在发布完成之后,发现容器的时间和宿主机的时间不一致,宿主机的时间和北京时间一致,但是容器的时间比这晚8个小时,所以我们还需要进入容器进行以下设置

[root@izbp1bc82otjd8cslsu9zsz /]# docker exec -it 8b613e99d052 /bin/bash
root@8b613e99d052:/# date
Tue Dec 14 09:58:24 UTC 2021
root@8b613e99d052:/# cd /etc/
root@8b613e99d052:/etc# mv localtime localtime_bak
root@8b613e99d052:/etc# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
root@8b613e99d052:/etc# cd /.
root@8b613e99d052:/# date
Tue Dec 14 17:59:59 CST 2021

docker——网络及项目部署相关推荐

  1. Docker网络解决方案 - Calico部署记录

    Docker网络解决方案 - Calico部署记录 参考文章: (1)Docker网络解决方案 - Calico部署记录 (2)https://www.cnblogs.com/kevingrace/p ...

  2. Docker网络解决方案-Flannel部署记录

    Docker跨主机容器间网络通信实现的工具有Pipework.Flannel.Weave.Open vSwitch(虚拟交换机).Calico实现跨主机容器间的通信.其中Pipework.Weave. ...

  3. jenkins+docker的简单项目部署

    怎么使用docker实现新项目的发布,一般有两种方式,以一个web容器为例: 1:定制一个通用的web容器镜像,以逻辑卷-v的方式,关联webapp目录到宿主机,每次发布新版本时只需要更新宿主机上关联 ...

  4. Docker网络解决方案-Weave部署记录

    前面说到了Flannel的部署,今天这里说下Docker跨主机容器间网络通信的另一个工具Weave的使用.当容器分布在多个不同的主机上时,这些容器之间的相互通信变得复杂起来.容器在不同主机之间都使用的 ...

  5. Docker网络解决方案 - Weave部署记录

    前面说到了Flannel的部署,今天这里说下Docker跨主机容器间网络通信的另一个工具Weave的使用.当容器分布在多个不同的主机上时,这些容器之间的相互通信变得复杂起来.容器在不同主机之间都使用的 ...

  6. 「实战篇」开源项目docker化运维部署-后端java部署(七)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:「实战篇」开源项目docker化运维部署-后端java部署(七) 本节主要说说后端的部署需要注意的点,本身renren-fas ...

  7. VMWare安装使用、Linux命令、Docker安装和Linux项目部署

    Linux 一.Linux基础 1.1 Linux介绍 1.2 Linux常见发布版本 1.3 Linux和Windows的区别 1.4 Linux常见命令 二.VMWare安装使用 2.1 VMWa ...

  8. 超详细Docker部署SpringBoot+Vue项目(三更博客项目部署)

    文章目录 1.项目部署规划 2.前置工作 2.1修改后端配置文件ip 2.2修改前端Vue项目运行端口 2.3修改前端对应的服务器ip 2.4后端项目打包 2.4.1解决打包问题 2.4.2项目打包, ...

  9. 最全的项目部署+持续集成解决方案:Jenkins + git + docker

    1.概述 1.1 什么是持续集成,持续交付 持续集成( Continuous integration , 简称 CI )指的是,频繁地(一天多次)将代码集成到主干 持续交付/持续部署(Continuo ...

最新文章

  1. IT人为了自己父母和家庭,更得注意自己的身体和心理健康
  2. 19-spring学习-springMVC环境配置
  3. java 整数 字节数组_将整数转换为字节数组(Java)
  4. GDCM:读取显式长度SQIVR的测试程序
  5. 全自动安装 linux光盘,CentOS 7.1全自动安装光盘制作详解
  6. 【转】三、QT例子-打开一个图片并且显示
  7. ansible vim_Vim插件,使用Ansible自动化部署策略,Pelican入门,Linux,Joplin,Python以及更多新鲜读物
  8. 每日小记 2017.2.26
  9. Codeforces Round #661-C Boats Competition
  10. PHP银行卡信息基类大全
  11. 历届诺贝尔文学奖获得者名录
  12. BT5的xprobe2的操作实例
  13. 获取计算机用户名称的方法,javascript读取用户名和计算机名
  14. SQLyog键盘快捷方式
  15. 华为交换机路由器consle忘记密码该怎么办?
  16. oracle查找相似字段,两表相似字段查询,如何查询
  17. 由浅入深玩转华为WLAN—11 安全认证配置(4)AC内置Portal认证(网页认证)
  18. Java实现简单的弹窗
  19. 基于TIA博途的堆栈算法(先进后出)SCL语言程序(V15版本)
  20. 计算机专业java餐厅点餐系统,Java实现餐厅点餐系统的实例代码.pdf

热门文章

  1. matlab 系统 h10,【海信H10评测】系统:功能性和流畅度颇有旗舰风范_海信 H10 _手机评测-中关村在线...
  2. 数据库的脏读、不可重复读、幻读以及四种隔离级别
  3. vue-cil项目初始化
  4. 百句常见公共标志及英文说明
  5. 场景编程集锦 - 懵懂的青春
  6. web开发方面阅读的经典书籍记录
  7. hive 插入数据映射到hbase_年薪50万都难招的大数据工程师,凭什么?
  8. beetl模板引擎之自定义html标签,分享:beetl模板引擎绑定变量的HTML标签的用法
  9. windows下编译linux内核,windows上可编译Linux内核
  10. 24小时自助打印店有哪些?