Docker快速入门
前言:
在安装完Docker软件之后,我们当然是要去学会使用它的。在我们学习一门语言技术的时候,第一个小Demo自然就是HelloWorld。
接下来,我们开始属于Docker的HelloWorld
HelloWorld小案例:
(1)拉取镜像(hello-world)
docker pull hello-world
分析:这一步我们是去到docker远程仓库去拉取镜像到本地仓库,如果访问不到docker远程仓库,我们可以修改一下远程仓库的地址。
这个步骤就好似Maven远程仓库访问起来容易出错,然后我们通过修改配置文件使Maven访问国内的仓库。
(2)查看本地仓库
docker images
分析:查看本地仓库存放好的镜像,如果上一个(1)步骤执行成功了,可以发现本地仓库有hello-world镜像
运行结果:
(3)运行hello-world镜像
docker run hello-world
分析:运行镜像,可以看到输出了(Hello from Docker!)然后输出的1-4指的是运行这个镜像每一步的操作。
运行结果:
Nginx镜像案例:
接下来我们开始学习使用Docker部署并运行Nginx镜像
(1)拉取Nginx镜像
这里我们去网易蜂巢镜像中心寻找Nginx镜像,当我们搜索Nginx的时候出现许许多多的镜像,
我们可以注意到顶上的两个正是Nginx的镜像。标记有鲸鱼logo的正是从Docker官方仓库搬过来的Nginx镜像
我们点击进入第一个带有小鲸鱼Logo的Nginx镜像仓库,复制上其远程下载地址
然后我们回到Docker软件上进行拉取Nginx镜像
docker pull hub.c.163.com/library/nginx:latest
分析:此时Docker会根据路径去远程拉取镜像存入本地仓库
运行结果:
(2)查看本地仓库
docker images
分析:此时我们可以看到本地仓库存放着两个镜像,一个是我们的hello-world案例拉取的镜像,还有一个正是我们刚刚拉取的nginx镜像
运行结果:
(3)运行Nginx镜像
docker run -d hub.c.163.com/library/nginx
分析:docker run命令即可将镜像运行起来,为命令加上-d参数即可实现后台运行。当我们执行命令之后发现返回了一串字符串,这便是该镜像运行后返回对应的Id
运行结果:
(4)查看当前执行的进程
docker ps
分析:我们可以看到红框处的字符串,对应的正是刚刚运行镜像返回的ID
运行结果:
(5)进入操作镜像
docker exec -it b5 bash
分析:这里的b5对应的是我们镜像的ID头两位,因为我们这里运行的镜像很少,所以传递b5,Docker也知道我们找的镜像是哪个。当让我们这里哪怕穿一个b过去也是可以匹配到的。
运行结果:
(6)停止镜像进程
docker stop b5
分析:这里的b5情况跟上面的一样,都是模糊查询匹配的。执行完命令,再查询进程时就可以发现已经关闭了
运行结果:
Docker网络:
网络类型:
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
上面的案例是1对1的端口映射,还有一种映射方式为所有端口随机映射
docker run -d -P hub.c.163.com/library/nginx
分析:我们只需要将传递的参数换为-P参数,便会将容器(镜像)内的端口映射到主机的随机端口上,观察下面的运行结果,可以发现容器的80端口映射到了32768端口上,如果容器有8080端口、3306端口等..也会随机映射出来。映射的结果会出现在后面。
运行结果:
制作自己的镜像
首先切换到自己的工作空间(这里我是Window系统下的,工作空间切换到C:\Program Files\Docker Toolbox\demo)
1.首先从远端仓库拉取Tomcat镜像
docker pull hub.c.163.com/library/tomcat:latest
2.创建并编辑Dockerfile文件
from:后面跟着的是刚刚从远端仓库拉取的Tomcat镜像。用其作为基础。方便后面部署我们的java WEB项目,
由于tomcat依赖了jdk,所以Tomcat仓库(镜像)内部也是有jdk的,这里就不需要我们去部署jdk了
MAINTAINER:后面跟着的是作者信息
COPY:后面跟着的是我们的web项目的war包(这里的war包是我们从网上下载下来的一个开源web项目,地址:Jpress地址),下载下来后该包就放在与Dockerfile文件同一级中,
随后跟着的/usr/local/tomcat/webapps是tomcat的部署路径。(tomcat的使用可以在镜像中心看教程)
vi Dockerfile
from hub.c.163.com/library/tomcat
MAINTAINER kerry kerry.com
COPY jpress.war /usr/local/tomcat/webapps
随后我们:wq保存退出。
3.编译镜像
docker build -t jpress:latest .
分析:我们这里通过docker build . 命令对镜像进行编译。参数-t 后面添加的jpress和latest 对应的镜像的Repository(仓库名)和Tag(标签名)
运行结果:
4.查看镜像
docker images
分析:此时我们就可以发现刚刚创建的镜像已经出现在了本地仓库。
运行结果:
运行自己的镜像
1.运行镜像
docker run -d -p 8888:8080 jpress
分析:我们将刚刚配置好的web项目镜像运行起来,并为其指定好了端口映射
运行结果:
2.配置Mysql数据库
在运行好镜像后我们访问http://192.168.99.100:8888/jpress 发现该web项目需要配置上数据库,此时我们来到镜像中心查找到 Mysql镜像 ,并将其拉取到本地仓库
docker pull hub.c.163.com/library/mysql:latest
执行完上面的命令后,本地仓库便有了Mysql的镜像,此时我们就将Mysql镜像运行起来
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=jpress hub.c.163.com/library/mysql:latest
分析:我们照常将镜像在后台运行起来,但是这里我们还需要为其指定上环境变量,我们通过-e这个参数可为镜像运行时配置上环境变量
这里我们为Mysql镜像配置了
MYSQL_ROOT_PASSWORD=123456 : 指定Root的密码为123456
MYSQL_DATABASE=jpress :指定数据库的名字为jpress
运行结果:
3.在自己配置的镜像中去使用数据库
数据库名便是我们刚刚运行Mysql镜像时候指定的数据库名称
密码便是我们刚刚运行Mysql镜像时候指定的Root密码
主机便是当前运行我们这个Mysql镜像的Ip。我们可以在Docker执行ifconfig命令查看ip
端口号便是我们刚刚运行Mysql镜像时候指定的端口
4.执行完上面的数据库配置后,我们的Web项目也就在镜像中运行了起来,此时就可以正式的使用了
Zookeeper镜像
docker pull zookeeper:3.4.9 docker run --privileged=true -d --name zookeeper --publish 2181:2181 -d zookeeper:3.4.9