docker手册 3

简介: docker手册

ENTRYPOINT

用来指定一个容器启动时要运行的命令

类似于 CMD 指令,但是ENTRYPOINT不会被

docker run后面的命令覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令

指定的程序

1 ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给

ENTRYPOINT 传参

也就是说当我们指定了ENTRYPOINT之后,CMD的含义就发生了变化,不再是直接运行命

令,而是将CMD命令的内容作为参数传递给ENTRYPOINT 指令

最终会组合成 ENTRYPOINT "<CMD>"

1 FROM nginx
2
3 ENTRYPOINT ["nginx", "-c"] # 定参
4 CMD ["/etc/nginx/nginx.conf"] # 变参

注意

😀在执行docker run的时候可以指定 ENTRYPOINT 运行所需的参数

如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效

dockerfile命令列表

1 FROM #镜像基础 镜像从这里开始构建
2 MAINTAINER #镜像是谁写里 姓名:邮箱
3 RUN #镜像构建的时候需要运行的命令
4 ADD #将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包(copy文件,会自动解压)
5 WORKDIR #设置工作目录(不指定就在启动目录运行 )
6 VOLUME #挂载的目录
7 EXPOSE #暴露端口配置8 CMD #MA(只有最后一个会生效可被替代)
9 ENTRYPOINT #指定这个容器启动的命令,可以追加命令
10 ONBUILD #当构建一个被继承 dockerfile这个时候就会运行ONBUILD 的指令 触发指令
11 COPY #类似ADD 将文件拷贝进容器
12 ENV #构建的时候设置环境变量

创建一个自己的centos

docker网络

我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,

就会有一个网卡docker0桥接模式,使用的技术是evth-pair

docker实际上就相当于一个虚拟的交换机,我们用的电脑就相当于容器, 我们的docker0

和容器就相当于在一个局域网呢

对比这两个IP就能发现都在同一个局域网内

evth-pair

就是 一对的虚拟设备接口,他们都是成对出现的, 一段连着协议,一段彼此相连

正因为有这个特性,evth-pair 充当一个桥梁 连接各种虚拟网络设备的

容器和容器之间是可以互相ping通的

两个容器是共用一个路由器 docker0

所有的容器不指定网络的情况下 都是docker路由的 docker会给我们的容器分配一个默认

的ip

docker种的所有网络接口都是虚拟机

docker默认提供了三种网络模式,生成容器时不指定的情况下默认使用bridge模式bridge模式(默认)

这种模式会为每个容器分配一个独立的Network Namespace(网络空间)同一个宿主机上所

有容器都会在同一个网段下,相互之间是可以通信的

host模式

如果容器使用时使用host模式,那么容器将不会获得一个Network Namespace(网络空间)

而是和主机同用一个Network Namespace 容器将不会虚拟出自己的网卡,配置IP,而是使

用宿主机的IP和端口 但是容器其他方面 如文件系统 进程列表 还是和宿主机隔离的

😀使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端

口也可以使用宿主机的端口,host最大的优势就是网络性能比较好,但是docker

host上已经使用的端口就不能再用了,网络的隔离性不好

none模式

使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何

网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加

网卡、配置IP等。

这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器创建时通过--

network=none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。

macvlan模式

Macvlan Network:属于Docker的网络驱动。

把docker主机网卡接口逻辑上分为多个子接口 每个子接口标识一个vlan容

器直接连接

docker主机接口通过路由策略转发到另一个docker主机

macvlan最大的优势 它支持能去连接子接口 linux子接口最大4094个1

首先开启网卡混杂模式
2 ifconfig 网卡名称 promisc #网卡名通过ip a去查看
3 创建docker macvlan 网络
4 docker network create -d macvlan --subnet=172.16.42.0/24(你的网段) --gateway=172.16.42.2
(网关) -o parent=ens33(网卡名) 网络名
5 -d 指定 Docker 网络 driver
6 --subnet 指定 macvlan 网络所在的网络
7 --gateway 指定网关
8 -o parent 指定用来分配 macvlan 网络的物理网卡
9 启动一个容器指定网络指定IP
10 docker run -itd --name=nginx --ip=192.168.42.200 --network=test-xiaole nginx
11 --ip #指定容器的ip
12 --network #指定容器所使用的网络

