文章目录

  • 一、端口映射
    • 1、-P随机端口
    • 2、映射指定一个端口
    • 3、映射指定多个端口
    • 4、映射到指定端口的指定地址
    • 5、映射到指定端口的任意地址
    • 6、查看端口映射情况
  • 二、数据卷与数据卷容器
    • 1、挂载宿主系统(数据卷)
    • 2、数据卷容器操作
  • 三、容器互联
    • 1、--link 通过虚链路连接
    • 2、通过中转网卡连接

一、端口映射

在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的。
  当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p或-P参数来指定端口映射。当使用-P(大写P)标记时,Docker会随机映射一个端口到内部容器开放的网络端口

1、-P随机端口

通过docker ps命令查看具体端口映射

[root@localhost opt]# docker run -d --name nginx_1 -P nginx:latest
64a061f37a4948d4b8b4dc28d3b0c0b51ceb65e1aef98b36cbc063af69352e85
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
64a061f37a49        nginx:latest        "/docker-entrypoint.…"   9 seconds ago       Up 8 seconds        0.0.0.0:32769->80/tcp   nginx_1
91781d90ed6d        nginx               "/docker-entrypoint.…"   26 minutes ago      Created                                     nostalgic_kilby

通过浏览器访问本机ip地址加映射的端口 就能访问到容器内的nginx

