Docker初级学习指南
Docker技术探讨
跟着B站狂神学习的笔记,若有不足请多担待!!!
Docker安装
1.卸载旧版
$ sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine去查官网吧
Docker run的运行流程图
docker 底层原理
Docker是一个Client-Server结构的体系,Docker的守护进程运行在主机上。通过Socket从客户端访问!
DockerServer接收到Docker-Client的指令,就会去执行这个命令!
Docker的常用命令
帮助命令
docker version #显示docker的版本信息 docker info #显示docker的系统信息,包括镜像和容器的数量 docker 命令 --help #万能命令帮助文档的地址:https://docs.docker.com/engine/reference
镜像命令
容器命令
#有了镜像才可以创建容器
1.运行容器命令
docker run [参数] 镜像名称#参数说明 --name="名字" 指定容器名字 -d 后台方式运行容器 -it 以交互方式运行,进入容器查看内容 -p 指定容器的端口 -P 随机指定端口#-p参数详细说明 -p ip:主机端口:容器端口 #配置主机端口映射到容器端口 -p 容器端口 #指定容器端口 -p 主机端口:容器端口 #配置主机端口映射容器端口示例1:进入centos容器,以交互模式进入
docker run -it centos /bin/bash #退出容器命令 exit #停止并退出容器 快捷键 ctrl+P+Q #不停止容器退出2.退出容器命令
exit #停止并退出容器 快捷键 ctrl+P+Q #不停止容器退出3.列出运行过的容器命令
docker ps #列出当前正在运行的容器options: -a #列出所有容器的运行记录 -n=? #显示最近创建的n个容器 -q #只显示容器的编号4.容器删除命令
docker rm 容器id #删除指定的容器,不能删除正在运行的容器, docker rm -f $(docker ps -aq) #删除所有的容器 docker ps -a -q|xargs docker rm #删除所有的容器5.启动和停止容器命令
docker start 容器id #启动容器 docker restart 容器id #重启容器 docker stop 容器id #停止当前运行的容器 docker kill 容器id #强制停止当前的容器常用其他命令
1.容器日志的查看
docker logs --help #帮助信息 Options:--details Show extra details provided to logs-f, --follow Follow log output--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)-n, --tail string Number of lines to show from the end of the logs (default "all")-t, --timestamps Show timestamps--until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)常用命令
docker logs -tf 容器id #查看容器日志信息 -t #显示时间戳 -f #输出日志信息 --tail #显示num条日志 例如 docker logs -tf --tail 10 容器id #显示容器十条日志NOTE
docker容器后台运行,必须要有一个前台的进程,否则会字段停止 #编写shell脚本循环执,使得centos容器保持运行状态 docker run -d centos /bin/sh -c "while true;do echo hi;sleep 5;done"2.查看容器进程信息
docker top 容器idUID PID PPID C STIME TTY CMD3.查看容器的元数据
docker inspect 容器id4.进入当前正在运行的容器
docker exec 容器id #进入容器,新开一个终端,可以在里面操作 docker attach 容器id #进入容器正在执行的终端,不会启动新的终端例子 docker exec -it 容器id /bin/bash #新开一个终端,以交互模式进入5.拷贝容器上的文件到本地
docker cp 容器id:容器中路径 本地路径 例如 docker cp 容器id:/home/test.txt /home #将容器中的/home/test.txt文件复制到本地home目录下小结
作业练习
作业一:安装Nginx
第一步 search 镜像docker search nginx第二步 pull 下载镜像docker pull nginx第三步 查看是否下载成功docker images第三步 run 通过镜像启动容器 以后台方式运行 并将端口映射到本机3344端口docker run --name=nginx01 -d -p 3344:80 nginxDocker镜像讲解
镜像是什么
镜像(image)是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码、库、环境变量和配置文件。
所有的应用,直接打包docker镜像,就可以直接跑起来!
如何得到镜像:
- 从远程仓库下载
- 朋友拷贝给你
- 自己制作一个镜像DockerFile
Docker镜像加载原理
UnionFS(联合文件系统)
Union文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。
**特性:**一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终文件系统包含所有底层的文件和目录
commit镜像
打包自己的镜像,将镜像层与容器层打包成新的镜像(image)
命令
docker commit -m="描述信息" -a="作者" 容器id 镜像名:[TAG版本]例如 docker commit -m="message" -a="tyh" 容器id centos_01:1.0容器数据卷
什么是容器数据卷
为了解决什么问题?
如果数据都在容器中,那么容器被删除,数据也会跟着被删除! 需求:数据可以持久化
例如:MySQL容器被删除,数据库数据也会丢失!因此,希望 Mysql数据可以存储到本地!
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将容器与本地打通数据共享的通道!
一句话:容器中数据的持久化和同步操作!
使用数据卷
方法一:直接使用命令来挂载 -v
docker run -v 主机目录:容器内目录 镜像名 例如 docker run -it -v 主机目录:容器内目录 镜像名 /bin/bashdocker run -it -v /tmp/test/:/home --privileged=true centos /bin/bash查看是否挂载成功
docker inspect 容器id #查看容器元数据 "Mounts": [{"Type": "bind","Source": "/home", #主机目录 "Destination": "/home", #容器目录"Mode": "","RW": true,"Propagation": "rprivate"}],在宿主机上创建文件
Note
在centos测试时,出现 ls: cannot open directory .: Permission denied原因docker权限不够 解决办法: 加上 --privileged=true
具名和匿名挂载
匿名挂载
#匿名挂载 -v 容器内路径 docker run -d -P --name nginx01 -v /ect/nginx nginx[root@localhost test]# docker run -d -v /ect/nginx --name=nginx01 nginx 67e8dbb1b92ec3294ab5d3c3f05efc756fba5a0b00037747c5ab1420f07c8368#查看所有的volume的情况 docker volume ls [root@localhost test]# docker volume ls DRIVER VOLUME NAME local ab41b5d21a8f442ca82992c86411115265e4def480d1a60fbd1dbed57dc13653具名挂载
#具名挂载[root@localhost test]# docker run -d -v tyhdevolume:/ect/nginx --name=nginx02 nginx 39c51163b75cd352f4f4594a32a8221b2d20469e7894cb403f24c833a1ba7842#查看具名挂载信息 [root@localhost test]# docker volume inspect tyhdevolume [{"Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/tyhdevolume/_data", #宿主机内路径"Name": "tyhdevolume","Options": {},"Scope": "local"} ]所有docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data
匿名挂载具名挂载区别
#区别-v 容器内路径 #匿名挂载 -v 卷名:容器内路径 #具名挂载 -v 主机目录:容器内目录 #指定路径挂载扩展
#通过 -v 容器内路径:ro rw 改变读写权限 ro readonly #只读 rw readwrite #只写docker run -d -v tyhdevolume:/ect/nginx:ro --name=nginx02 nginx docker run -d -v tyhdevolume:/ect/nginx:rw --name=nginx02 nginx#ro 只能通过宿主机来操作,容器内部无法操作 #rw(默认) 都可以操作数据卷容器
容器之间通过挂载卷实现数据共享,数据共享方式为值拷贝。一个容器坏了不会影响其他挂载的容器中的数据
--volumes-from #例如 docker run -d -v /ect/nginx --name=nginx01 nginx docker run -d --name=nginx02 --volumes-from nginx01 nginxDockerfile
DockerFile介绍
dockerfile是用来构建docker镜像的文件!命令参数脚本
构建步骤
1.编写一个dockerfile文件
2.docker build 构建成为一个镜像
3.docker run 运行镜像
4.docker push 发布镜像
DockerFile构建过程
基础知识
DockerFile的指令
FROM #基础镜像 MAINTAINER #镜像的创建者,格式:姓名+邮箱 RUN #镜像构建的时候需要运行的命令 ADD #添加其他镜像内容 WORKDIR #镜像的工作目录 VOLUME #挂载的目录 EXPOSE #保留端口配置 CMD #指定这个容器启动的时候要运行的命令,只有最好一个会生效,可被替代 ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令 ONBUILD #当被继承时触发 COPY #将文件拷贝到镜像中 ENV #构建的时候设置环境变量实战测试
构建自己的centos
#1.编写Dockerfile [root@localhost dockertest]# cat Dockerfile FROM centos MAINTAINER tyh<2445275333@qq.com>ENV MYPATH /usr/local WORKDIR $MYPATHCMD ["touch","test.txt"] CMD ["/bin/bash"]#2.运行Dockerfile构建镜像 #命令 docker build -f dockerfile文件路径 -t 镜像名:[tag] .#note: dockerfile 默认路径为 /PATH/Dockerfiledocker build -t tyhtest02 . Sending build context to Docker daemon 2.56 kB Step 1/6 : FROM centos---> 5d0da3dc9764 Step 2/6 : MAINTAINER tyh<2445275333@qq.com>---> Using cache---> f5a30999da81 Step 3/6 : ENV MYPATH /usr/local---> Using cache---> fc250ea357bc Step 4/6 : WORKDIR $MYPATH---> Using cache---> c809311c8c4a Step 5/6 : CMD touch test.txt---> Running in b8a6cee1daea---> 3ea70282d6bf Removing intermediate container b8a6cee1daea Step 6/6 : CMD /bin/bash---> Running in 9764d157d463---> ad8ee412e639 Removing intermediate container 9764d157d463 Successfully built ad8ee412e639CMD和ENTRYPOINT的区别
https://blog.csdn.net/u010900754/article/details/78526443
发布自己的镜像
DockerHub
1.地址 https://hub.docker.com/注册自己的账号!
2.确定这个账号可以登录
3.在服务器上提交自己的镜像
[root@localhost dockertest]# docker login --helpUsage: docker login [OPTIONS] [SERVER]Log in to a Docker registryOptions:--help Print usage-p, --password string Password-u, --username string Username4.登录完毕后就可以提交镜像了,就是一步docker push
登录 #docker login -u username发布 #docker push 镜像name:[tag]例如 #docker push tyhcentos:1.0扩展 #docker tag 镜像id 别名 #给镜像起别名小结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EzuwIbrj-1647163637162)(F:\my_notebook\java_se\image\image-20220312204644430.png)]
Docker网络
理解Docker0
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5f0PwZMF-1647163637163)(F:\my_notebook\java_se\image\image-20220312210452465.png)]
容器互联–link(不建议使用)
问题:能否通过容器名直接进行网络访问
1.#搭建两个安装了ping命令的nginx服务器 [root@localhost dockertest]# docker run -d --name nginx01 nginx_with_ping:1.0 89b95b32fb596d63c18ba2bd57f7587d02308442f545597a44c5adb431fd4f0e [root@localhost dockertest]# docker run -d --name nginx02 nginx_with_ping:1.0 05002226827a6b6892561cf8583c53761b763da8a6f7392479653e3984ced22d2.#nginx02直接ping nginx01 [root@localhost dockertest]# docker exec -it nginx02 ping nginx01 ping: nginx01: Name or service not known #未能ping通3.#采用--link nginx01 搭建nginx03 [root@localhost dockertest]# docker run -d --name nginx03 --link nginx01 nginx_with_ping:1.0 fbd09b5410ba9131753ed1b72765722ebf2d2afc8aba6152d9c3567f2ca23b164.#采用nginx03直接去ping nginx01 [root@localhost dockertest]# docker exec -it nginx03 ping nginx01 PING nginx01 (172.17.0.2) 56(84) bytes of data. 64 bytes from nginx01 (172.17.0.2): icmp_seq=1 ttl=64 time=0.187 ms 64 bytes from nginx01 (172.17.0.2): icmp_seq=2 ttl=64 time=1.24 ms 64 bytes from nginx01 (172.17.0.2): icmp_seq=3 ttl=64 time=0.091 ms 64 bytes from nginx01 (172.17.0.2): icmp_seq=4 ttl=64 time=0.061 ms 64 bytes from nginx01 (172.17.0.2): icmp_seq=5 ttl=64 time=0.083 ms 64 bytes from nginx01 (172.17.0.2): icmp_seq=6 ttl=64 time=0.063 ms 64 bytes from nginx01 (172.17.0.2): icmp_seq=7 ttl=64 time=0.064 ms ^C --- nginx01 ping statistics --- 7 packets transmitted, 7 received, 0% packet loss, time 6008ms rtt min/avg/max/mdev = 0.061/0.256/1.244/0.405 ms#结果显示可以ping通#为什么呢?#查看nginx03下的/etc/hosts [root@localhost dockertest]# docker exec -it nginx03 cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 nginx01 89b95b32fb59 #将172.17.0.2 与 nginx01进行绑定 172.17.0.4 fbd09b5410ba#通过绑定域名 因此可以ping nginx01探究:docker0 中的network信息
[root@localhost dockertest]# docker network inspect bridge [{"Name": "bridge","Id": "3b16bc1d45be914edc8d8bf3afc673c25a222b64090e8b85c0a908ad27c17185","Created": "2022-03-12T16:09:54.910339931+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"}]},"Internal": false,"Attachable": false,"Containers": {"05002226827a6b6892561cf8583c53761b763da8a6f7392479653e3984ced22d": {"Name": "nginx02","EndpointID": "95a3e4700d9063021a17bbaa951622789b29ef8c186b4bb0dc5749916e73a609","MacAddress": "02:42:ac:11:00:03","IPv4Address": "172.17.0.3/16","IPv6Address": ""},"89b95b32fb596d63c18ba2bd57f7587d02308442f545597a44c5adb431fd4f0e": {"Name": "nginx01","EndpointID": "660e4ef439ef83dd985367f03124a6267b963dc961920342a9e36f94bfc312f5","MacAddress": "02:42:ac:11:00:02","IPv4Address": "172.17.0.2/16","IPv6Address": ""},"fbd09b5410ba9131753ed1b72765722ebf2d2afc8aba6152d9c3567f2ca23b16": {"Name": "nginx03","EndpointID": "cd233724f7831d52d1b388f4fd3f2a49836a68426c91cc8ebb5d674d70e028c6","MacAddress": "02:42:ac:11:00:04","IPv4Address": "172.17.0.4/16","IPv6Address": ""}},"Options": {"com.docker.network.bridge.default_bridge": "true","com.docker.network.bridge.enable_icc": "true","com.docker.network.bridge.enable_ip_masquerade": "true","com.docker.network.bridge.host_binding_ipv4": "0.0.0.0","com.docker.network.bridge.name": "docker0","com.docker.network.driver.mtu": "1500"},"Labels": {}} ]#docker0 中存放了nginx01-03 的ip信息,起到路由转发的作用 #docker0的局限性,无法通过容器名直接连通自定义网络
查看docker网络信息
#docker network ls [root@localhost dockertest]# docker network ls NETWORK ID NAME DRIVER SCOPE 3b16bc1d45be bridge bridge local 9dc950432393 host host local 3d4a887d8804 none null local网络模式
bridge:桥接docker(默认,自身搭建网络也使用bridge模式)
none:不配置网络
host:和宿主机共享网络
container:容器网络连通
创建网络
#命令 docker network creat [options] 网络名 #docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 网络名#1.搭建自己的网络 [root@localhost dockertest]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 tyhnet f3fa1bcb0dfceb65a3859044910320e81f9cebd5f8f06e6e77f921424fedb6e0#2.查看网络信息 [root@localhost dockertest]# docker network ls NETWORK ID NAME DRIVER SCOPE 3b16bc1d45be bridge bridge local 9dc950432393 host host local 3d4a887d8804 none null local f3fa1bcb0dfc tyhnet bridge local#3.查看tyhnet的元数据 [root@localhost dockertest]# docker network inspect tyhnet [{"Name": "tyhnet","Id": "f3fa1bcb0dfceb65a3859044910320e81f9cebd5f8f06e6e77f921424fedb6e0","Created": "2022-03-13T16:54:58.181885395+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.0.0/16","Gateway": "192.168.0.1"}]},"Internal": false,"Attachable": false,"Containers": {},"Options": {},"Labels": {}} ]#哈哈哈 配置成功 #4.在tyhnet中创建两个nginx服务器 [root@localhost dockertest]# docker run -d --name nginx04 --net tyhnet nginx_with_ping:1.0 8d9229f120c28e7e20cbf8c2f86e9c28085e659cc4fcfc2d22619eb54f243671 [root@localhost dockertest]# docker run -d --name nginx05 --net tyhnet nginx_with_ping:1.0 35d0cfc52ade916815ab3e4531189b075192b75e7aeb6c143ea57df35aef636d#5.查看tyhnet网络信息 [root@localhost dockertest]# docker network inspect tyhnet [{"Name": "tyhnet","Id": "f3fa1bcb0dfceb65a3859044910320e81f9cebd5f8f06e6e77f921424fedb6e0","Created": "2022-03-13T16:54:58.181885395+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.0.0/16","Gateway": "192.168.0.1"}]},"Internal": false,"Attachable": false,"Containers": {"35d0cfc52ade916815ab3e4531189b075192b75e7aeb6c143ea57df35aef636d": {"Name": "nginx05","EndpointID": "ce58f11752d8073b82b2332779dfb67dd0bb78df0cf6f24cef0b8aa849c8cb60","MacAddress": "02:42:c0:a8:00:03","IPv4Address": "192.168.0.3/16","IPv6Address": ""},"8d9229f120c28e7e20cbf8c2f86e9c28085e659cc4fcfc2d22619eb54f243671": {"Name": "nginx04","EndpointID": "cec851a91345953260469cd2787558976f3601b48476519366bba5cadbb3bbbd","MacAddress": "02:42:c0:a8:00:02","IPv4Address": "192.168.0.2/16","IPv6Address": ""}},"Options": {},"Labels": {}} ]#nginx04 和 05 成功入网#6.看看是否可以通过容器名ping通 [root@localhost dockertest]# docker exec -it nginx04 ping nginx05 PING nginx05 (192.168.0.3) 56(84) bytes of data. 64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=1 ttl=64 time=0.199 ms 64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=2 ttl=64 time=0.477 ms 64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=3 ttl=64 time=0.062 ms 64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=4 ttl=64 time=0.062 ms ^C --- nginx05 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 0.062/0.200/0.477/0.169 ms#自定义的网络可以通过容器名直接ping通结论
自定义的网络可以通过容器名直接ping通,而默认的docker0不支持
自定义的网络有助于进行容器间区域隔离
官方解释
User-defined bridges provide automatic DNS resolution between containers. Containers on the default bridge network can only access each other by IP addresses, unless you use the --link option, which is considered legacy. On a user-defined bridge network, containers can resolve each other by name or alias.大意:用户自定义的网卡可以在容器之间提供自动的 DNS 解析
网络打通
#命令 #docker network connect --help [root@localhost dockertest]# docker network connect --helpUsage: docker network connect [OPTIONS] NETWORK CONTAINERConnect a container to a networkOptions:--alias stringSlice Add network-scoped alias for the container--help Print usage--ip string IP Address--ip6 string IPv6 Address--link list Add link to another container (default [])--link-local-ip stringSlice Add a link-local address for the container实验
#1.打通tyhnet,使得连接在docker0的nginx01 能够和tyhnet下的nginx04通信 [root@localhost dockertest]# docker network connect tyhnet nginx01#2.测试双方通信 [root@localhost dockertest]# docker exec -it nginx01 ping nginx04 PING nginx04 (192.168.0.2) 56(84) bytes of data. 64 bytes from nginx04.tyhnet (192.168.0.2): icmp_seq=1 ttl=64 time=0.216 ms 64 bytes from nginx04.tyhnet (192.168.0.2): icmp_seq=2 ttl=64 time=0.086 ms 64 bytes from nginx04.tyhnet (192.168.0.2): icmp_seq=3 ttl=64 time=0.109 ms 64 bytes from nginx04.tyhnet (192.168.0.2): icmp_seq=4 ttl=64 time=0.459 ms 64 bytes from nginx04.tyhnet (192.168.0.2): icmp_seq=5 ttl=64 time=0.071 ms ^C --- nginx04 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4008ms rtt min/avg/max/mdev = 0.071/0.188/0.459/0.144 ms#nginx01可以直接和nginx04通信#3.测试nginx01和nginx05 [root@localhost dockertest]# docker exec -it nginx01 ping nginx05 PING nginx05 (192.168.0.3) 56(84) bytes of data. 64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=1 ttl=64 time=0.263 ms 64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=2 ttl=64 time=0.076 ms 64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=3 ttl=64 time=0.077 ms 64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=4 ttl=64 time=0.082 ms 64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=5 ttl=64 time=0.398 ms ^C --- nginx05 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4004ms rtt min/avg/max/mdev = 0.076/0.179/0.398/0.130 ms#nginx01可以和nginx05通信#结论 通过docker network connect命令,使得nginx01接通tyhnet,通过在nginx01上装双网卡实现 #nginx01的双网卡!!! "Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "3b16bc1d45be914edc8d8bf3afc673c25a222b64090e8b85c0a908ad27c17185","EndpointID": "660e4ef439ef83dd985367f03124a6267b963dc961920342a9e36f94bfc312f5","Gateway": "172.17.0.1","IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:02"},"tyhnet": {"IPAMConfig": {},"Links": null,"Aliases": ["89b95b32fb59"],"NetworkID": "f3fa1bcb0dfceb65a3859044910320e81f9cebd5f8f06e6e77f921424fedb6e0","EndpointID": "69d2721974ee2a8985d6ca5d365d8b5a58c5dccb3d7840c63d49248ea106f69b","Gateway": "192.168.0.1","IPAddress": "192.168.0.4","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:c0:a8:00:04"}##Docker学习任重道远##
总结
以上是生活随笔为你收集整理的Docker初级学习指南的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 2021年前端面试题及答案
- 下一篇: QGraphicsItem设置绘图区域和