Docker 容器互联

端口映射并不是唯一把 docker 连接到另一个容器的方法。

docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。

docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。

1 新建一个网络
2 docker network create -d 网络模式 网卡名
3 [root@localhost nginx]# docker network create -d bridge xiaole
4 e697268c65667812add726ac562b087b2ebfb87ba299d75f65b92553ceb2f6ad
5 查看网络列表
6 docker network ls
7 [root@localhost nginx]# docker network ls
8 NETWORK ID NAME DRIVER SCOPE
9 62a5ed6d7649 bridge bridge local
10 00603cd7338b host host local
11 131e07c80505 none null local
12 75cc4ca5f7ce test-xiaole macvlan local
13 e697268c6566 xiaole bridge local
14 最下面一行就是我们新添加的网络
15
16 运行一个容器并连接到网络17 [root@localhost nginx]# docker run -itd --network=xiaole --name=centos1 58f02a033062 
 启动第一个容器并添加到xiaole网络里
18 ccf77bbbafc9502b555e167fea643b0ca452f97a2d7587081c6c559f724d5b08
19
20 --network 要使用哪个网络
21
22 [root@localhost nginx]# docker ps
23 CONTAINER ID IMAGE COMMAND CREATED STATUS
 PORTS NAMES
24 ccf77bbbafc9 58f02a033062 "/bin/bash" 3 seconds ago Up 2
seconds centos1
25 [root@localhost nginx]# docker run -itd --network=xiaole --name=centos2 58f02a033062 
 动第二个容器并添加到xiaole网络里
26 19df38d91d74633875153dbedd823746ee451fb7158e194fdd6d4caad393c820
27 [root@localhost nginx]# docker ps
28 CONTAINER ID IMAGE COMMAND CREATED STATUS
 PORTS NAMES
29 19df38d91d74 58f02a033062 "/bin/bash" 3 seconds ago Up 2
seconds centos2
30 ccf77bbbafc9 58f02a033062 "/bin/bash" 17 seconds ago Up 16
seconds centos1
31 [root@localhost nginx]# docker exec 19df38d91d74 ifconfig 获取容器ip
32 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
33 inet 172.18.0.3 netmask 255.255.0.0 broadcast 0.0.0.0
34 inet6 fe80::42:acff:fe12:3 prefixlen 64 scopeid 0x20<link>
35 ether 02:42:ac:12:00:03 txqueuelen 0 (Ethernet)
36 RX packets 8 bytes 656 (656.0 B)
37 RX errors 0 dropped 0 overruns 0 frame 0
38 TX packets 8 bytes 656 (656.0 B)
39 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
40
41 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
42 inet 127.0.0.1 netmask 255.0.0.0
43 inet6 ::1 prefixlen 128 scopeid 0x10<host>
44 loop txqueuelen 1000 (Local Loopback)
45 RX packets 0 bytes 0 (0.0 B)
46 RX errors 0 dropped 0 overruns 0 frame 0
47 TX packets 0 bytes 0 (0.0 B)
48 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
49
50 [root@localhost nginx]# docker exec ccf77bbbafc9 ifconfig 获取容器ip
51 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 150052 inet 172.18.0.2 netmask 255.255.0.0 broadcast 0.0.0.0
53 inet6 fe80::42:acff:fe12:2 prefixlen 64 scopeid 0x20<link>
54 ether 02:42:ac:12:00:02 txqueuelen 0 (Ethernet)
55 RX packets 24 bytes 1968 (1.9 KiB)
56 RX errors 0 dropped 0 overruns 0 frame 0
57 TX packets 8 bytes 656 (656.0 B)
58 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
59
60 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
61 inet 127.0.0.1 netmask 255.0.0.0
62 inet6 ::1 prefixlen 128 scopeid 0x10<host>
63 loop txqueuelen 1000 (Local Loopback)
64 RX packets 0 bytes 0 (0.0 B)
65 RX errors 0 dropped 0 overruns 0 frame 0
66 TX packets 0 bytes 0 (0.0 B)
67 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
68
69 [root@localhost nginx]# docker exec 19df38d91d74 ping 172.18.0.2 ping另一个容器
70 PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
71 64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.109 ms
72 64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.074 ms
73 64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.076 ms
74
75 配置dns
76 我们可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
77 {
78 "dns" : [
79 "114.114.114.114",
80 "8.8.8.8"
81 ]
82 }
83 设置后,启动容器的 DNS 会自动配置为 114.114.114.114 和 8.8.8.8。
84 配置完,需要重启 docker 才能生效。
85 查看容器的 DNS 是否生效可以使用以下命令,它会输出容器的 DNS 信息:
86 cat etc/resolv.conf 查看容器的dns
87

