docker容器一

Posted yaun1498078591

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker容器一相关的知识,希望对你有一定的参考价值。

容器的介绍

容器是一种基础工具,泛指任何可以用于容纳其他物品的工具,可以部分或完全封闭,被用于容纳、存储、运输物品;物体可以被放置在容器中,而容器则可以保护内容物。

名称挂载点

Mount:挂载点

UTS:主机名与域名

IPC:信息量、消息队列和共享内存

PID:进程号

Network:网络设备、网络栈、端口号

user:用户和组

docker的概念

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

在 LXC 的基础上 Docker 进行了进一步的封装,就是用户创建容器的一个工具。让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

LXC: LinuX Container  (Linux容器)

chroot,根切换;
namespaces:名称空间
CGroups:控制组

简单使用

lxc-checkconfig:
检查系统环境是否满足容器使用要求;
lxc-create:创建lxc容器;
lxc-create -n NAME -t TEMPLATE_NAME
lxc-start:启动容器;
lxc-start -n NAME -d

Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多
Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器
更快速的交付和部署、更轻松的迁移和扩展

docker的安装

 Centos 官网http://vault.centos.org/查找与本机系统所匹配的源

# cd /etc/yum.repos.d/
# vim base.repo 
[base]
name=base
baseurl=file:///mnt/cd
gpgcheck=0

