Docker 网络

启动了nginx容器,但却不知道从哪里进行访问nginx。

启动nginx容器,并附加网络映射

在启动nginx容器的时候,增加一个-P大写的P的参数

表示随机映射一个端口

[root@node ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 5182e96772bf 2 weeks ago 200 MB
docker.io/nginx latest c82521676580 4 weeks ago 109 MB
[root@node ~]# docker run -P -d --name mynginx1 nginx
b477b9acaae66b61adf60fe80e26e724b2894774b536925e5bfa0e40679edc5c
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b477b9acaae6 nginx "nginx -g 'daemon ..." 26 seconds ago Up 25 seconds 0.0.0.0:32768->80/tcp mynginx1

从ps查看的容器来看,随机映射了一个32768端口到内网的80端口

然后通过浏览器试一下:

我虚拟机的IP是:10.0.0.101,所以访问的地址是:10.0.0.101:32768

可以看到可以正常访问了;

因为-P的参数,是随机映射一个端口,这样也不会使映射的端口重复,但也很麻烦

手动指定映射的端口

下面使用-p小写的P的参数,来指定映射的端口

测试指定 91 端口来映射nginx容器的 80 端口

[root@node ~]# docker run -d -p 91:80 --name mynginx2 nginx
f5e8a227d18bff2ca0b253209cd3892991b1c29368e4087a4575e78a91bf3f25
[root@node ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f5e8a227d18b nginx "nginx -g 'daemon ..." 6 seconds ago Up 5 seconds 0.0.0.0:91->80/tcp mynginx2

可以看到,映射正常,下面测试访问

可以正常访问,映射没问题;

映射端口相关参数使用解释:

参数和使用 解释
-P 随机映射一个端口
-p hostPort:containerPort 指定一个端口
-p ip:hostPort:containerPort 指定IP上的一个端口;表示机器有多个IP的时候
-p ip::containerPort 随机一个端口
-p hostPort:containerPort   -p hostPort:containerPort 可以一次性映射多个指定的端口,使用多个 -p 参数,以空格区分

Docker 数据管理

数据卷:

  • -v /data
  • -v src:dst

数据卷容器

  • --volumes-from

命令:docker run -d -it --name volume-test1 -h nginx -v /data centos

-h 表示指定一个主机名

-v /data 表示在启动的容器中,挂在一个/data磁盘

[root@node ~]# docker run -d -it --name volume-test1 -h nginx -v /data centos
9bdd7385e218275c662b6e98dfc28f674101ba2cd1c7d75f8514eba1b5553c63
[root@node ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9bdd7385e218 centos "/bin/bash" 13 seconds ago Up 12 seconds volume-test1
[root@node ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9bdd7385e218 centos "/bin/bash" 19 seconds ago Up 18 seconds volume-test1
[root@node ~]# ./in.sh volume-test1
# 这里可以看到有data目录
[root@nginx /]# ls -ld /data/
drwxr-xr-x 2 root root 6 Aug 23 03:03 /data/

-v 把让容器直接把数据卸载对应的物理磁盘下,那数据到底卸载什么地方吗?

下面让来测试验证一下

[root@node ~]# docker inspect volume-test1 | grep Mounts -A 10
"Mounts": [
{
"Type": "volume",
"Name": "8cce49ca0e2cb266737376697ee19010c1b0565766ee6f5ab293ac011af36b7e",
"Source": "/var/lib/docker/volumes/8cce49ca0e2cb266737376697ee19010c1b0565766ee6f5ab293ac011af36b7e/_data",
"Destination": "/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
# 上面的命令可以看到data映射的宿主机的目录是:
# /var/lib/docker/volumes/8cce49ca0e2cb266737376697ee19010c1b0565766ee6f5ab293ac011af36b7e/_data
# 下面进入这个目录下,创建一个test文件,然后在容器中查看是否一致

在宿主机操作:

[root@node ~]# cd /var/lib/docker/volumes/8cce49ca0e2cb266737376697ee19010c1b0565766ee6f5ab293ac011af36b7e/_data
[root@node _data]# touch test
[root@node _data]# ls -l
total 0
-rw-r--r-- 1 root root 0 Aug 23 11:12 test

回到容器中查看:

[root@nginx /]# ls /data/
test

正常,这样就自然懂了。

上面的是随机映射容器上的目录到宿主机的一个很深程度的目录

下面来进行映射指定目录到容器中

使用/opt 来挂在,查看宿主机的/opt 下有什么文件

[root@node ~]# ls /opt/
scripts

创建容器:

[root@node ~]# docker run -it --name volume-test2 -h nginx -v /opt:/opt centos
[root@nginx /]# ls /opt/
scripts

可以看到,正产挂载。

注意:

-v 指定挂载目录/opt:/opt 两个目录后面不能有/,否则会出错

挂在一个只读目录

就是在创建容器挂在目录的后增加:ro

命令:docker run -it --name volume-test2 -h nginx -v /opt:/opt:ro centos

这里就不测试了;

数据卷容器使用

特意创建一个容器,该容器只是存储数据

然后在创建一个容器的时候指定

注意:存储的容器,无所谓是停止的状态还是运行的状态,都可以被新的容器来进行引入挂在

[root@node ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da780039c311 centos "/bin/bash" 2 hours ago Exited (0) 20 seconds ago volume-test2
9bdd7385e218 centos "/bin/bash" 3 hours ago Up 3 hours volume-test1
[root@node ~]# docker run -d -it --name volume-test4 --volumes-from volume-test1 centos
5d1a237482dca43589973bdbd7e0456426cba0e7cfab4c5d92eed3549ff43d14
[root@node ~]# ./in.sh volume-test4
[root@5d1a237482dc /]# ls /data/
test
# 这里可以掩饰可以看到,/data 已经被挂在成功了

3、Docker 基础安装和基础使用 二的更多相关文章

  1. 2、Docker 基础安装和基础使用 一

    基础环境 本次环境使用Centos 7.x版本系统,最小化安装,系统基础优化配置请查看 Centos 7.x 系统基础优化 安装 使用命令:yum install docker-io -y [root ...

  2. Linux ubuntu下docker容器安装和基础命令

    Docker介绍: 云计算就好比大货轮,docker就是集装箱虚拟机虽然可以隔离出很多"子电脑",但占用空间更大,启动更慢,虚拟机软件可能还要花钱(例如VMWare). 而容器技术 ...

  3. docker的安装和基础使用

    Docker EE/Docker CE简介与版本规划 版本区别 Docker EE Docker EE由公司支持,可在经过认证的操作系统和云提供商中使用,并可运行来自Docker Store的.经过认 ...

  4. docker的安装及基础操作与镜像构建

    仓库配置及安装启动 [root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 [root@loca ...

  5. Docker harbor 安装和基础操作

    目录 简介 离线安装 配置文件 安装 查看 访问测试 及 简单操作 创建一个用户 创建一个测试仓库 创建测试仓库 测试上传和下载镜像 上传 下载镜像测试 简介 Docker容器应用的开发和运行离不开可 ...

  6. Docker 安装入门 --基础镜像

    安装Docker1.Docker命令安装 yum install docker //安装docker包 service docker start //设置服务启动  chkconfig docker ...

  7. Docker 安装和基础用法

    理解Docker(1):Docker 安装和基础用法 本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 ...

  8. Docker安装及基础使用

    Docker 安装 在 Mac OS X 系统中,首先你要下载安装包安装:Docker Toolbox 安装过程中,可以选择是否安装 Docker Machine,Docker Compose 等,默 ...

  9. 【Mac】Docker安装及基础使用

    Docker 安装 在 Mac OS X 系统中,首先你要下载安装包安装:Docker Toolbox 安装过程中,可以选择是否安装 Docker Machine,Docker Compose 等,默 ...

随机推荐

  1. Django实现WebSSH操作物理机或虚拟机

    我想用它替换掉xshell.crt之类的工具 WebSSH操作物理机或虚拟机 Django实现WebSSH操作Kubernetes Pod文章发布后,有小伙伴说咖啡哥,我们现在还没有用上Kuberne ...

  2. 图片瀑布流,so easy!

    什么是图片瀑布流 用一张花瓣网页的图片布局可以很清楚看出图片瀑布流的样子: 简单来说,就是有很多图片平铺在页面上,每张图片的宽度相同,但是高度不同,这样错落有致的排列出 n 列的样子很像瀑布,于是就有 ...

  3. 解决靶机Bee-Box 键盘乱序问题

    Bee-Box介绍 Bee-box官方称呼BWAPP,buggy web Application 这是一个集成了各种常见漏洞和最新漏洞的开源Web应用程序,目的是帮助网络安全爱好者.开发人员和学生发现 ...

  4. pymssql默认关闭自动模式开启事务行为浅析

    使用Python采集SQL Server数据库服务器磁盘信息时,遇到了一个错误"CONFIG statement cannot be used inside a user transacti ...

  5. SasS 设计原则十二因素

    Heroku 是业内知名的云应用平台,从对外提供服务以来,他们已经有上百万应用的托管和运营经验.其创始人 Adam Wiggins 根据这些经验,发布了一个“十二要素应用宣言(The Twelve-F ...

  6. RabbitMQ-交换机模式

    在说正题之前先解释一下交换机模式是个笼统的称呼,它不是一个单独的模式(包括了订阅模式,路由模式和主题模式),交换机模式是一个比较常用的模式,主要是为了实现数据的同步. 首先,说一下订阅模式,就和字面上 ...

  7. abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理八(二十六)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  8. JDBC报错:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone

    报错原因:查阅资料发现这都是因为安装mysql的时候时区设置的不正确 mysql默认的是美国的时区,而我们中国大陆要比他们迟8小时,采用+8:00格式 解决方法: 1.修改MySQL的配置文件,MyS ...

  9. 创建windows系统下的虚拟机

    创建新的虚拟机  添加映像(windows系统下必须先添加映像) 选择相应的镜像文件:网上查找密钥输入:版本按要求选择:单击 下一步:设置虚拟机名称  位置 :下一步 默认的磁盘大小(不用管)——下一 ...

  10. go-micro+php+consul简单的微服实现

    首先我们用go-micro构建一个服务.(关于go-micro的使用可以参照官方实例或者文档) //新建一个微服务 micro new --type "srv" user-srv ...