博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker端口映射及创建镜像演示(二)--技术流ken
阅读量:6080 次
发布时间:2019-06-20

本文共 7039 字,大约阅读时间需要 23 分钟。

 

前言

 

在上一篇博客《》中,已经详细介绍了docker相关内容以及有关镜像和容器的使用命令演示。

现在我们已经可以自己下载镜像,以及创建容器了。

但是现在有这样一个问题,我们创建的容器可以被其他人或者另外一台服务器访问吗?

基于上一篇博客中容器的创建,那样的容器是不能被其他服务器进行访问的,只能在宿主机进行访问。

想要实现被其他服务器访问,就要用到本篇博客写的内容了,有关docker中的虚拟网络。

另外,本篇博客将会介绍一种简单制作镜像的命令,以便我们能够制作自己的镜像。

 

Docker的四种网络模式

 

一. bridge模式

docker网络隔离基于网络命名空间,在物理机上创建docker容器时会为每一个docker容器分配网络命名空间,并且把容器IP桥接到物理机的虚拟网桥上。

二. none模式

此模式下创建容器是不会为容器配置任何网络参数的,如:容器网卡、IP、通信路由等,全部需要自己去配置。

三. host模式

此模式创建的容器没有自己独立的网络命名空间,是和物理机共享一个Network Namespace,并且共享物理机的所有端口与IP,并且这个模式认为是不安全的。

四. container模式

此模式和host模式很类似,只是此模式创建容器共享的是其他容器的IP和端口而不是物理机,此模式容器自身是不会配置网络和端口,创建此模式容器进去后,你会发现里边的IP是你所指定的那个容器IP并且端口也是共享的,而且其它还是互相隔离的,如进程等。

 Docker访问容器的来源

 

1. 同一个宿主机上的其他容器

2. 宿主机

3. 其他物理机

4. 其他物理机上的容器

 

Docker暴露容器方法

 

第一种:将容器中的一个端口映射成宿主机中的一个随机端口

第二种:将容器中的一个端口映射成宿主机中的一个端口

第三种:将容器中的一个端口映射成宿主机中的一个特定网卡上的随机端口

第四种:将容器中的一个端口映射成宿主机中的一个特定网卡上的一个端口

【使用多次-p选项可以实现暴露多个端口】

 

Docker端口映射的四种方法使用演示

 

第一种:将容器中的一个端口映射成宿主机中的一个随机端口

下面的操作确保虚拟机是在桥接模式

第一步:下载httpd镜像

[root@ken ~]# docker pull httpd[root@ken ~]# docker image lsREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEhttpd               latest              2a51bb06dc8b        12 days ago         132MBredis               latest              55cb7014c24f        5 months ago        83.4MB

 

第二步:启动httpd容器

--name: 指定容器名

-d: 后台运行

-P: 大写的P,映射随机端口(暴露容器内所有端口,映射到宿主机的随机端口)

--rm: 表示退出容器时删除容器

[root@ken ~]# docker container run --name httpd1 -d -P --rm  httpd

 

第三步:查看端口

可以发现容器内的80端口被指向了宿主机的32768端口

[root@ken ~]# docker container psCONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                   NAMESb02a0dd47b7b        httpd               "httpd-foreground"   25 seconds ago      Up 20 seconds       0.0.0.0:32768->80/tcp   httpd1

查看宿主机是否有32768端口

[root@ken ~]# ss -tnl | grep 32768LISTEN     0      1024        :::32768                   :::*

 

第四步:访问

输入宿主机的IP地址加映射的端口号

通过以上的方法就可以实现外部主机访问一个容器了。

 

 第二种:将容器中的一个端口映射成宿主机中的一个端口

 第一步:启动httpd容器

--name:指定容器名称

-d:后台运行

-p:小写的p指定端口,123为宿主机端口,80为容器的端口

--rm:退出容器及删除容器

[root@ken ~]# docker container run --name httpd2 -d -p 1234:80 --rm httpd

 

第二步:查看端口

[root@ken ~]# docker container ps CONTAINER ID        IMAGE               COMMAND              CREATED              STATUS              PORTS                 NAMESe083fd2915a7        httpd               "httpd-foreground"   About a minute ago   Up About a minute   0.0.0.0:1234->80/tcp   httpd2[root@ken ~]# ss -tnl | grep 1234LISTEN     0      1024        :::1234                    :::*

 

第三步:访问

输入宿主机IP地址和设置的端口即可访问

 

第三种:将容器中的一个端口映射成宿主机中的一个特定网卡上的随机端口

第一步:启动httpd容器

指定特定的网卡需要使用小p 后面加上 网卡ip::容器端口

[root@ken ~]# docker container run --name httpd3 -d -p 10.220.5.13::80 --rm httpd

 

第二步:查看端口

可以看到下面生成了一个随机端口32768

[root@ken ~]# docker container ps CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                       NAMES63060c0e83f0        httpd               "httpd-foreground"   7 seconds ago       Up 5 seconds        10.220.5.13:32768->80/tcp   httpd3[root@ken ~]# ss -tnl | grep 32768LISTEN     0      1024   10.220.5.13:32768                    *:*

 

第三步:访问

使用生成的随机端口加上IP 地址即可进行容器的访问

第四种:将容器中的一个端口映射成宿主机中的一个特定网卡上的一个端口

 第一步:启动容器

指定特定的网卡需要使用小p 后面加上 网卡ip:宿主机端口:容器端口

 这里我指定了使用宿主机的8080端口进行容器端口的映射

[root@ken ~]# docker container run --name httpd3 -d -p 10.220.5.13:8080:80 --rm httpd

 

第二步:查看端口

