在安装完Docker软件之后,我们当然是要去学会使用它的。在我们学习一门语言技术的时候,第一个小Demo自然就是HelloWorld。
接下来,我们开始属于Docker的HelloWorld
docker pull hello-world
分析:这一步我们是去到docker远程仓库去拉取镜像到本地仓库,如果访问不到docker远程仓库,我们可以修改一下远程仓库的地址。
这个步骤就好似Maven远程仓库访问起来容易出错,然后我们通过修改配置文件使Maven访问国内的仓库。
docker images
分析:查看本地仓库存放好的镜像,如果上一个(1)步骤执行成功了,可以发现本地仓库有hello-world镜像
运行结果:
docker run hello-world
分析:运行镜像,可以看到输出了(Hello from Docker!)然后输出的1-4指的是运行这个镜像每一步的操作。
运行结果:
接下来我们开始学习使用Docker部署并运行Nginx镜像
这里我们去网易蜂巢镜像中心寻找Nginx镜像,当我们搜索Nginx的时候出现许许多多的镜像,
我们可以注意到顶上的两个正是Nginx的镜像。标记有鲸鱼logo的正是从Docker官方仓库搬过来的Nginx镜像
我们点击进入第一个带有小鲸鱼Logo的Nginx镜像仓库,复制上其远程下载地址
然后我们回到Docker软件上进行拉取Nginx镜像
docker pull hub.c.163.com/library/nginx:latest
分析:此时Docker会根据路径去远程拉取镜像存入本地仓库
运行结果:
docker images
分析:此时我们可以看到本地仓库存放着两个镜像,一个是我们的hello-world案例拉取的镜像,还有一个正是我们刚刚拉取的nginx镜像
运行结果:
docker run -d hub.c.163.com/library/nginx
分析:docker run命令即可将镜像运行起来,为命令加上-d参数即可实现后台运行。当我们执行命令之后发现返回了一串字符串,这便是该镜像运行后返回对应的Id
运行结果:
docker ps
分析:我们可以看到红框处的字符串,对应的正是刚刚运行镜像返回的ID
运行结果:
docker exec -it b5 bash
分析:这里的b5对应的是我们镜像的ID头两位,因为我们这里运行的镜像很少,所以传递b5,Docker也知道我们找的镜像是哪个。当让我们这里哪怕穿一个b过去也是可以匹配到的。
运行结果:
docker stop b5
分析:这里的b5情况跟上面的一样,都是模糊查询匹配的。执行完命令,再查询进程时就可以发现已经关闭了
运行结果:
Bridge:类似Linux的桥接,独立网卡,在使用这个的时候就涉及到了端口映射
?端口映射:使容器内的端口可以在主机访问。当你在访问主机内的这个端口的时候也就是在访问容器内的对应端口。(比如访问主机的666端口,映射到了容器的8080端口)
Host:和主机共同使用一个,容器不会再虚拟出自己的网卡,而是使用主机的网卡
None:没有网络,不会跟外界同学
docker run -d -p 666:80 hub.c.163.com/library/nginx
分析:我们在运行Nginx镜像的时候传递-d -p参数,然后传递666:80参数。意思是我们将主机的666端口与容器(镜像)的80端口进行映射。此时我们访问主机的666端口时就是在访问容器的80端口
运行结果:
随后我们去主机上访问:localhost:666地址
结果却是找不到页面,说明我们的端口并没有映射上。
出现错误不用着急。因为我运行的环境是Window系统通过DockerToolBox运行的。DockerToolBox是运行在Oracle Virtual Machine之上。
大致原因就是:Docker的运行是需要在Linux环境上。我们当前的Docker并不是运行在Window系统上,而是Window模拟处了Linux环境后再在这个基础上运行了Docker
详细可借阅:解决无法对docker容器进行端口映射的问题
最终解决方法:
在我们运行DockerToolBox的时候,就会有显示对应的IP。
我们拿着这个IP加上刚刚配置好的映射端口即可实现访问。192.168.99.100:666
docker run -d -P hub.c.163.com/library/nginx
分析:我们只需要将传递的参数换为-P参数,便会将容器(镜像)内的端口映射到主机的随机端口上,观察下面的运行结果,可以发现容器的80端口映射到了32768端口上,如果容器有8080端口、3306端口等..也会随机映射出来。映射的结果会出现在后面。
运行结果:
原文:https://www.cnblogs.com/zcl1116/p/14729830.html