docker仓库管理

仓库是集中存放镜像的地方 你docker pull 拉取的镜像都是从仓库里面拉取的

官方仓库( Docker Hub):https://hub.docker.com/(当然不止 docker hub,只是远程的服

务商不一样,操作都是一样的。)

目前 Docker 官方维护了一个公共仓库 Docker Hub。

大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。

登录

1 [root@localhost nginx]# docker login
2 Login with your Docker ID to push and pull images from Docker Hub. If you don't have a
Docker ID, head over to https://hub.docker.com to create one.
3 Username: 1181469655
4 Password: 
5 Login Succeeded
6
7 使用docker login来登录
8 输入命令会出现输入账号和密码的地方
9 输入完成后点回车出现Login Succeeded就是登录成功了
10

退出

1 docker logout

推送镜像

1 docker push xiaolecentos:1.0
相关文章
|
机器学习/深度学习 安全 网络协议
达梦 DM8 数据库安装详细手册(Windows+Linux+Docker)(一)
达梦 DM8 数据库安装详细手册(Windows+Linux+Docker)(一)
达梦 DM8 数据库安装详细手册(Windows+Linux+Docker)(一)
|
安全 测试技术 数据库
达梦 DM8 数据库安装详细手册(Windows+Linux+Docker)(二)
达梦 DM8 数据库安装详细手册(Windows+Linux+Docker)(二)
达梦 DM8 数据库安装详细手册(Windows+Linux+Docker)(二)
|
9月前
|
应用服务中间件 Linux nginx
docker手册 2
docker手册
|
9月前
|
Ubuntu Linux 虚拟化
docker手册 1
docker手册
|
11月前
|
存储 Java 关系型数据库
史上最详细的docker学习手册,请收藏!(三)
史上最详细的docker学习手册,请收藏!(三)
67 0
|
11月前
|
关系型数据库 MySQL 数据管理
史上最详细的docker学习手册,请收藏!(二)
史上最详细的docker学习手册,请收藏!(二)
113 0
|
11月前
|
安全 Linux 应用服务中间件
史上最详细的docker学习手册,请收藏!(一)
史上最详细的docker学习手册,请收藏!(一)
255 0
史上最详细的docker学习手册,请收藏!(一)
|
11月前
|
存储 Java 关系型数据库
史上最详细的docker学习手册,请查收!(三)
史上最详细的docker学习手册,请查收!(三)
55 0
|
11月前
|
关系型数据库 MySQL 数据管理
史上最详细的docker学习手册,请查收!(二)
史上最详细的docker学习手册,请查收!(二)
47 0
|
11月前
|
安全 Linux 应用服务中间件
史上最详细的docker学习手册,请查收!(一)
史上最详细的docker学习手册,请查收!(一)
93 0