[root@localhost opt]# docker logs nginx_1   '查看nginx_1容器的日志信息'
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
192.168.110.1 - - [20/Sep/2020:11:27:41 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" "-"
2020/09/20 11:27:41 [error] 28#28: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.110.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.110.133:32769", referrer: "http://192.168.110.133:32769/"
192.168.110.1 - - [20/Sep/2020:11:27:41 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.110.133:32769/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" "-"
[root@localhost opt]# docker logs nginx_1
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
192.168.110.1 - - [20/Sep/2020:11:27:41 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" "-"
2020/09/20 11:27:41 [error] 28#28: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.110.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.110.133:32769", referrer: "http://192.168.110.133:32769/"
192.168.110.1 - - [20/Sep/2020:11:27:41 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.110.133:32769/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" "-"
[root@localhost opt]#

2、映射指定一个端口

[root@localhost opt]# docker run -itd -p 5000:80 --name nginx_2 nginx:latest
c6209375b508a67cbaae20b93e140e24a233b9a5a9a4b97db386782a769214f4
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                   NAMES
c6209375b508        nginx:latest        "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:5000->80/tcp    nginx_2
64a061f37a49        nginx:latest        "/docker-entrypoint.…"   18 minutes ago       Up 18 minutes       0.0.0.0:32769->80/tcp   nginx_1
91781d90ed6d        nginx               "/docker-entrypoint.…"   44 minutes ago       Created                                     nostalgic_kilby
[root@localhost opt]#

3、映射指定多个端口

[root@localhost opt]# docker run -itd -p 3000:80 -p 4000:80 --name nginx_3 nginx:latest
a242202d9061d83191e63c9b602f9b35927fb81008a1b82f0c9a2e203f51552d
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
a242202d9061        nginx:latest        "/docker-entrypoint.…"   4 seconds ago       Up 3 seconds        0.0.0.0:3000->80/tcp, 0.0.0.0:4000->80/tcp   nginx_3
c6209375b508        nginx:latest        "/docker-entrypoint.…"   6 minutes ago       Up 6 minutes        0.0.0.0:5000->80/tcp                         nginx_2
64a061f37a49        nginx:latest        "/docker-entrypoint.…"   23 minutes ago      Up 23 minutes       0.0.0.0:32769->80/tcp                        nginx_1
91781d90ed6d        nginx               "/docker-entrypoint.…"   49 minutes ago      Created                                                          nostalgic_kilby


4、映射到指定端口的指定地址

[root@localhost opt]# docker run -itd -p 192.168.110.133:1000:80 --name nginx_4 nginx:latest
66a3161186e3f573a8ed55fa4abb974ceefcdca389330c9f8823bd4f0daaa102
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
66a3161186e3        nginx:latest        "/docker-entrypoint.…"   10 seconds ago      Up 8 seconds        192.168.110.133:1000->80/tcp                 nginx_4
a242202d9061        nginx:latest        "/docker-entrypoint.…"   13 minutes ago      Up 13 minutes       0.0.0.0:3000->80/tcp, 0.0.0.0:4000->80/tcp   nginx_3
c6209375b508        nginx:latest        "/docker-entrypoint.…"   20 minutes ago      Up 20 minutes       0.0.0.0:5000->80/tcp                         nginx_2
64a061f37a49        nginx:latest        "/docker-entrypoint.…"   37 minutes ago      Up 37 minutes       0.0.0.0:32769->80/tcp                        nginx_1
91781d90ed6d        nginx               "/docker-entrypoint.…"   About an hour ago   Created                                                          nostalgic_kilby

5、映射到指定端口的任意地址

使用IP::ContainerPort格式绑定本机的任意端口到容器的指定端口

[root@localhost opt]# docker run -itd -p 192.168.110.133::80 --name nginx_5 nginx:latest
3f4c88cce0fbf1b10629066c24d97a3a706cff319e6f64cf88455ef19eb96514
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
3f4c88cce0fb        nginx:latest        "/docker-entrypoint.…"   9 seconds ago       Up 8 seconds        192.168.110.133:32768->80/tcp                nginx_5
66a3161186e3        nginx:latest        "/docker-entrypoint.…"   6 minutes ago       Up 6 minutes        192.168.110.133:1000->80/tcp                 nginx_4
a242202d9061        nginx:latest        "/docker-entrypoint.…"   20 minutes ago      Up 20 minutes       0.0.0.0:3000->80/tcp, 0.0.0.0:4000->80/tcp   nginx_3
c6209375b508        nginx:latest        "/docker-entrypoint.…"   26 minutes ago      Up 26 minutes       0.0.0.0:5000->80/tcp                         nginx_2
64a061f37a49        nginx:latest        "/docker-entrypoint.…"   43 minutes ago      Up 43 minutes       0.0.0.0:32769->80/tcp                        nginx_1
91781d90ed6d        nginx               "/docker-entrypoint.…"   About an hour ago   Created                                                          nostalgic_kilby

6、查看端口映射情况

[root@localhost opt]# docker port nginx_1
80/tcp -> 0.0.0.0:32769
[root@localhost opt]# docker port nginx_2
80/tcp -> 0.0.0.0:5000
[root@localhost opt]# docker port nginx_3
80/tcp -> 0.0.0.0:4000
80/tcp -> 0.0.0.0:3000
[root@localhost opt]# docker port nginx_4
80/tcp -> 192.168.110.133:1000
[root@localhost opt]# docker port nginx_5
80/tcp -> 192.168.110.133:32768

二、数据卷与数据卷容器

使用容器时会产生一些日志或其他文件,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这样就会涉及容器的数据管理操作。
容器中管理数据主要有两种方式:

  • 数据卷:挂载宿主系统的存储空间
  • 数据卷容器:挂载容器的存储空间

如果用户需要在容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器,数据卷容器其实是一个普通的容器,专门用来提供数据卷供其它容器挂载

原理图如下

1、挂载宿主系统(数据卷)

-v 指定宿主机目录:docker目录
–name 指定名称
-itd 打开标准型输入,新开一个虚拟tty 后台运行
centos:7 指定镜像
/bin/bash 指定bash环境

[root@localhost test]# docker run  -v /opt/test:/data1 --name web -itd  centos:7 /bin/bash
f2acf3b3c54331ca763e0b64f4e269fe3a09028c94229dbd23e0d865919644ff
[root@localhost test]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
f2acf3b3c543        centos:7            "/docker-entrypoint.…"   12 seconds ago      Up 11 seconds              80/tcp              web
eae6d77f4772        centos:7            "/docker-entrypoint.…"   4 minutes ago       Exited (0) 4 minutes ago                       web1[root@localhost opt]# cd /opt/test/    '进入到宿主机上创建文件 '
[root@localhost test]# touch dog
[root@localhost test]# docker exec -it f2 /bin/bash    '进入到docker查看同步情况  f2是缩写  ps-a 查看id号  id号的前两位  '
root@f2acf3b3c543:/# ls
bin  boot  data1  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@f2acf3b3c543:/# cd data1/
root@f2acf3b3c543:/data1# ls
dog

2、数据卷容器操作

首先创建一个docker 并共享两个目录创建挂载点 data1和data2

[root@localhost opt]# docker run -v /data1 -v /data2 -itd --name test01 centos:7 /bin/bash
886ad4041f028d96f78ea031283c635c1ba78a1b472e84fbc210b1618ffdf141
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
886ad4041f02        centos:7            "/docker-entrypoint.…"   9 seconds ago       Up 8 seconds        80/tcp              test01
[root@localhost opt]# docker exec -it 886 /bin/bash   '进入到docker中查看共享目录是否存在'
root@886ad4041f02:/# ls
bin   data1  dev          docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  data2  docker-entrypoint.d  etc           lib   media  opt  root  sbin  sys  usr
root@886ad4041f02:/#

对docker test01的挂载电data进行远程挂载

[root@localhost opt]# docker run -itd --volumes-from test01 --name test02 centos:7 /bin/bash
3161a893a34899e1b660e5b93a1bd1f268b825c19503f9eac91c803c067c2746
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
3161a893a348        centos:7            "/docker-entrypoint.…"   24 seconds ago      Up 23 seconds       80/tcp              test02
886ad4041f02        centos:7            "/docker-entrypoint.…"   2 minutes ago       Up 2 minutes        80/tcp              test01

进入到test1创建文件 观察test2内时候也进行同步生成了

[root@localhost opt]# docker exec -it 316 /bin/bash
root@3161a893a348:/# ls
bin   data1  dev          docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  data2  docker-entrypoint.d  etc           lib   media  opt  root  sbin  sys  usr
root@3161a893a348:/# cd data1
root@3161a893a348:/data1# ls
root@3161a893a348:/data1# touch 111
root@3161a893a348:/data1# cd..
bash: cd..: command not found
root@3161a893a348:/data1# cd ..
root@3161a893a348:/# cd data2
root@3161a893a348:/data2# ls
root@3161a893a348:/data2# touch 222
root@3161a893a348:/data2# exit
exit

进入到test02中查看是否同步

[root@localhost opt]# docker exec -it 886 /bin/bash
root@886ad4041f02:/# ls
bin  boot  data1  data2  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@886ad4041f02:/# ls data1
111
root@886ad4041f02:/# ls data2
222
root@886ad4041f02:/#

三、容器互联

1、–link 通过虚链路连接

–link 两个容器通过映射的端口进行互联

[root@localhost opt]# docker run -itd -P --name test01 centos:7 /bin/bash
b55327c3ae74296a81304ae4563e3da54d66409ce322bb2d8223bc59882eef8f
[root@localhost opt]# docker run -itd -P --name test02 --link test01 centos:7 /bin/bash
57582aa8724545f55f14973b6c9c06c89a96cc835dea1148050de8c298a12c3a[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS
57582aa87245        centos:7            "/docker-entrypoint.…"   26 seconds ago      Up 26 seconds
b55327c3ae74        centos:7            "/docker-entrypoint.…"   45 seconds ago      Up 45 seconds
[root@localhost opt]# docker exec -it 57 /bin/bash   '进入到test02内ping  test01'
root@57582aa87245:/# ping test01
PING test001 (172.17.0.5) 56(84) bytes of data.
64 bytes from test001 (172.17.0.5): icmp_seq=1 ttl=64 time=0.177 ms
64 bytes from test001 (172.17.0.5): icmp_seq=2 ttl=64 time=0.147 ms
64 bytes from test001 (172.17.0.5): icmp_seq=3 ttl=64 time=0.157 ms
64 bytes from test001 (172.17.0.5): icmp_seq=4 ttl=64 time=0.202 ms

对于容器A和容器B之间使用–link连接,必须先启动其中一个容器,比如容器A,然后在启动容器B时,将其连接到容器A。这样,就可以在容器B中使用网络别名连接容器A了。

2、通过中转网卡连接

推荐使用这个方式。
默认网络中的link是静态的,不允许链接容器重启,而自定义网络下的link是动态的,支持链接容器重启(以及IP变化)
因此,使用–link时链接的容器,在默认网络中必须提前创建好,而自定义网络下不必预先建好。使用网络别名后,不管容器ip地址如何变化,都可以根据别名进行连接。
而且这种方式可以使得多个容器互联

[root@localhost ~]# docker network create mynet   '首先在主机上创建一个网络'
[root@localhost ~]# ifconfig     '查看新创建的网卡'
br-3b261b710b8a: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500inet 172.18.0.1  netmask 255.255.0.0  broadcast 172.18.255.255ether 02:42:0a:1e:3b:a3  txqueuelen 0  (Ethernet)RX packets 88  bytes 7680 (7.5 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 88  bytes 7680 (7.5 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

–network mynet表示使用mynet网络
–network-alias centos1表示该容器运行时,使用的网络别名为centos1。(网络别名的作用类似hostname,不管容器IP如何变化,都可以使用同一个别名。
–name 表示此容器的别名
-itd 表示后台运行 打开一个虚拟终端 打开标准型输入

[root@localhost docker]# docker run -itd --name centos1 --network mynet --network-alias centos1  centos /bin/bash
1d2ff212498c05769b180e32e7277c25b1f23d868a3edc6a99524f7106414aad
[root@localhost docker]# docker run -itd --name centos2 --network mynet --network-alias centos2  centos /bin/bash
2ed5fab1c899a2f2170294c94dd8db8582052ac37d8f06f16e79b7e601599e75

进入到centos1进行验证

[root@localhost docker]# docker exec -it centos1 /bin/bash[root@1d2ff212498c /]# exit
exit
[root@localhost docker]# docker exec -it centos2 /bin/bash
[root@2ed5fab1c899 /]# ping centos1
PING centos1 (172.18.0.2) 56(84) bytes of data.
64 bytes from centos1.mynet (172.18.0.2): icmp_seq=1 ttl=64 time=0.105 ms
64 bytes from centos1.mynet (172.18.0.2): icmp_seq=2 ttl=64 time=0.091 ms
^C
--- centos1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 0.091/0.098/0.105/0.007 ms
[root@2ed5fab1c899 /]# exit
exit

进入到centos2中进行验证

[root@localhost docker]# docker exec -it centos1 /bin/bash
[root@1d2ff212498c /]# ping centos2
PING centos2 (172.18.0.3) 56(84) bytes of data.
64 bytes from centos2.mynet (172.18.0.3): icmp_seq=1 ttl=64 time=0.085 ms
64 bytes from centos2.mynet (172.18.0.3): icmp_seq=2 ttl=64 time=0.098 ms
64 bytes from centos2.mynet (172.18.0.3): icmp_seq=3 ttl=64 time=0.085 ms
^C
--- centos2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 3ms
rtt min/avg/max/mdev = 0.085/0.089/0.098/0.009 ms
[root@1d2ff212498c /]#

这就是你日日夜夜想要的docker!!!---------Docker常规操作--端口映射、数据卷管理 以及容器互联相关推荐

  1. docker之数据卷管理

    目录 1.docker使用 2.优化 在docker之网络访问中,通过启动了nginx服务进行了访问,只展示了nginx的首页信息,如果想访问我们自己的代码如何操作呢,这就需要使用到数据卷的知识了.在 ...

  2. docker入门实践之数据卷管理

    在实际使用docker过程中,有时需要查看容器内应用产生的数据,或需要把容器内的数据进行备份,甚至是多个容器间需要共享数据,这势必涉及到数据管理,那么docker的数据怎么管理呢? 容器中数据管理主要 ...

  3. Docker(七)--Docker数据卷管理及插件

    一.Docker 数据卷管理 在实际使用过程中,我们需要把容器和数据进行隔离,因为容器在使用过程中可能随时要进行销毁,但是数据要保留下来,所以我们要做数据的持久化. 为什么要用数据卷 docker分层 ...

  4. docker常用命令 | game2048网页游戏 | nginx镜像 | 数据卷管理 | docker网络管理 | 构建apache镜像 | Dockerfile常用的命令

    DOCKER https://www.docker.com http://www.runoob.com/docker/docker-command-manual.html docker命令大全 镜像用 ...

  5. docker高级网络配置、高级数据卷机制和Dockerfile说明

    11.高级网络配置 11.1 说明 当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机.它会在挂载到它的网 ...

  6. docker使用数据卷创建nginx容器

    docker使用数据卷创建nginx容器 //创建存放网站的和配置文件的目录 [root@docker ~]# mkdir -p /var/www/html [root@docker ~]# mkdi ...

  7. 这就是你日日夜夜想要的docker!!!---------三分钟带你玩转docker命令

    文章目录 docker version 查看版本信息 docker inspect 查看镜像全部信息 docker search 搜索镜像 docker pull 下载镜像 docker images ...

  8. 这就是你日日夜夜想要的docker!!!---------TLS加密远程连接Docker

    文章目录 一.Docker 存在的安全问题 1.Docker 自身漏洞 2.Docker 源码问题 3.Docker 架构缺陷与安全机制 二.TLS加密通讯协议 1.TLS介绍 2.CA证书 三.配置 ...

  9. 这就是你日日夜夜想要的docker!!!---------docker+consul+ nginx集成分布式的服务发现与注册架构

    文章目录 一.Docker consul容器服务更新与发现理论 1.基本架构 2.基于nginx和consul构建高可用及自动发现的Docker服务架构 3.Docker consul自动发现服务架构 ...

最新文章

  1. 下载perl的mysql模块_安装用于操作MySQL的Perl模块
  2. python基础技巧总结(一)
  3. jar打包 jar line too long 异常处理方法
  4. 转, C# 如何在MVC3中取消备用控制器的选择
  5. xm list源码分析
  6. CCCC-GPLT L1-036. A乘以B 团体程序设计天梯赛
  7. ZOJ 3380 Patchouli's Spell Cards(概率+大数)
  8. android的wake_lock介绍
  9. google地图设置语言
  10. 40家重污染行业上市公司进“黑名单”
  11. 云原生中间件RocketMQ-消费者消费模式之广播模式、偏移量offset解析
  12. 【Android】解决aab上传Google Play后下载语言文件缺失的问题
  13. 研发管理进阶:边怼人边改进
  14. Microsoft Cartoon Maker(微软卡通头像制作软件)使用方法详解
  15. C# 利用 Spire.PDF 实现.pdf转图片
  16. iOS 关于视频录制实现 (仿微信)
  17. STM32F0 USB VCP数据发送丢包错位问题
  18. 终于有懂哥能把云计算、大数据和人工智能讲得明明白白了
  19. SimpleDraweeView圆角
  20. Python数据分析案例18——化学分子数据模型(机器学习分类问题全流程)

热门文章

  1. HO-PLGA-COOR,酯封端聚(D,L-丙交酯-co-乙交酯)共聚物
  2. 中英文字数统计以及信息熵的计算
  3. R语言ggplot2包学习笔记
  4. 应用使用Druid连接池经常性断链问题分析
  5. 利用android实现汇率计算器,利用python编写一个汇率计算器
  6. Linux Qt cannot find -lGL
  7. Android组件化跨进程通信框架Andromeda解析
  8. 怎么实现红鲤鱼与绿鲤鱼与驴代码
  9. redis-----07-----redigo基本命令操作(主要讲如何让go的struct、map展开成redis的参数,以及使用struct获取redis返回的key-value批量数组)
  10. carsin中创建相邻车道车辆插入场景设置