docke的常用命令
基本命令
#启动docker
systemctl start docker
service docker start
#关闭docker
systemctl stop docker
service docker stop
#重启docker
service docker restart
#设置docker开机自启动
systemctl enable docker
#查看启动的docker版本信息
docker version
#卸载docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker(docker的默认工作路径)
#察看日志
docker logs
-ft #显示日志
--tail #显示的行数
#查看cpu状态
docker stats
#构建镜像
docker build
-f 文件 #目标文件dockerfile
-t 名字:版本号 #生成的镜像
. #当前目录下
eg:docker build -f dockerfile文件路径 -t 镜像名:[tag] .
#帮助命令
docker --help
#docker系统信息
docker info
镜像命令
#查看所有本地的主机上的镜像
docker images
-a #列出所有的镜像
-q #只显示镜像的id
#搜索镜像
docker search 镜像名
--filter=***= #过滤筛选
#下载镜像
docker pull 镜像名
#指定版本下载
docker pull 镜像名:版本
#删除指定的镜像
docker rmi -f 镜像id
#删除多个镜像
docker rmi -f 镜像id 镜像id 镜像id
#删除全部镜像
docker rmi -f $(docker images -aq)
#后台启动一个容器
docker run -d 镜像名
#查看镜像的元数据
docker image inspect 镜像名字
#察看镜像构建过程
docker history 镜像名字
如何发布自己的镜像?
1.docker login -u 账号 #登录dockerhub,然后输入密码,登录成功会显示
2.docker push 镜像名字:tag #将自己的镜像发布到服务器上
注意:如果没有tag会造成推送不成功
#给镜像添加tag
docker tag 镜像id 新的镜像名字:tag
容器命令
#启动容器
docker run [可选参数] 镜像名字
--name="***" 容器名字,用来区分容器
-d 后台方式运行
-it 使用交互式运行,进入容器查看内容
-P 指定容器的端口 -P 8080:8080(小写)
-P ip:主机端口:容器端口
-P 主机端口:容器端口(常用)
-P 容器端口
-p 随机指定端口(大写)
-e 配置环境
-v 容器数据卷,挂载 -v 外面的路径:docker容器内的路径
#列出运行的容器
docker ps
-a #列出当前正在运行的容器+历史运行过的容器
-n=? #显示最近创建的容器
-q #只显示容器的编号
#退出容器
exit #直接停止容器并退出
ctrl+p+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 top 容器id
#查看容器的元数据
docker inspect 容器id
#进入容器并新打开一个命令窗口
docker exec -it 容器id bashShell
eg:docker exec -it ******** /bin/bash
#进入容器执行的命令窗口
docker attach 容器id
#将容器内文件拷贝出来
docker cp 容器id:容器内路径 目的的主机路径
#提交容器到一个新的镜像
docker commit -m="提交的描述信息" -a="作者” 容器id 目标镜像名:[TAG]
容器数据卷(挂载)
是什么?
docker 容器数据卷是容器在运行过程中持久化数据的一种方式,卷是目录或文件,存在于一个或多个容器中,由docker 挂载到容器,但不属于联合文件系统,因此能够绕过Union File System 提供一些用于持续存储或共享数据的特性;卷的设计目的就是数据持久化,完全独立于容器的生命周期,因此docker不会在容器删除时,删除其挂载的数据卷。
特点?
数据卷可在容器之间共享或重用数据。
卷中的更改可以直接生效。
数据卷中的更改,不会包含在镜像中的更新。
数据卷的生命周期一直持续到没有容器使用它为止。
怎么做?
#直接命令添加
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载
-v /宿主机路径:容器内路径:权限 #指定路径挂载
ro-只读
rw-读写(默认)
一旦写书ro,就说明这个文件只能通过宿主机操作,无法在容器内部操作
eg:docker run -it -v /宿主机绝对路径:/容器内目录:权限 镜像名
如何实现容器间的数据共享?
--volumes-from 父容器
docker run -it --name docker02 --volumes-from docker01 镜像名字
dockerFile(会写最好)
FROM #基础镜镜像,—切从这里开始构建
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤: tomcat镜像,这个tomcat压缩包!添加内容,会自动解压
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #暴露端口配置
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承dockfile,这个时候就会运行onbuild的指令,触发指令
COPY #类似ADD ,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量!
docker网络
docker容器和容器之间是可以互相ping通的,linux外部也是可以ping通容器内部地址访问
为什么?
我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个
网卡docker0桥接模式,使用的技术是evth-pair技术
什么时evth-pair技术?
evth-pair技术,就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连,正因为这个
特性,evth-pair技术可以充当一个桥梁,连接各种虚拟网络设备,openstac,Docker容器之间的连接,oVS
的连接,都是使用evth-pair技术
#查看容器内部网络地址
docker exec -it 容器名字 ip addr
#查看所有的docker网络
docker network ls
bridge:桥接模式(docker默认,自己创建时也使用bridge模式)
none:不配置网络
host:和宿主机共享网络
container:容器网络互通(用的少!局限性很大)
#查看当前网络的相关信息
docker network inspect networkID
容器互联
为什么要容器互联?
服务每次启动的ip地址不通,通过容器互联可以实现通过服务名字调通对应的ip
实现容器互联的方式
①--link
可以让容器之间通过名字进行访问,正向ping,不能反向ping通,本质就是在hosts文件中添加了一对网络绑定
eg:docker run -d -P --name tomcat03 --link tomcat02 tomcat
②--net 自定义网络
自定义的网络docker已经维护好了对应的关系,可以直接实现名字ping通对应的容器
docker run -d -P --name tomcat01 tomcat 等价于 docker run -d -P --name tomcat01 --net bridge tomcat
#自定义网络配置文件 mynet
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
网络联通
将一个容器连接到一个网络上
#打通网络,实质就是将容器配置到自定义网络配置文件中
docker network connect 网络配置文件 容器名字
eg:docker network connect mynet tomcat01