官网:https://www.docker.com
文档:https://www.docs.docker.com
1.下载安装Docker
2.阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://habq57u3.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3.Docker run原理
Docker全流程
4.Docker命令
镜像命令
//显示所有镜像
docker images
//搜索镜像
docker search mysql
docker search mysql --filter=STARS=3000
//下载镜像
docker pull mysql
docker pull mysql:5.7
//删除镜像
docker rmi -f 718a6da099d8 //删除指定id镜像
docker rmi -f $(docker images -aq)//删除所有镜像
容器命令
//新建容器并启动
docker run [可选参数] image
[可选参数]:
-d 后台方式运行
-it 交互方式运行,进入容器查看内容
-p 指定容器端口
//启动并进入容器
docker run -it centos /bin/bash
//退出
exit //容器停止并退出
Ctrl+P+Q //容器不停止退出
//列出所有运行的容器
docker ps //列出当前正在运行的容器
-a //列出当前正在运行的容器+带出历史运行过的容器
-n=? //显示最近创建的容器
-q //显示容器编号
//删除容器
docker rm 容器id //删除指定的容器,不能删除正在运行的容器
docker rm -f $(docker ps -aq) //删除所有的容器
docker ps -a -q|xargs docker rm //删除所有的容器
//启动和停止容器
docker start 容器id //启动容器
docker restart 容器id //重启容器
docker stop 容器id //停止当前正在运行的容器
docker kill 容器id //强制停止当前容器
其他命令
后台启动容器
docker run -d 镜像名
docker ps 发现镜像停止了,这是因为后台运行,必须有一个前台进程,docker发现没有应用,就会自动停止。
查看日志
docker logs -f -t --tail 容器
docker logs -tf --tail 日志条数 容器Id
//自己编写一段脚本
docker run -d centos /bin/sh -c "while true;do echo zhulin;sleep 1;done"
查看容器中的进程信息
docker top 容器Id
查看镜像的元数据
docker inspect 容器Id
进入当前正在运行的容器
docker exec -it 容器Id /bin/bash //进入容器后开启一个新的终端
docker attach 容器Id //进入容器正在执行的终端
容器中文件复制到主机
docker cp c728c59e430b:/home/test.java /home
Docker命令小结
5.Docker部署Nginx
1.搜索Nginx
docker search nginx
2.下载Nginx
docker pull nginx
3.运行Nginx,映射到3344端口(阿里云安全组开启)
docker run -d --name nginx01 -p 3344:80 nginx
4.本机测试
curl localhost:3344
5.部署
6.Docker部署Tomcat
1.下载运行tomcat
docker run -d --name tomcat0101 -p 3355:8080 tomcat
2.部署Tomcat
docker run -d --name tomcat0101 -p 3355:8080 tomcat
说明Docker里是阉割版的Tomcat。
3.进入Tomcat
docker exec -it 5fa737d92bfd /bin/bash
4.拷贝必要文件
cp -r webapps.dist/* webapps
部署成功!
7.部署ES+Kibana
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。
1.部署ES
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
2.Kibana需要连接ES
Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。
Kibana让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。
设置Kibana非常简单。无需编码或者额外的基础架构,几分钟内就可以完成Kibana安装并启动Elasticsearch索引监测。
Docker网络原理:借助宿主机。
8.Portainer可视化面板安装
docker run -d -p 9000:9000 -v /root/portainer:/data -v /var/run/docker.sock:/var/run/docker.sock --name dev-portainer portainer/portainer
9.Commit镜像
在6中部署Tomcat时,修改了文件,我们可以将修改好的容器打包成为新的镜像。
docker commit -a="zhuin" -m="add webapps" id tmocat02:1.0
10.容器数据卷
使用命令挂载 -v
docker run -it -d -v /home/ceshi:/home centos /bin/bash
docker run -it -d -v /home/ceshi:/home:ro centos /bin/bash //只读
docker run -it -d -v /home/ceshi:/home:rw centos /bin/bash //默认,可读可写
主机home目录下有test文件夹,说明容器中的文件可以同步到主机。
停止容器,在宿主机上修改test文件,启动容器后后数据依然同步
docker inspect id
查看
多个容器之间数据同步,一个容器变成数据卷容器,让其他容器共享数据,比如搭建集群。
volumes-from
生命周期:挂载到宿主机一直存在,数据卷容器直到没有使用为止。
11.DockerFile
1.基础知识:
1.每个保留关键字(指令)都是大写字母
2.执行顺序从上到下
3.#表示注释
4.每一个指令都会创建提交一个新的镜像层并提交
2.Dockerfile构建镜像的步骤:
1.编写一个Dockerfile文件
2.docker build 构建成为一个镜像
3.docker run 运行镜像
4.docker push 发布镜像到(Dockerhub、阿里云镜像仓库)
3.Dockerfile指令:
4.实战构建centos
1.新建dockerfile目录写dockerfile文件mydockerfile-centos
FROM centos
MAINTAINER zhu<87492517@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "--------------end------------------"
CMD /bin/bash
2.构建成一个镜像
docker build -f mydockerfile-centos -t mycentos:0.1 .
3.运行
docker run -it mycentos:0.1
vim、ifconfig命令也都可以使用;可以用docker history 镜像id
查看镜像构造过程。
4.docker push 发布镜像到Dockerhub
docker tag 27cb44739e24 dockerzhulin521/mycentos:0.1
docker push dockerzhulin521/mycentos:0.1
5.docker push 发布镜像到阿里云镜像仓库
sudo docker login --username=朱琳爱玮琦 registry.cn-hangzhou.aliyuncs.com
docker tag 27cb44739e24 registry.cn-hangzhou.aliyuncs.com/dockerzhulin/dockerzhulin522:mycentos
docker push registry.cn-hangzhou.aliyuncs.com/dockerzhulin/dockerzhulin522:mycentos
12.Docker网络
1.准备环境
docker rmi -f $(docker images -aq)
2.启动两个容器tomcat1和tomcat2
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat2 tomcat
docker exec -it tomcat01 ip addr
docker exec -it tomcat2 ip addr
56、57一对,58、59一对。
evth-pair充当一个桥梁,就是一对虚拟设备接口,成对出现,一端连着协议,一端彼此相连。
3.测试Linux能否Ping通容器
ping 172.17.0.2
4.测试容器能否Ping通容器
docker exec -it tomcat2 ping 172.17.0.2
5.容器互联link
docker0不支持容器名互联
docker run -d -P --name tomcat03 --link tomcat2 tomcat
此时3可以Ping通2,反过来不可以。link不推荐使用
6.自定义网络
查看所有的docker网络
docker network ls
自定义网络mynet
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
创建两个使用自定义网络的容器
docker run -d -P --name tomcat-net-01 --net mynet tomcat
docker run -d -P --name tomcat-net-02 --net mynet tomcat
测试tomcat-net-01能否与tomcat-net-02联通
docker exec -it tomcat-net-01 ping tomcat-net-01
不同的集群使用不同的网络,保证集群时安全和健康的。
7.网络连通
打通tomcat01 和 mynet
docker network connect mynet tomcat01
测试成功,实质:将tomcat01写入mynet。一个容器两个IP地址,类似阿里云既有公网 IP,又有私网IP。