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

原文地址:https://www.cnblogs.com/yaun1498078591/p/9398681.html

时间: 2024-11-08 22:39:59

docker容器一的相关文章

关于自动化部署之docker容器的折腾小记

docker的英文本意是码头工人,也就是搬运工,这种搬运工搬运的是集装箱(Container),集装箱里面装的可不是商品货物,而是任意类型的App,Docker把App(叫Payload)装在Container内,通过Linux Container技术的包装将App变成一种标准化的.可移植的.自管理的组件,这种组件可以在你的latop上开发.调试.运行,最终非常方便和一致地运行在production环境下. 具体什么是docker,你们自己找资料吧,应该好理解.   可以说是个运维的利器,可以把

Docker容器基本知识

一.Docker 简介 1.1什么是Docker 简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案: 1.2为什么要用Docker而不是用虚拟机 在公司中的一个很大的用途就是可以保证线下的开发环境.测试环境和线上的生产环境一致.当年在 Baidu 经常碰到这样的事情,开发把东西做好了给测试去测,一般会给一坨代码和一个介绍上线步骤的上线单.结果代码在测试机跑不起来,开发就跑来跑去看问题,一会儿啊这个配置文件忘了提交了,一会儿啊这个上

Docker容器管理

创建容器: docker create -it [NAME]:[TAG] 启动容器: docker start ID 创建并启动容器: docker run -it [NAME]:[TAG] COMMAND [PARAMS] -i:让容器的标准输入保持打开. -t:让Docker分配一个伪终端. -d:让Docker容器在后台以守护态形式运行. 停止容器: docker stop ID 首先向容器发送SIGTERM信号,等待一段时间后再发送SIGKILL信号终止容器. docker kill I

Docker 网络之pipework 工具(3)单主机Docker容器VLAN划分

pipework不仅可以使用Linux bridge连接Docker容器,还可以与OpenVswitch结合,实现Docker容器的VLAN划分.下面,就来简单演示一下,在单机环境下,如何实现Docker容器间的二层隔离.为了演示隔离效果,我们将4个容器放在了同一个IP网段中.但实际他们是二层隔离的两个网络,有不同的广播域. 安装openvswitch 安装基础环境 [[email protected] ~]# yum -y install gcc make python-devel opens

使用Docker容器来源码编译etcd

背景 etcd是CoreOS公司开发的分布式键值对存储库.在Kubernetes中,我们需要使用etcd作为所有REST API对象的持久化存储. 不幸的是,在github的release中,CoreOS将etcd的二进制可执行文件都放在了亚马逊的S3存储上,在国内访问非常慢.因此,我们只能通过源码编译etcd. 过程 1. 下载etcd源码. $ git clone https://github.com/coreos/etcd.git $ cd etcd 2. 根据实际情况,选择合适的版本.如

docker容器的数据卷以及使用方式

            Docker容器的数据卷 想要了解Docker Volume,首先我们需要知道Docker的文件系统是如何工作的.Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载只读镜像层并在其上(即镜像栈顶部)添加一个读写层.如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏.当删除Docker容器,并通过该镜像重新启动时,之前的更改

docker容器网络通信原理分析

概述 自从docker容器出现以来,容器的网络通信就一直是大家关注的焦点,也是生产环境的迫切需求.而容器的网络通信又可以分为两大方面:单主机容器上的相互通信和跨主机的容器相互通信.而本文将分别针对这两方面,对容器的通信原理进行简单的分析,帮助大家更好地使用docker. docker单主机容器通信 基于对net namespace的控制,docker可以为在容器创建隔离的网络环境,在隔离的网络环境下,容器具有完全独立的网络栈,与宿主机隔离,也可以使容器共享主机或者其他容器的网络命名空间,基本可以

如何设置Docker容器中Java应用的内存限制

如果使用官方的Java镜像,或者基于Java镜像构建的Docker镜像,都可以通过传递 JAVA_OPTS 环境变量来轻松地设置JVM的内存参数.比如,对于官方Tomcat 镜像,我们可以执行下面命令来启动一个最大内存为512M的tomcat实例 docker run --rm -e JAVA_OPTS='-Xmx512m' tomcat:8 在日志中,我们可以清楚地发现设置已经生效 "Command line argument: -Xmx512m" 02-Apr-2016 12:46

对docker容器的增加或减少进行报警

需求: 当启动一个docker容器时立即发送报警,当停止一个docker容器时立即发送报警, 说明: 脚本只能检测UP状态,对restarting状态不进行处理,加入定时任务每分钟执行一次(执行频率自定义),该脚本的目的只是为防止异常容器启动,在我们规定名称外的定义为异常容器,在匹配容器名称的时候可以通过"grep -v lyj_ " 来对统一前缀的容器进行过滤 脚本内容: #!/bin/bash # */1 * * * * bash /opt/docker_process_monit

docker 容器常用命令

1 启动容器 启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动. 因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器. 新建并启动 所需要的命令主要为 docker run 例如,下面的命令输出一个 "Hello World",之后终止容器. [[email protected] ~]# docker run docker.io/centos:v1 /bin/echo "hello wor