关于Docker
版本
Docker版本
Docker Community Edition(CE)-社区版
Docker Enterprise Edition(EE)-企业版
Docker Engine版本
Docker Engine Enterprise
Docker Engine Community。
平台支持
桌面版
平台 | x86_64 |
---|---|
Docker Desktop for Mac (macOS) | 是 |
Docker Desktop for Windows (Microsoft Windows 10) | 是 |
服务器版
Platform | x86_64 / amd64 | ARM | ARM64 / AARCH64 | IBM Power (ppc64le) | IBM Z (s390x) |
---|---|---|---|---|---|
CentOS | ✅ | ✅ | |||
Debian | ✅ | ✅ | ✅ | ||
Fedora | ✅ | ✅ | |||
Ubuntu | ✅ | ✅ | ✅ | ✅ | ✅ |
Docker Toolbox
docker在linux下直接安装Docker Engine即可。但是在Windows、MacOS下需要用Docker Toolbox提供的Docker Machine创建虚拟机(boot2docker)。
为Windows和MacOS提供的docker安装器,包含以下工具:
- Docker Machine,提供docker-machine命令
- Docker Engine,提供docker命令
- Docker Compose,提供docker-compose命令
- Kitematic,Docker GUI
- Shell,提供Docker命令行环境的
- Oracle VirtualBox
Kitematic提供图形界面,方便容器的管理,使用教程
问题汇总
容器时区设置
在使用Docker Toolbox时,用docker-machine创建的boot2docker虚拟机时区为UTC,导致其中运行的容器时区与本地时区也不一致。
解决方案如下:
docker-compose模式
environment:
- TZ=Asia/Shanghai
docker run模式
docker run -e "TZ=Asia/Shanghai"
容器网络设置
容器默认是动态IP,有时我们需要静态IP。
docker-compose模式
指定子网网关、网段,及容器静态IP。下例会自动创建名称为
docker-hadoop_net
的网络。
version: "2"
services:
namenode:
image: mysql
container_name: mymysql
environment:
- TZ=Asia/Shanghai
networks:
net:
ipv4_address: 172.18.100.101
networks:
net:
ipam:
config:
- subnet: 172.18.100.0/24
gateway: 172.18.100.1
docker run模式
docker run -e TZ="Asia/Shanghai" --privileged -itd -h hadoop01.com --name hadoop01 --network=mynet --ip 172.18.12.1 centos /usr/sbin/init
主机直连容器
MacOS
在Docker Desktop for Mac、Docker Machine环境中均不能ping通容器。按照网上的方法添加route,将容器ip路由到docker machine,没有响应。
虚拟机(CentOS)
<font color='red'>!!!虚拟机添加Host-Only网卡,并将混杂模式设置为全部允许。</font>
1、安装VirtualBox,添加CentOS7虚拟机,安装Docker CE。
2、配置虚拟机网络,与宿主机互通。
3、管理-主机网络管理器,添加虚拟网卡vboxnet0
vboxnet0在宿主机添加虚拟网卡,为虚拟机分配IP,宿主机与虚拟机在同一网段。
4、VirtualBox-偏好设置-网络
NatNetwork为VirtualBox中安装的虚拟机分配IP,与宿主机隔离。
5、配置虚拟机网卡1(NAT网络)
6、配置虚拟机网卡2(仅主机网络)
<font color='red'>!!!混杂模式设置为全部允许</font>
7、宿主机添加路由表
在虚拟机中查看docker容器IP,步骤如下:
# 查看network
~ docker network ls
NETWORK ID NAME DRIVER SCOPE
8c4e3d387a7a bridge bridge local
# 查看network网段和容器ip
~ docker inspect 8c4e3d387a7a
[
{
"Name": "bridge",
"Id": "8c4e3d387a7a5c",
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Containers": {
"46cba393befd1f6": {
"Name": "registry",
"EndpointID": "3530fa3f129c7b6",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
}
}
]
# 例如:network网段为172.17.0.0/16,虚拟机IP为192.168.56.102
~ route -n add 172.17.0.0/16 192.168.56.102
8、至此大功告成
看,ping成功了
~ ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: icmp_seq=0 ttl=63 time=0.365 ms
64 bytes from 172.17.0.2: icmp_seq=1 ttl=63 time=0.428 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=63 time=0.392 ms