[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/
gpgcheck=0

[extras]
name=extras
baseurl=http://vault.centos.org/7.4.1708/extras/x86_64/
gpgcheck=0

阿里云官网:https://opsx.alibaba.com/上查找配置docker源

[docker]
name=docker
https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0
#yum install docker-ce -y #安装包
添加镜像加速器
#mkdir -p /etc/docker/
vim /etc/docker/daemon.json
{
 "registry-mirrors": ["https://registry.docker-cn.com"]
}   #(添加此行)官网的镜像加速器,还可以使用阿里云的镜像加速器

#systemctl start docker #启动服务
# ps aux | grep docker-ce #查看进程

docker命令

Containeers:管理容器

Images:管理镜像、映射

#docker version  #查看版本信息
#docker info  #查看详细信息;运行的容器个数;暂停的个数;镜像个数等

容器的管理

docker  search:#搜寻官网上的docker镜像
  例:#docker search nginx  #搜寻nginx的镜像
docker image  pull:#从官网上下载docker镜像
  例:#docker pull nginx   #下载搜索的nginx镜像
docker image list :#列出本地所有的docker镜像
#docker image list nginx    #只列出本地nginx版本的镜像
docker image rm   #删除下载下来的本地镜像
   例:#docker image rm nginx:1.14-alpine  #镜像+标签

docker restart  #重新启动docker容器

docker stop     #停止docker容器

docker kill    #强行停止docker容器

docker rm       #删除创建的容器)

容器的创建

 注:如果本地没有镜像文件,启动时会自动到官网下载

docker create:(创建docker容器)
  例:#docker create -it  --name b1 busybox:latest  #只是busybox需要添加-it的命令来创建
       #docker create --name b2 nginx   #其他容器的创建
docker start #启动docker容器     #docker start
-i -a b1 #( b1:为创建容器的自定义的名称;-i -a也只是busybox镜像启动的所添加的选项) #docker start b1 #其他容器的启动 docker run #直接创建运行docker容器;如果本地没人镜像文件docker会自动去官网上查询并下载。 例1 :#docker run --name b1 -it busybox:latest #b1为自定义的容器名称;-it 为开启交互式界面,既打开容器的界面,也busybox:latest 镜像     例2: #docker run --name web1 -d nginx #运行nginx的镜像;-d 不要运行在后台,因为此docker容器只有一个程序;如果运行在后台,容器上没有运行的程序,默认会终止此容器

例 :docker run –name red1 -d redis:4-alpine (创建一个redis镜像,版本号不指定,默认安装的是latest,由于本地没有镜像,会去官网上自动去下载)

技术分享图片

# docker image ls   #查看下载下来的镜像存放在本地
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              e1ddd7948a1c        14 hours ago        1.16MB
nginx               latest              c82521676580        7 days ago          109MB
redis               latest              f06a5773f01e        2 weeks ago         83.4MB
# docker container ls -a   #查看处于停止状态的daoke容器
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
98efd5c32689        redis               "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        6379/tcp            red1
e09e962eab28        nginx               "nginx -g ‘daemon of…"   5 minutes ago       Up 5 minutes        80/tcp              web1
de0348a6f872        busybox:latest      "sh"                     31 minutes ago      Created                                 b2
7914fa9050a1        nginx               "nginx -g ‘daemon of…"   32 minutes ago      Created                                 b1

交互式启动一个容器

-i:–interactive,交互式;
-t:Allocate a pseudo-TTY
#docker exec -it red1 /bin/sh     #以交互式的方式进入到已经开启的容器里面去
#docker ps | docker container  |  ps docker container ls   # 列出容器的详细信息

Docker镜像

docker的镜像文件官网 https://hub.docker.com/ 

# docker pull nginx:1.14-alpine   #后面为版本信息,在官网啊地址上搜寻的结果
#docker pull nginx  #后不加版本信息下载下来的是默认标签latest(最新)版本
#docker image list  #查看下载的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c82521676580 7 days ago 109MB

Docker镜像的原理及组成

Docker镜像含有启动容器所需要的文件系统及其内容,因此, 其用于创建并启动docker容器 。

结构

采用分层构建机制,最底层为bootfs,其之为rootfs

bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完 成后会被卸载以节约内存资源;

rootfs:位于bootfs之上,表现为docker容器的根文件系统;

传统模式中,系统启动之时,内核挂载rootfs时会首先将其挂载为“只读”模式, 完整性自检完成后将其重新挂载为读写模式

docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载 ”技术额外挂载一个“可写”层;

技术分享图片

位于下层的镜像称为父镜像(parent image),最底层的称为基础 镜像(base image)

最上层为“可读写”层,其下的均为“只读”层

技术分享图片

Registry  (docker镜像仓库)

在下载镜像时,如果不指定路径,默认是下载Docker Hub官方的镜像仓库里的镜像文件。

如果也没有指定tags(版本号);则默认下载latest(最新的)的版本。

Registry用于保存docker镜像,包括镜像的层次结构元数据

Repository  :由单个类型的docker镜像的所有迭代版本组成的镜像仓库 ;在镜像仓库之下。(例如:nginx;下面有多个版本的镜像文件,都是nginx的标签;但他都是nginx的镜像文件)

一个 Registry是由多个Repository镜像仓库所组成的。

https://quay.io/  (另一个镜像网站)

如果在此网上上下载格式为:docker pull quay.io/coreos/flannel:v0.10.0-arm64

(quay.io:官网地址:/coreos/flannel ;下图中所搜寻的flannel的前缀;:v0.10.0-arm64:版本号)

 

技术分享图片

 

技术分享图片

 镜像的制作 

#docker run –name b1 -it busybox:latest      #创建并启动一个容器
/ # mkdir -p /data/html
/ # cd /data/html
/data/html # vi index.html
     hello world!
不能将容器关闭或者退出,在容器运行状态下,另外开启一个linux的终端界面
# docker commit -p b1  #基于b1做新的镜像文件
sha256:7125d1bc1ed7fd23a0654432902386917ecf78d2deeda4d5933d05b61ed28597
# docker image ls  
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 7125d1bc1ed7 34 seconds ago 1.16MB  #由于并没有命名所以此镜像只有id号而没有名称
busybox latest e1ddd7948a1c 15 hours ago 1.16MB
nginx latest c82521676580 7 days ago 109MB
redis latest
#docker tag 2e8b205a2902 magedu/http:1.0     #由于刚创建的镜像没有名称和标签,使用不方便,可以创建名称和
标签:创建时要使用其id号来引用
#docker tag magedu/http:1.0 magedu/http:1.1    #给同一个镜像创建多个标签
# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
magedu/http 1.0 7125d1bc1ed7 2 minutes ago 1.16MB
magedu/http 1.1 7125d1bc1ed7 2 minutes ago 1.16MB
当一个镜像有多个标签时,删除一个标签不会将镜像删除,如果只有一个标签了,删除了最后一个标签就会将镜像删除了。
#docker image rm magedu/http:1.1     #删除其中一个镜像标签
#docker inspect nginx    #查看具体的镜像里的内容
#docker run –name ttt -it magedu/http:1.0    #开启新建的镜像

将镜像推送到官网

官网:https://hub.docker.com/

首先要在官网上注册一个个人的账号

登陆后创建一个仓库:Create Repository magedu/httpd   #仓库的名称

登陆:

#docker login -u yuanyaqiong    #如果是推送到官网上,不用写服务器的地址;如果不是则需要写服务器的地址

推送:

#docker push magedu/httpd   #如果不添加标签的化默认推送magedu/httpd;所有版本的

推送到阿里云的个人仓库

官网:https://cr.console.aliyun.com/cn-hangzhou/repositories  

注册账号,创建新的镜像仓库。

技术分享图片

 docker的四种网络模型

# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
da59a155e83a        bridge              bridge              local
01ece4a5d8e9        host                host                local
d2d9c9c358d6        none                null                local
null 无网卡的无网络模式,容器不需要和外界相连
bridge 桥接式 ,直接桥接到docker0网卡上。(默认使用的方法)
联盟式网络:让各个容器之间关于网络方面的名称空间是共用一个名称空间,然后再桥接到物理网卡上
docker容器都直接共用,物理网卡上。

技术分享图片

默认创建的是bridge网桥的方式

# docker network inspect bridge   #查看网络信息
[
    {
        "Name": "bridge",  桥接
"Id": "da59a155e83a87790dc8cf209ea66ddb3873ec0a2d0c1dfbb6c41deb6e64efed",
        "Created": "2018-08-03T03:43:45.163050409+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1" 网关
                }
            ]
        },

