前言

在上一篇博客《Docker介绍及常用操作演示--技术流ken》中,已经详细介绍了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 ls
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest 2a51bb06dc8b days ago 132MB
redis latest 55cb7014c24f months ago .4MB

第二步:启动httpd容器

--name: 指定容器名

-d: 后台运行

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

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

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

第三步:查看端口

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

[root@ken ~]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b02a0dd47b7b httpd "httpd-foreground" seconds ago Up seconds 0.0.0.0:->/tcp httpd1

查看宿主机是否有32768端口

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

第四步:访问

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

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

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

第一步:启动httpd容器

--name:指定容器名称

-d:后台运行

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

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

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

第二步:查看端口

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

第三步:访问

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

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

第一步:启动httpd容器

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

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

第二步:查看端口

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

[root@ken ~]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63060c0e83f0 httpd "httpd-foreground" seconds ago Up seconds 10.220.5.13:->/tcp httpd3
[root@ken ~]# ss -tnl | grep
LISTEN 10.220.5.13: *:*

第三步:访问

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

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

第一步:启动容器

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

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

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

第二步:查看端口

[root@ken ~]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a30717c6df7 httpd "httpd-foreground" seconds ago Up seconds 10.220.5.13:->/tcp httpd3
[root@ken ~]# ss -tnl | grep
LISTEN 10.220.5.13: *:*

第三步:浏览器访问

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

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

创建自己的镜像仓库

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

第一步:创建镜像仓库

点击创建镜像仓库

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

第三步:点击本地仓库

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

基于容器创建镜像

获取使用帮助

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

[root@ken ~]# docker commit --help

Usage:    docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

参数详解

  -a,           作者信息 (e.g., "John Hannibal Smith <hannibal@a-team.com>")
-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/httpd1
sha256:29846cdbd83478bc9469b6ad25e76851655072bca6c984eeffedb52a8c8b91c0

第四步:查看镜像

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

