docker——网络及项目部署

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 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 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 1000
    link/ether 00:16:3e:19:b0:15 brd ff:ff:ff:ff:ff:ff
    inet 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:ff
    inet 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 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 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 1000
    link/ether 00:16:3e:19:b0:15 brd ff:ff:ff:ff:ff:ff
    inet 172.26.24.2/18 brd 172.26.63.255 scope global dynamic eth0
       valid_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:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_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 --help

Usage:  docker network create [OPTIONS] NETWORK

Create a network

Options:
      --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:8

MAINTAINER 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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值