kernel namespaces
内核名称空间
namespace | 系统调用参数 | 隔离内容 | 内核版本 |
---|---|---|---|
UTS | CLONE_NEWUTS | 主机名和域名 | 2.6.19 |
IPC | CLONE_NEWIPC | 信号量、消息队列和共享内存 | 2.6.19 |
PID | CLONE_NEWPID | 进程编号 | 2.6.24 |
Network | CLONE_NEWNET | 网络设备、网络栈、端口等 | 2.6.29 |
Mount | CLONE_NEWNS | 挂载点(文件系统) | 2.4.19 |
User | CLONE_NEWUSER | 用户和用户组 | 3.8 |
CGoups
控制组,用于计算资源的隔离
Kernel Gapabilities
内核功能,能力。
LXC
, 镜像,没有解决容器的迁移和分发等问题,后来被Docker替代
Docker
通过引入Image镜像,帮助简化容器,推动了容器的发展
Registry
#docker的仓库服务器,docker的注册表服务,托管运行镜像仓库的服务器。同时为仓库镜像提供对应的索引,和认证用户实现对应存储功能和用户名称空间分派的功能。Docker Daemon
#docker的运行时环境,即docker镜像Docker Client
#docker的客户端依赖的基础环境
CentOS 7
docker程序环境:
1.环境配置文件:
* /etc/sysconfig/docker-network
* /etc/sysconfig/docker-storage
* /etc/sysconfig/docker
2. Unit File:
* /usr/lib/systemd/system/docker.service
3. Docker Registry配置文件:
* /etc/containers/registries.conf
4. docker-ce配置文件:
* /etc/docker/daemon.json
* daemon.json中所有可用参数:https://docs.docker.com/engine/reference/commandline/dockerd/
配置docker的yum源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
安装docker yum install docker-ce
rpm -ql docker-ce
看安装情况docker镜像加速器(可以在https://cr.console.aliyun.com/中找到自己的镜像加速)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://4mii0wlb.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
修改vim /usr/lib/systemd/system/docker.service
文件
docker search:
搜索镜像Search the Docker Hub for images
docker pull
下载镜像Pull an image or a repository from a registrydocker images
查看镜像List imagesdocker create
创建容器Create a new containerdocker start
启动容器Start one or more stopped containersdocker run
在容器中运行命令Run a command in a new containerdocker attach
Attach to a running containerdocker ps
查看正在运行的容器List containers
docker ps -a
#查看所有容器docker ps 等价于docker container ls
docker logs
查看容器日志Fetch the logs of a containerdocker restart
重启一个容器Restart a containerdocker stop
停止容器Stop one or more running containersdocker kill
杀死正在运行的容器Kill one or more running containersdocker rm
删除容器Remove one or more containersdocker port CONTAINER [PRIVATE_PORT[/PROTO]]
#查看指定容器上的映射端口
docker port web1
#查看web1容器上的映射端口docker version
#查看docker的版本信息,(可以看到客户端程序版本,和服务端程序版本)
docker info
#查看docker的详细信息
[root@gdy docker]# docker info
Client:
Debug Mode: false
Server:
Containers: 0 #当前容器数量
Running: 0 #运行状态的容器数量
Paused: 0 #暂停状态的容器数量
Stopped: 0 #停止状态的容器数量
Images: 0 #当前主机上有多少个镜像
Server Version: 19.03.1 #服务器端版本
Storage Driver: overlay2 #存储后端驱动
Backing Filesystem: xfs #在overlay2上建构的本地文件系统是xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file #日志驱动
Cgroup Driver: cgroupfs #控制组的驱动
Plugins: #其他插件
Volume: local #存储卷,支持本地
Network: bridge host ipvlan macvlan null overlay #网络,支持桥接(bridge host),overlay(叠加网络) 等
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog #日志
Swarm: inactive #支持Swarm,docker内部的容器编排,容器集群工具
Runtimes: runc #运行时环境runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-957.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 1.777GiB
Name: gdy.gdy
ID: LQG7:RAZT:CIRG:XDUP:WVIY:DZY2:PTMM:G7GG:BZF2:6OLB:EBLT:JYNW
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries: #非安全的仓库
127.0.0.0/8
Registry Mirrors: #配置的容器加速,
https://qx4pe1od.mirror.aliyuncs.com/
Live Restore Enabled: false
[root@gdy docker]#
docker --help
#查看docker帮助,客户端命令
Management Commands:
系列的命令可以单独查看帮助
Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers #管理容器的命令
context Manage contexts
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volume
docker container --help
#查看docker管理容器的命令
docker container ls
#查看正在运行的容器
docker ps
docker -H 192.168.61.109:8888 ps
#查看指定服务器下的容器信息docker container ls -a
#详细查看容器信息
docker ps -a
docker container start xdd
#启动xdd容器docker container attach xdd
#开启容器为xdd的终端
docker container run --help
#查看run 系列命令帮助
-t
开启一个终端-i -t
进入交互式接口-d
后台运行容器--name
指定容器名
docker container run --name xdd -it alpine:3.8
#开启一个alpine3.8镜像,并同时启动交互式界面,为新启动的这个镜像命名为xdddocker run --name xddbox -it busybox:latest
#开启一个busybox中标签为latest(即:最新版)的镜像,并同时开启交互式界面,将新启动的这个镜像命名为xddboxdocker run --name web1 -d nginx:1.14-alpine
#开启一个nginx:1.14镜像,-d
表示在后台运行容器,将这个新启动的镜像命令为web1docker run --name kvstor1 -d redis:4-alpine
#后台启动一个容器,运行redis,tag标签为4-alpine,并将这个新启动的容器名为:kvstor1--rm
停止后自动删除容器
docker run --name t1 -it --rm busybox:latest
#创建容器,关闭后容器会被自动删除--network
#为创建的容器指定网络,如果不指定,默认为桥接模式bridge
docker run --name t1 -it --network bridge --rm busybox:latest
docker run --name b2 -it --network container:b1 --rm busybox
#新运行的容器b2和b1共享同一网络同一iPdocker run --name b2 -it --network host --rm busybox
#新运行的容器b2和宿主机共享同一网络和ip-h --hostname
#为容器创建的容器指定主机名,如果不指定,默认为容器id
docker run --name t1 -it --network bridge -h t1.xdd.com --rm busybox:latest
#同上面例子,指定了主机名为t1.xdd.com--dns
#为创建的容器指定dns服务器地址
docker run --name t1 -it --network bridge -h t1.xdd.com --dns 114.114.114.114 --rm busybox:latest
#指定创建的容器dns为114.114.114.114--dns-search
指定搜索域
docker run --name t1 -it --network bridge -h t1.xdd.com --dns 114.114.114.114 --dns-search ilinux.io --rm busybox:latest
#指定创建的容器dns-search搜索域为:ilinux.io--add-host
添加指定的容器本地主机名解析
docker run --name t1 -it --network bridge -h t1.xdd.com --dns 114.114.114.114 --dns-search ilinux.io --add-host www.xdd.com:1.1.1.1 --rm busybox:latest
#为新创建的主机添加www.xdd.com域名指定到1.1.1.1主机上-p,--publish-all
选项的使用格式(注意-p选项可以多次使用)
-p
#将指定的容器端口映射至主机所有地址的一个动态端口-p :
#将容器端口
映射到指定的主机端口
-p ::
#将指定的容器端口
映射至主机指定
的动态端口-p ::
#将指定的容器端口
映射至主机指定的
的端口
--volumes-from
复制使用其他容器的卷
docker run -it --name bbox2 --volumes-from bbox1 busybox
#新启动的bbox2容器,复制使用bbox1中的卷配置地址。即bbox1和bbox2共享同一个卷的配置-e,--env
设定环境变量值--entrypoint string
覆盖镜像文件中使用entrypoint关键定义的命令docker container port CONTAINER [PRIVATE_PORT[/PROTO]]
等价于docker port ...
#查看指定容器上的端口映射
docker port web1
#查看web1上的端口映射docker container inspect name
#查看指定容器的详细信息
-f 解析式
#使用json解析式查找指定属性值
docker container inspect -f {{.Mounts}} bbox1
#查找bbox1容器信息信息中的Mounts属性值docker image --help
#查看docker管理镜像的命令
pull
#手动下载镜像
docker image pull nginx:1.14-alpine
下载nginx镜像docker pull busybox
下载busybox
rm
删除镜像
docker image rm xdd/httpd:latest
删除标记为“xdd/httpd:latest”的标记ls
列出镜像
docker image ls --digests
显示镜像的完整信息docker image ls --no-trunc
不按照缩略的方式输出inspect
查看镜像的详细信息
docker image inspect alpine:3.8
#查看alpine中Tag为3.8的镜像详细信息
tag
管理镜像标签
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
#根据镜像指定标签
docker tag 7e0338fff785 xdd/httpd:v0.1-1
#将“7e0338fff785”为ID的镜像指定厂库为xdd下的httpd,标签为v0.1-1docker tag xdd/httpd:v0.1-1 xdd/httpd:latest
#将标记为“xdd/httpd:v0.1-1”的镜像再创建一个标记为“xdd/httpd:latest”push
推送一个镜像docker search alpine
#查看alpine下的docker版本 https://hub.docker.com/_/alpine?tab=tags
docker image pull alpine
下载apline,默认从alpine:laest中下载
docker network --help
#网络相关命令
ls
#显示本地可用网络
docker network ls
#显示本地可用网络create [OPTIONS] NETWORK
#创建网络
-d,--driver string
#指定网络类型,可选[bridge(桥接) host ipvlan macvlan null overlay],如果不指定,默认为bridge--subnet
#指定网络的子网络--gateway
#指定默认网关,如不指定,默认为子网络的第一个地址
docker network create -d bridge --subnet "172.26.0.0/16" --gateway "172.26.0.1" mybr0
#创建一个mybr0的网络,网络模式为bridge桥接模式,子网络为172.26.0.0/16
,网关为172.26.0.1
ip link set dev br-05c9d6fcc73b name docker1
#修改网络名称为docker1inspect [OPTIONS] NETWORK [NETWORK...]
#查看网络详细信息
docker network inspect none
#查看none网络详细信息rm
#删除一个网络docker build --help
根据dockerfile文件制作镜像
docker build [OPTIONS] PATH | URL | -
PATH
:指定dockerfile文件所在的父目录URL
:指定网络中的dockerfile的文件目录-t
指定生成镜像的名称和tag
docker build -t tinyhttpd:v0.1-1 ./
更具当前目录下的dockerfiel文件制作镜像tinyhttpd:v0.1-1
docker exec --help
查看在容器中执行命令的帮助
docker exec -it kvstor1 /bin/sh
#在kvstor1容器中运行/bin/sh程序,并开启一个交互式界面Docker镜像含有 启动容器所需要的文件系统及其内容,因此,其用于创建并启动docker容器
Docker Image Layer(docker的镜像层级)
advanced multi-layered unification filesystem
:高级多层统一文件系统docker pull quay.io/coreos/flannel:v0.10.0-amd64
#获取flannel仓库中的镜像,Tag标签为v0.10.0-amd64docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-p
创建镜像时,使镜像暂停-c
修改镜像的Dockerfill指令,可以修改cmd命令等-a
指定镜像的制作作者docker commit -p xddbox2
#根据正在运行的xddbox2镜像,创建一新的镜像,创建时,不许xddbox2在做任何操作。docker commit -a "xdd " -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p xddbox2 xdd/httpd:v0.2
根据xddbox2镜像制作新的镜像,修改了CMD命令,为["/bin/httpd","-f","-h","/data/html"]
注意必须是双引号#根据正在运行的xddbox2镜像创建一个镜像
[root@gdy ~]# docker commit -p xddbox2
sha256:7e0338fff785b7ac85bf8590417eca56f5e61af046ebcfa2614723d3a001791b
#查看镜像
[root@gdy ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
7e0338fff785 6 seconds ago 1.22MB
redis 4-alpine 442c73e7ad1d 3 days ago 20.4MB
alpine latest 961769676411 3 days ago 5.58MB
busybox latest db8ee88ad75f 5 weeks ago 1.22MB
nginx 1.14-alpine 8a2fb25a19f5 4 months ago 16MB
alpine 3.8 dac705114996 5 months ago 4.41MB
# 将7e0338fff785镜像大一个仓库为xdd/httpd 标记为v0.1-1.
[root@gdy ~]# docker tag 7e0338fff785 xdd/httpd:v0.1-1
[root@gdy ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
xdd/httpd v0.1-1 7e0338fff785 2 minutes ago 1.22MB
redis 4-alpine 442c73e7ad1d 3 days ago 20.4MB
alpine latest 961769676411 3 days ago 5.58MB
busybox latest db8ee88ad75f 5 weeks ago 1.22MB
nginx 1.14-alpine 8a2fb25a19f5 4 months ago 16MB
alpine 3.8 dac705114996 5 months ago 4.41MB
# 根据xdd/httpd:v0.1-1再添加一个标记Tag为 xdd/httpd:latest
[root@gdy ~]# docker tag xdd/httpd:v0.1-1 xdd/httpd:latest
[root@gdy ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
xdd/httpd latest 7e0338fff785 12 minutes ago 1.22MB
xdd/httpd v0.1-1 7e0338fff785 12 minutes ago 1.22MB
redis 4-alpine 442c73e7ad1d 3 days ago 20.4MB
alpine latest 961769676411 3 days ago 5.58MB
busybox latest db8ee88ad75f 5 weeks ago 1.22MB
nginx 1.14-alpine 8a2fb25a19f5 4 months ago 16MB
alpine 3.8 dac705114996 5 months ago 4.41MB
#删除标记为xdd/httpd:latest的标记,不会删除镜像
[root@gdy ~]# docker image rm xdd/httpd:latest
Untagged: xdd/httpd:latest
[root@gdy ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
xdd/httpd v0.1-1 7e0338fff785 14 minutes ago 1.22MB
redis 4-alpine 442c73e7ad1d 3 days ago 20.4MB
alpine latest 961769676411 3 days ago 5.58MB
busybox latest db8ee88ad75f 5 weeks ago 1.22MB
nginx 1.14-alpine 8a2fb25a19f5 4 months ago 16MB
alpine 3.8 dac705114996 5 months ago 4.41MB
#重新在添加个标记
[root@gdy ~]# docker tag xdd/httpd:v0.1-1 xdd/httpd:latest
[root@gdy ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
xdd/httpd latest 7e0338fff785 14 minutes ago 1.22MB
xdd/httpd v0.1-1 7e0338fff785 14 minutes ago 1.22MB
redis 4-alpine 442c73e7ad1d 3 days ago 20.4MB
alpine latest 961769676411 3 days ago 5.58MB
busybox latest db8ee88ad75f 5 weeks ago 1.22MB
nginx 1.14-alpine 8a2fb25a19f5 4 months ago 16MB
alpine 3.8 dac705114996 5 months ago 4.41MB
[root@gdy ~]#
docker login -u 1263351411
输入用户名和密码,会显示连接成功docker commit -a "xdd " -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p xddbox2 1263351411/xdd:latest
docker push 1263351411/xdd
[root@gdy ~]# docker login -u 1263351411
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@gdy ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
xdd/httpd v0.2 40e4281a313c 14 minutes ago 1.23MB
xdd/httpd latest 7e0338fff785 About an hour ago 1.22MB
xdd/httpd v0.1-1 7e0338fff785 About an hour ago 1.22MB
redis 4-alpine 442c73e7ad1d 3 days ago 20.4MB
alpine latest 961769676411 3 days ago 5.58MB
busybox latest db8ee88ad75f 5 weeks ago 1.22MB
nginx 1.14-alpine 8a2fb25a19f5 4 months ago 16MB
alpine 3.8 dac705114996 5 months ago 4.41MB
[root@gdy ~]# docker commit -a "xdd " -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p xddbox2 1263351411/xdd:latest
sha256:8faf31d9f5aa6c9078a19df9f71ef03480f94472a799187257d30074a0913f8e
[root@gdy ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
1263351411/xdd latest 8faf31d9f5aa 4 seconds ago 1.23MB
xdd/httpd v0.2 40e4281a313c 15 minutes ago 1.23MB
xdd/httpd latest 7e0338fff785 About an hour ago 1.22MB
xdd/httpd v0.1-1 7e0338fff785 About an hour ago 1.22MB
redis 4-alpine 442c73e7ad1d 3 days ago 20.4MB
alpine latest 961769676411 3 days ago 5.58MB
busybox latest db8ee88ad75f 5 weeks ago 1.22MB
nginx 1.14-alpine 8a2fb25a19f5 4 months ago 16MB
alpine 3.8 dac705114996 5 months ago 4.41MB
[root@gdy ~]# docker push 1263351411/xdd
The push refers to repository [docker.io/1263351411/xdd]
f185c6337d6a: Pushed
0d315111b484: Mounted from library/busybox
latest: digest: sha256:9d3fdb0a087e4c45d16734fa8c6d180d9d7e0171d70c55c3759b7c24336ec6c1 size: 734
[root@gdy ~]#
docker save [OPTIONS] IMAGE [IMAGE...]
--output
,-o:写入文件docker save -o xdd.gz xdd/httpd:v0.2 xdd/httpd:latest
将“xdd/httpd:v0.2 xdd/httpd:latest”这两个镜像打包保存为xdd.gz
scp xdd.gz 192.168.61.108:/root/
#将xdd.gz推送到108主机上的/root/目录下docker load [OPTIONS]
--input,-i
从tar中读取文件而不是从stdin中读取--quiet,-q
抑制负载输出docker load -i xdd.gz
在新的主机上可以使用load命令将打包好的文件加载docker network ls
查看docker支持的网络
bridge
#桥接网络,默认为docker容器的默认网络host
#宿主机网络模型none
#不指定网络,即相当于没有网卡docker一共有四种网络模型
使用ip命令模拟名称空间之间的通信
ip netns add r2
#为宿主机添加一个网络名称空间为r2ip netns add r1
#为宿主机添加一个网络名称空间为r1
ip netns list
*#查看宿主机的所有网络名称空间ip netns exec r1 ifconfig
#查看名称空间为r1的网络(如果没有可用网络,即没有显示)ip netns exec r1 ifconfig -a
#查看名称空间为r1的网络详细信息ip link add name veth1.1 type veth peer name veth1.2
#创建一组虚拟网卡对veth1.1和veth1.2
ip link show
#可用查看虚拟网卡。ip link set dev veth1.1 netns r1
#将虚拟网卡veth1.1移动到网络名称空间r1中
ip netns exec r1 ifconfig -a
可用看到已经移动过来的veth1.1网卡,但是没有激活ip netns exec r1 ip link set dev veth1.2 name eth0
#将网络名称r1中的虚拟网卡veth1.2的名称修改为eth0ifconfig veth1.1 10.1.0.2/24 up
激活虚拟网卡veth1.1,ip为10.1.0.2/24ip netns exec r1 ifconfig eth0 10.1.0.2/24 up
#激活r1中的虚拟网卡eth0 ip为:10.1.0.2/24
ip netns exec r1 ifconfig
#此时key看到激活后的虚拟网络eth0,已经激活ping 10.1.0.2
#在宿主机上直接ping,可以看到链接成功ip link set dev veth1.2 netns r2
#将虚拟网卡veth1.2移动到网络名称空间r2中ip netns exec r2 ifconfig veth1.2 10.1.0.3/24 up
#激活r2中的虚拟网卡veth1.2 ip为 10.1.0.3/24ip netns exec r2 ping 10.1.0.2
使用r2名称空间访问r1名称空间的ip地址,可以链接。--rm
停止后自动删除容器
docker run --name t1 -it --rm busybox:latest
#创建容器,关闭后容器会被自动删除--network
#为创建的容器指定网络,如果不指定,默认为桥接模式bridge
docker run --name t1 -it --network bridge --rm busybox:latest
-h --hostname
#为容器创建的容器指定主机名,如果不指定,默认为容器id
docker run --name t1 -it --network bridge -h t1.xdd.com --rm busybox:latest
#同上面例子,指定了主机名为t1.xdd.com--dns
#为创建的容器指定dns服务器地址
docker run --name t1 -it --network bridge -h t1.xdd.com --dns 114.114.114.114 --rm busybox:latest
#指定创建的容器dns为114.114.114.114--dns-search
指定搜索域
docker run --name t1 -it --network bridge -h t1.xdd.com --dns 114.114.114.114 --dns-search ilinux.io --rm busybox:latest
#指定创建的容器dns-search搜索域为:ilinux.io--add-host
添加指定的容器本地主机名解析
docker run --name t1 -it --network bridge -h t1.xdd.com --dns 114.114.114.114 --dns-search ilinux.io --add-host www.xdd.com:1.1.1.1 --rm busybox:latest
#为新创建的主机添加www.xdd.com域名指定到1.1.1.1主机上-p,--publish-all
选项的使用格式-p
#将指定的容器端口映射至主机所有地址的一个动态端口-p :
#将容器端口
映射到指定的主机端口
-p ::
#将指定的容器端口
映射至主机指定
的动态端口-p ::
#将指定的容器端口
映射至主机指定的
的端口
closed container私有网络
docker run --name t1 -it --network none --rm busybox:latest
#根据busybox:latest镜像创建一个容器,容器名为t1,容器停止后自动删除,容器使用的网络模型为none,即仅主机模式。Bridged container桥接模式
-A PREROUTING -d 主机IP -j DNAT --to-destination容器IP
-A PREROUTING -d 主机IP -p {tcp|udp} --dport主机端口 -j DNAT --to-destination容器IP:容器端口
docker run --name web1 --network bridge -p 80 --rm xdd/httpd:v0.2
启动xdd/httpd:v0.2镜像,将启动后的容器暴露内部80端口随机映射到宿主机上的一个端口。(注意:这里xdd/httpd:v0.2默认会启动一个httpd的web服务在80端口上,上面文档有说明配置方法)
docker run --name web1 --network bridge -p 192.168.61.109::80 --rm xdd/httpd:v0.2
同上,在宿主机的端口映射为:192.168.61.108:随机post <-- web1容器80端口
docker run --name web1 --network bridge -p 80:80 --rm xdd/httpd:v0.2
同上,端口映射为:web1容器80 --> 0.0.0.0:80
docker run --name web1 --network bridge -p 192.168.61.109:80:80 --rm xdd/httpd:v0.2
同上,端口映射为:web1容器80 --> 192.168.61.109:80
Joined container联盟式容器网络
docker run -d -it --rm -p 2222 busybox:latest /bin/httpd -p 2222 -f
docker run -it --rm --net container:web --name joincd busybox:latest netstat -tan
docker run --name b1 -it --rm busybox
#正常先启动一个容器,默认会分配一个ip为桥接模式
mkdir /tmp/dir
创建目录echo "hello word" >/tmp/index.html
#在tmp目录下创建index.html文件httpd -h /tmp/
#启动httpd服务器,root目录为/tmp目录下docker run --name b2 -it --network container:b1 --rm busybox
#启动第二个容器,指定和b1共享同一个网络。ls /tmp/
可以看到谁然共享网络,单不会共享文件目录wget -O - -q 127.0.0.1
#可以看到能获取到80端口的web服务器文件内容“Hello word”Open container(共享主机网络)
docker run --name b2 -it --network host --rm busybox
#新运行的容器b2和宿主机共享同一网络和ip自定义docker0桥的网络属性信息:/etc/docker/daemon.json
文件
{
"bip": "192.168.1.5/24", //docker0桥接网络ip和子掩码
"fixed-cidr": "10.20.0.0/16",
"fixed-cidr-v6": "2001:db8::/64",
"mtu": 1500,
"default-gateway": "10.20.1.1", //每个容器启动时,获得的默认网关
"default-gateway-v6": "2001:db8:abcd::89", //每个容器启动时,获得的ipv6网关
"dns": ["10.20.1.2","10.20.1.3"], //每个容器启动后自动拥有响应的服务器dns地址
"hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"] //docker客户端连接的docker服务器地址,默认为docker.sock表示连接本机。
}
dockerd守护进程的C/S,其默认仅监听Unix SOcket格式的地址/var/run/docker.sock
;如果使用TCP套接字,需要修改/etc/docker/daemon.json文件中的"hosts"属性
hosts: ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]
#注意:ip端口可以自己定义
[root@gdy ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://qx4pe1od.mirror.aliyuncs.com"],
"bip": "10.10.0.1/16",
"hosts": ["tcp://192.168.61.108:8888","unix:///var/run/docker.sock"]
}
[root@gdy ~]# systemctl stop docker
[root@gdy ~]# systemctl restart docker
[root@gdy ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:25672 *:*
LISTEN 0 50 *:3306 *:*
LISTEN 0 128 *:111 *:*
LISTEN 0 128 *:4369 *:*
LISTEN 0 5 192.168.122.1:53 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 127.0.0.1:631 *:*
LISTEN 0 128 192.168.61.108:8888 *:*
LISTEN 0 128 *:15672 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 127.0.0.1:6010 *:*
LISTEN 0 128 :::5672 :::*
LISTEN 0 128 :::111 :::*
LISTEN 0 128 :::3888 :::*
LISTEN 0 128 :::4369 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 128 ::1:631 :::*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 128 ::1:6010 :::*
[root@gdy ~]#
创建网络
docker run -it --name bbox1 -v /data busybox
#根据busybox创建一个容器,并挂载一个卷在容器中的/data
目录下
docker run -it --name bbox1 -v /data busybox
#会在宿主机下/var/lib/docker/volumes/自动生成的id/_data
目录下绑定容器的/data
目录docker inspect -f {{.Mounts}} bbox1
#查看bbox1容器的卷、卷标识符及挂载的主机目录docker run -it -v HOSTDIR:VOLUMEDIR --name bbox2 busybox
#根据busybox镜像创建一个容器,将宿主机上的“HOSTDIR”目录挂载到容器中的“VOLUMEDIR”目录
docker run -it --name bbox1 -v /data/volumes/b2:/data --rm busybox
#指定宿主机/data/volumes/b2
目录绑定容器的/data
目录,注意:如果目录不存在会自动创建。docker inspect -f {{.Mounts}} bbox2
#查看bbox2容器的卷、标识符及挂载的主机目录。docker run -it --name c1 -v /docker/volumes/v1:/data busybox
docker run -it --name c2 -v /docker/volumes/v1:/data busybox
docker run
命令使用--volumes-from
选项
docker run -it --name bbox1 -v /docker/volumes/v1:/data busybox
docker run -it --name bbox2 --volumes-from bbox1 busybox