[root@ken ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
kenken/httpd1 latest 29846cdbd834 seconds ago 1.15 MB
docker.io/nginx latest 568c4670fa80 hours ago MB
docker.io/redis latest c188f257942c days ago 94.9 MB
docker.io/httpd latest 2a51bb06dc8b days ago MB
docker.io/busybox latest 59788edf1f3e weeks ago 1.15 MB

第五步:往阿里云推送

首先需要登录阿里云

[root@ken ~]# docker login --username=kenkendyg registry.cn-beijing.aliyuncs.com
Password:
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:v1
The push refers to a repository [registry.cn-beijing.aliyuncs.com/kenken/httpd]
b4a60ebae046: Pushed
8a788232037e: Pushed
v1: digest: sha256:88008e08275bc85dbbef8f770d66cdec5cf96e86e4ad5e2a38c5b5a8c1b2e57f size:

第八步:在阿里云查看

首先点击管理

点击镜像 版本即可查看

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

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

[root@ken ~]#  docker login --username=kenkendyg registry.cn-beijing.aliyuncs.com
Password:
Login Succeeded
[root@ken ~]# docker pull registry.cn-beijing.aliyuncs.com/kenken/httpd:v1
v1: Pulling from kenken/httpd
90e01955edcd: Already exists
3d5cd4fa148f: Pull complete
Digest: sha256:88008e08275bc85dbbef8f770d66cdec5cf96e86e4ad5e2a38c5b5a8c1b2e57f
Status: Downloaded newer image for registry.cn-beijing.aliyuncs.com/kenken/httpd:v1
[root@ken ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-beijing.aliyuncs.com/kenken/httpd v1 29846cdbd834 minutes ago .15MB
nginx latest 568c4670fa80 hours ago 109MB
httpd latest 2a51bb06dc8b days ago 132MB
busybox latest 59788edf1f3e weeks ago .15MB
redis latest 55cb7014c24f months ago .4MB

Docker端口映射及创建镜像演示(二)--技术流ken的更多相关文章

  1. Docker端口映射及创建镜像演示(二)

    Docker暴露容器方法 第一种:将容器中的一个端口映射成宿主机中的一个随机端口 第二种:将容器中的一个端口映射成宿主机中的一个端口 第三种:将容器中的一个端口映射成宿主机中的一个特定网卡上的随机端口 ...

  2. Redis基础知识补充及持久化、备份介绍(二)--技术流ken

    Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...

  3. Docker之使用Dockerfile创建定制化镜像(四)--技术流ken

    前言 在之前的博客<Docker端口映射及创建镜像演示(二)--技术流ken>,演示了如何使用一个现有容器创建一个镜像,以及镜像在阿里云的上传和下载. 但是这样的镜像有很大的局限性,不能根 ...

  4. Docker网络(五)--技术流ken

    本章内容 1.dokcer默认自带的几种网络介绍 2. 自定义网络 3. 容器间通信 4. 容器与外界交互 docker网络分为单个主机上的容器网络和多个主机上的哇网络,本文主要讲解单个主机上的容器网 ...

  5. Docker数据卷Volume实现文件共享、数据迁移备份(三)--技术流ken

    前言 前面已经写了两篇关于docker的博文了,在工作中有关docker的基本操作已经基本讲解完了.相信现在大家已经能够熟练配置docker以及使用docker来创建镜像以及容器了.本篇博客将会讲解如 ...

  6. [转]Docker基础-使用Dockerfile创建镜像

    本文转自:https://www.cnblogs.com/jie-fang/p/7927643.html 1.基本结构 Dockerfile由一行行命令语句组成,并支持以#开头的注释行.例如: # T ...

  7. Docker基础-使用Dockerfile创建镜像

    1.基本结构 Dockerfile由一行行命令语句组成,并支持以#开头的注释行.例如: # This dockerfile uses the ubuntu image # VERSION 2 - ED ...

  8. Docker端口映射

    Docker端口映射是指将容器内应用的服务端口映射到本机宿主机器.当要在宿主机外部访问Docker内部应用时,需要对容器内应用端口进行映射. 一.容器启动时指定端口映射 容器运行时可以通过-p 或 - ...

  9. docker 端口映射错误解决方法

    今天搞了半天shipyard,在网页上打开时无法显示容器和镜像,最后发现是docker端口映射错误,由于防火墙未关闭: 4月 12 18:51:29 localhost firewalld[757]: ...

随机推荐

  1. PowerShell工作流学习-6-向脚本工作流添加检查点

    关键点: a)检查点是工作流当前状态的快照,其中包括变量的当前值以及在该点生成的任何输出,这些信息保存在磁盘. b)检查点数据保存在托管工作流会话的计算机的硬盘上的用户配置文件中. c)当工作流通用参 ...

  2. post文件下载

    this.$http({ method: 'post', url: '/file/download', responseType: 'blob', data: JSON.stringify(this. ...

  3. Office Web addin 踩坑计:替换后台网站为MVC框架时遇到的问题

    Office Web Addin 模板程序的后台本质上是一个网站,你在调试的时候可以发现它的进程是一个32位的IE进程 所以可以把它替换成Asp.net的网站. 替换方法: 1.点击WordRevie ...

  4. 《笔记篇》非JS方法跳转到一个新页面,主要防止客户端禁止浏览器JS以后的跳转异常

    用非JS方法打开一个新页面,主要防止客户端禁止浏览器JS以后的跳转失效 <meta http-equiv="refresh" content="0; url=htt ...

  5. gitlab 之 升级、迁移

    -----故事背景- 公司服务器用vm装的虚拟机,由于公司服务器经常无故重启,且找不到原因,所以公司准备将vm迁移至Hyper-V,Hyper-V可以自启动虚拟机且免费. -----升级.迁移- 首先 ...

  6. 03 of learning python

    01 input输入的是str类型 如果输入的是数字的话,要记得强制转换一下! 02 isdigit() 这个方法是用来检测字符串是否全部由数字组成 str.isdigit() 如果字符串只包含数字则 ...

  7. pycharm激活码

    MTW881U3Z5-eyJsaWNlbnNlSWQiOiJNVFc4ODFVM1o1IiwibGljZW5zZWVOYW1lIjoiTnNzIEltIiwiYXNzaWduZWVOYW1lIjoiI ...

  8. [W3bsafe]分享一个爬SQL注入漏洞的工具

    分享一个爬SQL注入的工具 本文转自:i春秋社区由团队核心成员若间开发把工具放到E盘的一个文件夹 他会自动生成一个文本文件 Result.txt  最大页数 自己想弄填多少就填多少关键词 注入点关键词 ...

  9. 更新RecyclerView的好方法

    一般在使用RecyclerView的时候不免要修改RecyclerView的数据,使用notifyDataSetChanged()来刷新界面,但是当数据比较多,而只是修改了一点的数据,或者刷新比较频繁 ...

  10. 使用Consul 实现 MagicOnion(GRpc) 服务注册和发现

    1.下载打开Consul 笔者是windows下面开发的(也可以使用Docker). 官网下载windows的Consul https://www.consul.io/ 使用cmd窗口打开,输入con ...