Docker:网络及数据卷设置 [四]
一、Docker网络设置
默认情况下,docker
会创建一个桥接网卡[docker 0]
,docker有2种映射方式,一种是随机映射,一种是指定映射
提示:生产场景一般不使用随机映射
,但是随机映射的好处就是由docker分配
,端口不会冲突
案例1:使用docker启动nginx随机映射
配置
[root@docker1 ~]# docker run -d -P nginx
63cbe30165c8fb2ce7789a8173db6f2060705028ce6c326d1f0cd467bdee583c
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63cbe30165c8 nginx "nginx -g 'daemon off" 8 seconds ago Up 7 seconds 0.0.0.0:32768->80/tcp, 0.0.0.0:32768->443/tcp drunk_bhabha
[root@docker1 ~]#
提示:物理机的32768被映射到80端口
-P代表随机映射
访问
我们可以查看我们的端口
[root@docker1 ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 19995/mysqld
tcp 0 0 0.0.0.0:4369 0.0.0.0:* LISTEN 21574/epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1094/sshd
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 21557/beam
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1372/master
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 21557/beam
tcp6 0 0 :::4369 :::* LISTEN 21574/epmd
tcp6 0 0 :::22 :::* LISTEN 1094/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1372/master
tcp6 0 0 :::32768 :::* LISTEN 55956/docker-proxy
tcp6 0 0 :::32768 :::* LISTEN 55963/docker-proxy
tcp6 0 0 :::5672 :::* LISTEN 21557/beam
udp 0 0 0.0.0.0:123 0.0.0.0:* 19389/chronyd
udp 0 0 127.0.0.1:323 0.0.0.0:* 19389/chronyd
udp6 0 0 ::1:323 :::* 19389/chronyd
我们可以看一下iptables查看Nat表
[root@docker1 ~]# iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 2 packets, 473 bytes)
pkts bytes target prot opt in out source destination
13 664 DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT 2 packets, 473 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 1 packets, 76 bytes)
pkts bytes target prot opt in out source destination
0 0 DOCKER all -- * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT 11 packets, 584 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * !docker0 172.17.0.0/16 0.0.0.0/0
0 0 MASQUERADE tcp -- * * 172.17.0.2 172.17.0.2 tcp dpt:443
0 0 MASQUERADE tcp -- * * 172.17.0.2 172.17.0.2 tcp dpt:80
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0
9 456 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:32768 to:172.17.0.2:443
1 52 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:32768 to:172.17.0.2:80
进入容器
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63cbe30165c8 nginx "nginx -g 'daemon off" 6 minutes ago Up 6 minutes 0.0.0.0:32768->80/tcp, 0.0.0.0:32768->443/tcp drunk_bhabha
[root@docker1 ~]# ./docker_in.sh 63cbe30165c8
提示:脚本可以查看我们基础介绍
提示:因为我们没有给容器命名,所以需要使用ID进行进入
docker运行的第一进程的pid为1
root@63cbe30165c8:/# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 31752 2872 ? Ss 22:53 0:00 nginx: master process nginx -g daemon off;
nginx 6 0.0 0.1 32144 1908 ? S 22:53 0:00 nginx: worker process
root 7 0.0 0.1 20252 1916 ? S 23:01 0:00 -bash
root 11 0.0 0.0 17492 1156 ? R+ 23:01 0:00 ps aux
docker默认会使用dhcp分配IP地址,但是我们如果想访问到需要设置iptables
root@63cbe30165c8:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
22: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:2/64 scope link
valid_lft forever preferred_lft forever
我们可以使用docker logs [ID/Name]
来查看日志
[root@docker1 ~]# docker logs 63cbe30165c8
192.168.56.1 - - [19/Oct/2016:22:56:00 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0" "-"
192.168.56.1 - - [19/Oct/2016:22:56:00 +0000] "GET /favicon.ico HTTP/1.1" 404 169 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0" "-"
2016/10/19 22:56:00 [error] 6#6: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.56.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "92.168.228.134:32768"
192.168.56.1 - - [19/Oct/2016:22:56:00 +0000] "GET /favicon.ico HTTP/1.1" 404 169 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0" "-"
2016/10/19 22:56:00 [error] 6#6: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.56.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "92.168.228.134:32768"
案例2:使用docker启动一个nginx,指定81
端口
[root@docker1 ~]# docker run -d -p 92.168.228.134:81:80 --name mynginx nginx
65439bce352e712597f5a74dcf6c9978458fd02e6ed0f243fe87cad8c690d855
[root@docker1 ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
65439bce352e nginx "nginx -g 'daemon off" 10 seconds ago Up 9 seconds 443/tcp, 92.168.228.134:81->80/tcp mynginx
提示: -d代表后台运行 -p 指定端口 --name 指定名称
访问
通过端口映射,我们就可以非常方便的去访问到容器内部的服务
案例3:docker 启动映射多端口
[root@docker1 ~]# docker run -d -p 443:443 -p 82:80 --name nginxv2 nginx
865aed79c5ec875c5d7a033267c9d124324201f92d66382a152d1743533a586b
[root@docker1 ~]# docker port nginxv2
443/tcp -> 0.0.0.0:443
80/tcp -> 0.0.0.0:82
二、Docker数据管理
Docker数据分为两种:
数据卷: -v /data
-v src:dst
数据卷容器: --volumes-from
可以将数据卷理解为挂载,可以将数据mount到docker镜像中,让我在docker镜像里写数据时,实际写入的是物理主机里面。如果容器多了,不方便管
数据卷设置
案例:我们创建一个容器,起名叫nginx-volume-test
挂载到容器中的/data
目录下
root@docker1 ~]# docker run -d --name nginx-volume-time -v /data nginx
进入容器,目录下已经有我们data目录
[root@docker1 ~]# ./docker_in.sh nginx-volume-time
root@e3356d281a09:/# ls /
bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
我们可以查看当前挂载目录
root@e3356d281a09:/# mount
/dev/mapper/docker-253:0-134820964-eacae32f571b8595b10bac6c082732e75497540886e8c3ac72baa62d493a973e on / type xfs (rw,relatime,nouuid,attr2,inode64,logbsize=64k,sunit=128,swidth=128,noquota)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev type tmpfs (rw,nosuid,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,relatime,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (ro,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/freezer type cgroup (ro,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/perf_event type cgroup (ro,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpuacct,cpu type cgroup (ro,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (ro,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/blkio type cgroup (ro,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/devices type cgroup (ro,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/memory type cgroup (ro,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/net_cls type cgroup (ro,nosuid,nodev,noexec,relatime,net_cls)
cgroup on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpuset)
/dev/mapper/centos-root on /data type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/centos-root on /run/secrets type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/centos-root on /etc/resolv.conf type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/centos-root on /etc/hostname type xfs (rw,relatime,attr2,inode64,noquota)
/dev/mapper/centos-root on /etc/hosts type xfs (rw,relatime,attr2,inode64,noquota)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k)
proc on /proc/asound type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/bus type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/fs type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/irq type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/sys type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/sysrq-trigger type proc (ro,nosuid,nodev,noexec,relatime)
tmpfs on /proc/kcore type tmpfs (rw,nosuid,mode=755)
tmpfs on /proc/timer_stats type tmpfs (rw,nosuid,mode=755)
提示:虽然我们不知道mount到哪里,但是在却有date目录 /dev/mapper/centos-root on /data type xfs (rw,relatime,attr2,inode64,noquota)
root@e3356d281a09:/# ls
bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr va
我们可以通过docker inspect
来查看mount
的情况
[root@docker1 ~]# docker inspect -f {{.Mounts}} nginx-volume-time
[{a6310b873c068834dd267a94c9a8173b8a6b21f2251066218ba3deb819705d36 /var/lib/docker/volumes/a6310b873c068834dd267a94c9a8173b8a6b21f2251066218ba3deb819705d36/_data /data local true }]
mount挂载就是我们下面路径下的内容
[root@docker1 _data]# pwd
/var/lib/docker/volumes/a6310b873c068834dd267a94c9a8173b8a6b21f2251066218ba3deb819705d36/_data
我们可以在这个文件下创建一个文件,然后在进容器中进行查看
[root@docker1 _data]# touch luoahong.txt
[root@docker1 _data]#
---------------------容器分割线-------------------------------
root@e3356d281a09:/# ls /data/
luoahong.txt
我们还可以使用-v
指定一个卷用来作为存储
我们可以创建一个目录,用来指定。
[root@docker1 _data]# mkdir -p /data/docker-volume-nginx
[root@docker1 _data]# docker run -d --name nginx-volume-test2 -v /data/docker-volume-nginx/:/data nginx
b2bef96c8330583b555b576134e3f32db02050eb2bd3bb09defcfe89d4b72862
提示:-v /data/docker-volume-nginx 存储文件的目录
data 容器中的目录
查看
[root@docker1 _data]# echo "123" >>/data/docker-volume-nginx/1.txt
root@b2bef96c8330:/# cat /data/1.txt
123
提示:这种方法生产上会比较实用一些,但是这种方式dockerfile
里不支持.因为这种方法不可移植
我们可以添加几个参数
[root@docker1 _data]# docker run -d --name nginx-volume-test2 -v /data/docker-volume-nginx/:/data:ro nginx
# 添加ro代表只读,可以使用只读的方式来挂载
容器还可以挂载文件
例如:我们挂载一个.bash_history
,挂载完并删除
[root@docker1 ~]# docker run --rm -it -v /root/.bash_history:/.bash_history nginx /bin/bash
root@63ed2c5eef1c:/# head .bash_history
ifcon
现在如果我们退出这个容器就会关闭
容器数据之间同步
案例:
[root@docker1 ~]# docker run -d --name nfs -v /root/nfs-data:/data nginx
30c74a55685050027316347b6de20058af3665fb87b1fd7bca14e7316e8e900e
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
30c74a556850 nginx "nginx -g 'daemon off" 4 seconds ago Up 4 seconds 80/tcp, 443/tcp nfs
b2bef96c8330 nginx "nginx -g 'daemon off" 2 hours ago Up 2 hours 80/tcp, 443/tcp nginx-volume-test2
e3356d281a09 nginx "nginx -g 'daemon off" 3 days ago Up 3 days 80/tcp, 443/tcp nginx-volume-time
[root@docker1 ~]# docker run --rm -it --volumes-from nfs centos /bin/bash
[root@1a29a9cdffdf /]# cd /data/
[root@1a29a9cdffdf data]# ls
[root@1a29a9cdffdf data]# touch 123456567
切换进去查看
[root@docker1 ~]# cd nfs-data/
[root@docker1 nfs-data]# ls
123456567
数据卷容器
数据卷容器就是可以让一个容器访问另一个容器的卷,不管这个容器是否运行都可以访问到。
数据卷容器简单解释就是:它可以让这个数据在多个容器中共享
[root@docker1 ~]# docker run -it --rm --name volume-test3 --volumes-from nginx-volume-test2 centos /bin/bash
--volumes-from 另一个容器的名称
此时我们可以看到根目录下有data目录,因为默认是没有的
[root@f06ca39d6090 /]# ls /data/1.txt
/data/1.txt
现在我们可以访问到nginx-volume-test2
下面挂载的目录,这就实现类似nfs的功能
提示:我们现在如果停掉test2
一样可以访问,数据卷容器还有一个好处是不管这个容器是否运行都会起作用,只要有容器在使用数据卷容器就无法删除
Docker:网络及数据卷设置 [四]的更多相关文章
- 《Docekr入门学习篇》——Docker网络及数据卷
Docker网络设置 默认情况下docker会创建一个桥接网卡[docker 0],docker有两种映射方式,一种是随机映射,一种是指定映射. 提示:生产场景一般不使用随机映射,但是随机映射的好处是 ...
- docker学习5--docker数据卷(volume)
https://blog.csdn.net/dream_broken/article/details/52314993 1.什么是数据卷volume 为了了解什么是Docker Volume,首先我们 ...
- Docker容器的数据卷(data volume),数据卷容器,数据卷的备份和还原。
Docker容器的数据卷(data volume),数据卷容器,数据卷的备份和还原. 数据卷就是数据(一个文件或者文件夹). Docker的理念之一是将应用与其运行的环境打包,docker容器的生命周 ...
- Docker提交镜像-数据卷-可视化
在熟悉完Docker的安装及基本命令使用之后,我们开始学习下Docker的进阶操作:包括但不限于新建Docker镜像,数据卷的挂载,以及Docker的可视化等. Docker提交镜像 启动镜像 我们先 ...
- Docker容器的数据卷
一.数据卷概念 1.数据卷是宿主机中的一个目录或文件 2.当容器目录和数据卷目录绑定后,对方的修改会立即同步 3.一个数据卷可以被多个容器同时挂载 4.一个容器也可以挂载多个数据卷 简单理解:有点类似 ...
- 使用docker inspect获取数据卷信息时返回地址为空
使用 docker inspect 命令查看容器挂载的volume的目录 $ sudo docker inspect --format "{{.Volumes}}" redis-m ...
- 【Docker】利用数据卷容器来备份、恢复、迁移数据卷
利用数据卷容器来备份.恢复.迁移数据卷 可以利用数据卷对其中的数据进行进行备份.恢复和迁移. 备份 首先使用 --volumes-from 标记来创建一个加载 dbdata 容器卷的容器,并从主机挂载 ...
- docker仓库及数据卷
docker help rmi, 删除本地镜像 docker run -it --name=centos centos:latest /bin/sh --name的选项可以方便我们以后引用此imag ...
- Docker 容器的数据卷
数据卷的特点: 1. 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中 2. 数据卷可以在容器之间共享和重用 3. 可以对数据卷里的内容直接进行修改 ...
随机推荐
- c/c++ linux 进程间通信系列7,使用pthread mutex
linux 进程间通信系列7,使用pthread mutex #include <stdio.h> #include <stdlib.h> #include <unist ...
- SourceTree下载bitbucket代码
SourceTree安装方法 下载地址:https://www.sourcetreeapp.com/ 列几个安装过程中的注意点: 根URL(Root URL):https://bitbucket.or ...
- js 学习之路6: if...else...条件语句的使用
1.1 if (...) { ... } else { ... } <!DOCTYPE html> <html> <meta http-equiv="Conte ...
- java反射(java.lang.reflect) ---普通单例模式唯一性问题
1. 普通的饱汉式.饿汉式 package org.bighead.test2; public class TestPrivate { private String str = "strPr ...
- SQLServer之修改DEFAULT约束
使用SSMS数据库管理工具修改DEFAULT约束 1.连接数据库.选择数据表->右键点击->选择设计. 2.在表设计器窗口->选中要修改的数据列->在列属性中找到默认值绑定-& ...
- css3新特性合集
转自:https://www.cnblogs.com/xiaoxie2016/p/5964694.html (若原作者对此转载有疑问,联系删除,谢谢!) animation IE10 anima ...
- java.io.IOException: There appears to be a gap in the edit log. We expected txid ***, but got txid
方式1 原因:namenode元数据被破坏,需要修复解决:恢复一下namenode hadoop namenode -recover 一路选择Y,一般就OK了 方式2 Need to copy the ...
- 新建swap分区的规划、挂载和自动挂载示例
注:来自Linux系统管理_磁盘分区和格式化的扩展 Linux系统管理_磁盘分区和格式化:http://murongqingqqq.blog.51cto.com/2902694/1361918 思路: ...
- 干货:Vue粒子特效(vue-particles插件)
转:https://www.jianshu.com/p/53199b842d25 image.png 图上那些类似于星座图的点和线,是由vue-particles生成的,不仅自己动,而且能与用户鼠标事 ...
- 看完python这段爬虫代码,java流泪了c#沉默了
哈哈,其实很简单,寥寥几行代码网页爬一部小说,不卖关子,立刻开始. 首先安装所需的包,requests,BeautifulSoup4 控制台执行 pip install requests pip in ...