[root@ken ~]# docker container psCONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                      NAMES2a30717c6df7        httpd               "httpd-foreground"   57 seconds ago      Up 56 seconds       10.220.5.13:8080->80/tcp   httpd3[root@ken ~]# ss -tnl | grep 8080LISTEN     0      1024   10.220.5.13:8080                     *:*

 

第三步:浏览器访问

只要输入ip:端口即可进行访问

 如果想要暴露一个容器内的多个端口可以使用多个-p

 

创建自己的镜像仓库

 

需要在阿里云创建镜像仓库

第一步:创建镜像仓库

点击创建镜像仓库

 

第二步:填写你的注册信息

 

第三步:点击本地仓库

第四步:如下就创建好了一个自己的镜像仓库

 

基于容器创建镜像

 

获取使用帮助

commit用来基于一个现有容器来创建镜像

[root@ken ~]# docker commit --helpUsage:    docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]Create a new image from a container's changes

 

参数详解

-a,           作者信息 (e.g., "John Hannibal Smith 
") -c, 将Dockerfile指令应用于创建的映像 (default [])-m, --message string -m 提交信息 -p, 提交时暂停容器 (default true)

 

第一步:启动容器

[root@ken ~]# docker container run -it --name busybox1 busybox

 

第二步:创建则是页面

[root@ken ~]# docker container exec -it busybox1 /bin/sh/ # mkdir /data/ # echo "test for my image">/data/index.html/ # httpd -h /data/ #

 

第三步:基于容器创建镜像

[root@ken ~]# docker commit -a "ken" -p -c "CMD ["/bin/httpd","-f","-h","/data"]" busybox1 kenken/httpd1sha256:29846cdbd83478bc9469b6ad25e76851655072bca6c984eeffedb52a8c8b91c0

 

第四步:查看镜像

可以看到第一个就是刚才创建的镜像

[root@ken ~]# docker image lsREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEkenken/httpd1       latest              29846cdbd834        23 seconds ago      1.15 MBdocker.io/nginx     latest              568c4670fa80        16 hours ago        109 MBdocker.io/redis     latest              c188f257942c        12 days ago         94.9 MBdocker.io/httpd     latest              2a51bb06dc8b        12 days ago         132 MBdocker.io/busybox   latest              59788edf1f3e        8 weeks ago         1.15 MB

 

第五步:往阿里云推送

首先需要登录阿里云

[root@ken ~]# docker login --username=kenkendyg registry.cn-beijing.aliyuncs.comPassword: Login Succeeded

 

第六步:给制作好的镜像打一个标签

29846cdbd834是你的镜像的ID
[root@ken ~]# docker tag 29846cdbd834 registry.cn-beijing.aliyuncs.com/kenken/httpd:v1

 

第七步:推送镜像

[root@ken ~]# docker push registry.cn-beijing.aliyuncs.com/kenken/httpd:v1The push refers to a repository [registry.cn-beijing.aliyuncs.com/kenken/httpd]b4a60ebae046: Pushed 8a788232037e: Pushed v1: digest: sha256:88008e08275bc85dbbef8f770d66cdec5cf96e86e4ad5e2a38c5b5a8c1b2e57f size: 734

 

第八步:在阿里云查看

首先点击管理

点击镜像 版本即可查看

 第九步:拉取阿里云镜像到本地

拉取镜像需要在另一台主机上面登录阿里云

[root@ken ~]#  docker login --username=kenkendyg registry.cn-beijing.aliyuncs.comPassword: Login Succeeded[root@ken ~]# docker pull registry.cn-beijing.aliyuncs.com/kenken/httpd:v1v1: Pulling from kenken/httpd90e01955edcd: Already exists 3d5cd4fa148f: Pull complete Digest: sha256:88008e08275bc85dbbef8f770d66cdec5cf96e86e4ad5e2a38c5b5a8c1b2e57fStatus: Downloaded newer image for registry.cn-beijing.aliyuncs.com/kenken/httpd:v1[root@ken ~]# docker image lsREPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZEregistry.cn-beijing.aliyuncs.com/kenken/httpd   v1                  29846cdbd834        17 minutes ago      1.15MBnginx                                           latest              568c4670fa80        17 hours ago        109MBhttpd                                           latest              2a51bb06dc8b        12 days ago         132MBbusybox                                         latest              59788edf1f3e        8 weeks ago         1.15MBredis                                           latest              55cb7014c24f        5 months ago        83.4MB

 

转载于:https://www.cnblogs.com/kenken2018/p/10030567.html

你可能感兴趣的文章
linux如何查看文件夹大小
查看>>
关键字 输入效果和样式
查看>>
用Js的eval解析JSON中的注意点
查看>>
玩转树莓派——升级NOOBS离线安装介质到Raspbian 4.9和Windows 10 IoT C
查看>>
php使用GD库合并简单图片并变动部分颜色
查看>>
【用jersey构建REST服务】系列文章
查看>>
ElasticSearch最新权威指南中文翻译版!
查看>>
java jdk简单解析
查看>>
ARM 曝光32位 1mm x 1mm CPU
查看>>
QNX Neutrino OS 6.5 SP1发布
查看>>
原型以及原型链
查看>>
王利芬 2011
查看>>
疯狂Spring Cloud连载(9)——RestTemplate的负载均衡原理
查看>>
疯狂Spring Cloud连载(27)Apache Kafka框架
查看>>
Hadoop2.4.1伪分布式的搭建
查看>>
https方式使用TortoiseGit设置git@osc密码长期存储
查看>>
由于多个切面pointcut重叠造成的事务的问题。
查看>>
JAVA懒开发:lombok的使用
查看>>
螃蟹学PHP设计模式之策略模式
查看>>
phpMyAdmin自动登录和取消自动登录
查看>>