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 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——网络及项目部署相关推荐
- Docker网络解决方案 - Calico部署记录
Docker网络解决方案 - Calico部署记录 参考文章: (1)Docker网络解决方案 - Calico部署记录 (2)https://www.cnblogs.com/kevingrace/p ...
- Docker网络解决方案-Flannel部署记录
Docker跨主机容器间网络通信实现的工具有Pipework.Flannel.Weave.Open vSwitch(虚拟交换机).Calico实现跨主机容器间的通信.其中Pipework.Weave. ...
- jenkins+docker的简单项目部署
怎么使用docker实现新项目的发布,一般有两种方式,以一个web容器为例: 1:定制一个通用的web容器镜像,以逻辑卷-v的方式,关联webapp目录到宿主机,每次发布新版本时只需要更新宿主机上关联 ...
- Docker网络解决方案-Weave部署记录
前面说到了Flannel的部署,今天这里说下Docker跨主机容器间网络通信的另一个工具Weave的使用.当容器分布在多个不同的主机上时,这些容器之间的相互通信变得复杂起来.容器在不同主机之间都使用的 ...
- Docker网络解决方案 - Weave部署记录
前面说到了Flannel的部署,今天这里说下Docker跨主机容器间网络通信的另一个工具Weave的使用.当容器分布在多个不同的主机上时,这些容器之间的相互通信变得复杂起来.容器在不同主机之间都使用的 ...
- 「实战篇」开源项目docker化运维部署-后端java部署(七)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:「实战篇」开源项目docker化运维部署-后端java部署(七) 本节主要说说后端的部署需要注意的点,本身renren-fas ...
- VMWare安装使用、Linux命令、Docker安装和Linux项目部署
Linux 一.Linux基础 1.1 Linux介绍 1.2 Linux常见发布版本 1.3 Linux和Windows的区别 1.4 Linux常见命令 二.VMWare安装使用 2.1 VMWa ...
- 超详细Docker部署SpringBoot+Vue项目(三更博客项目部署)
文章目录 1.项目部署规划 2.前置工作 2.1修改后端配置文件ip 2.2修改前端Vue项目运行端口 2.3修改前端对应的服务器ip 2.4后端项目打包 2.4.1解决打包问题 2.4.2项目打包, ...
- 最全的项目部署+持续集成解决方案:Jenkins + git + docker
1.概述 1.1 什么是持续集成,持续交付 持续集成( Continuous integration , 简称 CI )指的是,频繁地(一天多次)将代码集成到主干 持续交付/持续部署(Continuo ...
最新文章
- IT人为了自己父母和家庭,更得注意自己的身体和心理健康
- 19-spring学习-springMVC环境配置
- java 整数 字节数组_将整数转换为字节数组(Java)
- GDCM:读取显式长度SQIVR的测试程序
- 全自动安装 linux光盘,CentOS 7.1全自动安装光盘制作详解
- 【转】三、QT例子-打开一个图片并且显示
- ansible vim_Vim插件,使用Ansible自动化部署策略,Pelican入门,Linux,Joplin,Python以及更多新鲜读物
- 每日小记 2017.2.26
- Codeforces Round #661-C Boats Competition
- PHP银行卡信息基类大全
- 历届诺贝尔文学奖获得者名录
- BT5的xprobe2的操作实例
- 获取计算机用户名称的方法,javascript读取用户名和计算机名
- SQLyog键盘快捷方式
- 华为交换机路由器consle忘记密码该怎么办?
- oracle查找相似字段,两表相似字段查询,如何查询
- 由浅入深玩转华为WLAN—11 安全认证配置(4)AC内置Portal认证(网页认证)
- Java实现简单的弹窗
- 基于TIA博途的堆栈算法(先进后出)SCL语言程序(V15版本)
- 计算机专业java餐厅点餐系统,Java实现餐厅点餐系统的实例代码.pdf
热门文章
- matlab 系统 h10,【海信H10评测】系统:功能性和流畅度颇有旗舰风范_海信 H10 _手机评测-中关村在线...
- 数据库的脏读、不可重复读、幻读以及四种隔离级别
- vue-cil项目初始化
- 百句常见公共标志及英文说明
- 场景编程集锦 - 懵懂的青春
- web开发方面阅读的经典书籍记录
- hive 插入数据映射到hbase_年薪50万都难招的大数据工程师,凭什么?
- beetl模板引擎之自定义html标签,分享:beetl模板引擎绑定变量的HTML标签的用法
- windows下编译linux内核,windows上可编译Linux内核
- 24小时自助打印店有哪些?