docker bridge 网络

宿主机会自动创建docker0 网段,以后创建的每个容器都是docker0网段的IP地址,他们之间可以相互连接的。宿主机上的docker0就像一个虚拟的交换机,将各个容器相互连接起来。

Docker0为NAT桥,因此容器一般获得的是私有网络地址 。

# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:4d:b8:81:c5  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

每创建一个docker容器运行就会生成一对网卡,一个在宿主机上,一个在容器上。

宿主机生成的网卡:(并将其关连到docker0的网卡上)

每个docker容器里生成的网卡及IP地址

# docker start -a -i b1  #b1容器的镜像是busybox:latest的打开方式
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  
          inet addr:172.17.0.3  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:648 (648.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

# docker exec -it web1 /bin/sh   #web1容器的镜像是nginx,run的情况下打开进入

每个docker容器里的网卡都可以ping通到宿主机的内网的IP地址,和外网的IP地址。

每创建一个docker容器就会生成一个iptables规则,将容器内的地址做转换,可以访问到外网。

/ # ping 192.168.130.7
PING 192.168.130.7 (192.168.130.7): 56 data bytes
64 bytes from 192.168.130.7: seq=0 ttl=64 time=0.216 ms
64 bytes from 192.168.130.7: seq=1 ttl=64 time=0.172 ms
64 bytes from 192.168.130.7: seq=2 ttl=64 time=0.150 ms

docker bridge网络下容器的几种网络模式

在同一个宿主机上的不同容器之间的访问:
如果有一个docker容器的nginx的服务,在另一个docker容器里应该是可以访问到nginx容器的nginx的web服务.
在宿主机上访问nginx容器的nginx的web服务。也是可以的。
另一台物理机要访问nginx容器的nginx的web服务器。无法直接访问,需要做地址关连,将nginx容器的IP地址关连到本地的内网或者外网的IP地址上去,这样外部的物理机就可以访问容器虚拟机的IP地址了。

创建网络名称空间,虚拟网卡,使其通信

#ip netns add r1  #创建网络名称空间r1
#ip netns add r2   #创建网络名称空间r2
#ip link add name veth1.1 type veth peer name veth1.2  #创建两个虚拟网卡
# ip link #查看虚拟网卡
11: veth1.2@veth1.1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
    link/ether b2:6d:48:6d:8e:2e brd ff:ff:ff:ff:ff:ff
12: veth1.1@veth1.2: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
    link/ether 16:1a:97:02:b6:a6 brd ff:ff:ff:ff:ff:ff
注意:默认虚拟网卡为被激活,使用ifconfig是不能查看到的
# ip link set dev veth1.2 netns r1  #把虚拟网卡移动到r1网络名称空间
# ip netns exec r1 ifconfig -a  #查看r1网络空间
veth1.2: flags=4098<BROADCAST,MULTICAST> mtu 1500
ether b2:6d:48:6d:8e:2e txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# ip netns exec r1 ip link set dev veth1.2 name eth1 #把网络卡名为veth1.2改为网卡名为eth1
# ip netns exec r1 ifconfig -a
eth1: flags=4098<BROADCAST,MULTICAST> mtu 1500
ether b2:6d:48:6d:8e:2e txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#ifconfig veth1.1 10.0.0.1/24 up #将宿主机里的虚拟网卡veth1.1创建一个地址并激活
#ifconfig
veth1.1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255
ether 16:1a:97:02:b6:a6 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#ping 10.0.0.1 #宿主机来ping网络空间的虚拟IP地址
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.049 ms

 创建各种网络模式的容器

# docker run --name f1 -it --rm busybox:latest  #创建一个busybox容器,退出后并删除
/ # exit
[[email protected] ~]# docker run --name f1 -it --network none --rm busybox:latest  #创建一个null模式的busybox容器
/ # ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
# docker run --name f1 -it --network none -h centos7.magedu.com --rm busybox:latest  #创建容器时,指定容器的主机名centos7.magedu.com
/ #
# docker run --name f1 -it --network none -h centos7.magedu.com --dns 8.8.8.8 --rm busybox:latest  #创建容器时指定DNS服务器的地址
/ # cat /etc/resolv.conf 
search magedu.com
nameserver 8.8.8.8
#docker run –name f1 -it –network none -h t1.magedu –add-host www.magedu.com:192.168.7.7 –rm busybox:latest  #指定hosts文件的dns解析地址

创建一个使用共同虚拟网卡的两个容器

# docker run --name tt --rm -it magedu/http:1.0   #在宿主机上创建tt容器
/ # ifconfig  #查看容器tt的IP
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:04 
inet addr:172.17.0.4 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:648 (648.0 B) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback 
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1 
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

/ # ping 127.0.0.1  #tt容器可以与宿主机的本地IP地址127.0.0.1连接
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.056 ms
64 bytes from 127.0.0.1: seq=1 ttl=64 time=0.120 ms

# docker run --name tk --network container:tt --rm -it magedu/http:1.0  #在相同的宿主机上在创建一个tk容器和tt共用一个虚拟地址
/ # ifconfig  #查看容器tk的IP
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:04 
inet addr:172.17.0.4 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:38 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:5785 (5.6 KiB) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback 
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1 
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

/ # ping 127.0.0.1   #tk容器可以与宿主机的本地IP地址127.0.0.1连接
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.084 ms
64 bytes from 127.0.0.1: seq=1 ttl=64 time=0.140 ms
此时两个容器共享了一个虚拟IP地址

创建一个使用共同物理网卡的两个容器

# docker run --name tt --network host --rm -it magedu/http:1.0
/ # ifconfig
docker0 Link encap:Ethernet HWaddr 02:42:4D:B8:81:C5 
inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
inet6 addr: fe80::42:4dff:feb8:81c5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:33 errors:0 dropped:0 overruns:0 frame:0
TX packets:79 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:2548 (2.4 KiB) TX bytes:10149 (9.9 KiB)

ens33 Link encap:Ethernet HWaddr 00:0C:29:C8:4E:67 
inet addr:192.168.130.7 Bcast:192.168.130.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fec8:4e67/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7857 errors:0 dropped:0 overruns:0 frame:0
TX packets:4484 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000 
RX bytes:696429 (680.1 KiB) TX bytes:569044 (555.7 KiB)
# docker run --name tt1 --network host --rm -it magedu/http:1.0
/ # ifconfig
docker0 Link encap:Ethernet HWaddr 02:42:4D:B8:81:C5 
inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
inet6 addr: fe80::42:4dff:feb8:81c5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:33 errors:0 dropped:0 overruns:0 frame:0
TX packets:79 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:2548 (2.4 KiB) TX bytes:10149 (9.9 KiB)

ens33 Link encap:Ethernet HWaddr 00:0C:29:C8:4E:67 
inet addr:192.168.130.7 Bcast:192.168.130.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fec8:4e67/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7857 errors:0 dropped:0 overruns:0 frame:0
TX packets:4484 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000 
RX bytes:696429 (680.1 KiB) TX bytes:569044 (555.7 KiB)

以上两个容器直接关连到宿主机上的所有的物理网卡上了。此时在浏览器上就可以直接访问容器里的虚拟机了,因为容器里的虚拟机的IP地址和宿主机的IP地址是相同的。

/ # echo "hello" >/tmp/index.html  #在tt1容器里简单的配置虚拟机的http服务的主页面
/ # httpd -h /tmp/   #启动的时候指定主页面的路径

在浏览器上访问宿主机的IP,可以看到容器提供http服务页面

技术分享图片

指定bridge的IP地址,不使用系统默认172.17.0.0/16的IP地址

#systemctl stop docker  #停止docker服务
#vim /etc/docker/daemon.json  #编辑添加加速器的配置文件
{
  "registry-mirrors": ["https://registry.docker-cn.com"],
 "bip": "10.0.0.1/16"
}
#systemctl start docker   #启动docker服务
#ifconfig  #查看IP
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 255.255.0.0 broadcast 10.0.255.255
inet6 fe80::42:4dff:feb8:81c5 prefixlen 64 scopeid 0x20<link>
ether 02:42:4d:b8:81:c5 txqueuelen 0 (Ethernet)
RX packets 33 bytes 2548 (2.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 79 bytes 10149 (9.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

 












以上是关于docker容器一的主要内容,如果未能解决你的问题,请参考以下文章

译丨Yarn - Javascript 新一代套件管理

部署到docker容器后图片验证码显示不出来

使用Docker容器来源码编译etcd

下一代分布式架构的王者Kubernetes权威指南:从Docker到Kubernetes实践全接触(第4版)PDF文档下载

docker全解

Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段