安装
可以直接跟着官网的操作去做
https://docs.docker.com/engine/install/centos/
仓库的话可以使用我们国内的阿里云
阿里云镜像仓库
yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm
卸载
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
基础命令:
systemctl start docker #启动Docker
docker version #Docker版本信息
docker info #Docker详细信息
docker --help #Docker帮助命令
官网文档
https://docs.docker.com/reference/
镜像命令
docker images #查看所以本地主机上的镜像
docker search (mysql) # 搜素仓库中的镜像
下载镜像
docker pull:(tag版本) 不写:tag就默认最新的
删除镜像
docker rmi -f 镜像id
==============================================================================
容器命令
有了镜像才可以创建我们的容器
新建容器并且启动
docker run -it --name nginx01 -p 80:3344 nginx /bin/bash
退出容器
exit
退出容器不在运行ctrl+Q+P
后台运行
列出所有正在运行的容器
docker ps
docker ps -a #不在运行的也可以查出来
删除容器
docker rm 容器id #正在运行的要加-f
启动 重启 停止 杀死
后台启动
查看日志
查看进程
dokcer top 容器id
查看容器的元数据
docker inspect 容器id
进入当前进行的容器
docker exec -it 容器id /bin/bash
docker attach 容器id
docker exec 是进入当前容器但新启一个终端
docker attach 是直接进入当前那个容器所在的终端
容器的数据拷贝到主机
docker cp 容器id :容器内文件的路径 主机路径
==============================================================================
docker stats #查看容器的状态
docker部署nginx的图解
提交镜像
如果你想保存当前容器的状态那么就可以提交然后保存为我们容器的镜像
docker commit
docker commit -a="作者名字" -m="描述" 容器id 镜像名称:版本
docker commit -a="xiyuehua" -m="add webaap app" 6b739cb8cb3d myselftocmat:1.0
使用数据卷
使用命令来挂载数据卷 我们主机的目录会与容器绑定的目录自动同步 如在容器创建了一个文件夹 主机自动创建一个与之对应的文件夹
docker run -it -v /home/test:/home centos /bin/bash
docker run -it -v 主机目录:容器目录 centos /bin/bash
指定路径|匿名|具名 挂载
-v 容器内路径 #匿名挂载
-v /容器外路径:/容器内路径 #指定路径挂载
-v 卷名:/容器内路径 #具名挂载
ro/rw 可以设置我们的容器权限
dockerfile
dockerfile文件就是用来生成我们的镜像文件的一个命令脚本
样例
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "--------end------"
CMD /bin/bash
启动我们的dockerfile
-f 就是我们dockerfile的地址
-t 就是target 生成的东西
docker build -f dockerfile1 -t xiyuehua/centos:1.0 . #不要忘了最后这个点
数据卷容器
俩个甚至多个mysql同步数据
手动实现挂载
docker run -it --name dokcer01 2f27c7d48432(镜像id) /bin/bash
docker run -it --name docker02 --volumes-from 0ae80a921f55(父容器的id) 2f27c7d48432(镜像id)
dockerfile指令
实战测试
FROM centos
MAINTAINER xiyuehua<781655857@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
CMD与ENTRYPOINT的区别
他们俩个都是在容器启动时自动执行的命令 而我们的CMD在启动时加参数会覆盖而ENTRYPOINT会追加
Docker网络
所有的容器可以通过我们veth pair技术 虚拟网络技术想连接 当容器被删除时 桥接也删除 所有我们的所有容器之间可以相互都通信 docker就相当于一个路由器
–link(不推荐使用)
把tomcat03与tomcat02 通过我们的名字相连通
ping tomcat02 #就可以ping通
但我们02ping 03 就不行
就像我们springcloud的openfein
自定义docker网络
我们开启docker容器时 默认就是用的我们的bridge网卡
创建我们自己的网卡
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
查看我们自己配置的网络
用我们自己的网络开启我们的容器
docker run -d -P --name tomcat-net01 --net mynet tomcat
我们不同集群可以搭建不同的网络
网络的总结:
用我们自己配置的网络 不用使用–link 也能直接ping名字 即容器之间可以通信
网络连通
下图我们想tomcat-01 与tomcat-net-01相通是不可能 我们要先把tomcat-01 与mynet 俩个网络打通
打通!
打通之后就是把我们的容器tomcat01直接放到了mynet网络下
打通之后可以通信了