一、镜像管理
1.查找镜像
docker search mysql
2.下载镜像
docker pull name:tag docker pull mysql:mysql
3.列出本地镜像
docker images
4.删除镜像
docker rmi imager docker rmi -f imager #强制删除
5.查看镜像
docker inspect imager
6.构建镜像
docker run -i -t centos /bin/bash #进入基础镜像进行编辑 #docker run:启动容器。-i:交互方式。-t:分配一个虚拟终端。 docker commit c539f5dfe0ce demo/webserver #编辑完成,保存为新的镜像
7.标签管理
docker tag http local/httpd #修改名称。 docker tag http local/httpd:v2.1 #修改标签
二、容器管理
1.创建容器
①:使用docker create 创建容器。
还可以添加选项:
--add-host=[]:指定主机的ip地址的映射关系,格式为:host:ip --dns=[]:为容器指定域名服务器 -h:指定主机名 -i:打开容器的标准输入 --name:指定容器名称 -u,--user=[]:创建用户 docker create image docker create centos:latest #latest表示使用最新版本的镜像创建容器。 docker create -it --name javatest -v /docker/data/:/data1 centos:java
②:使用docker run 创建容器。
#使用centos镜像创建一个名为 demo_centos 的容器 docker run -i -t --name demo_centos centos /bin/bash # -t 选项:为容器分配一个虚拟终端,称为交互式容器。 # -d选项:创建的容器为后台型容器,新的容器在后台运行。
2.查看容器
docker ps #只显示正在运行的容器 docker ps -a #显示全部容器 docker ps -a -f --name=mysql #列出名称包含 myslq 的容器 docker ps -a --before=demo_centos #列出某个容器创建之前的所有容器 docker ps -a --since=demo_centos #列出某个容器创建之后创建的容器 docker stats #实时查看容器占用的内存
3.查看容器日志
--log-driver json-file #启动容器时添加此参数,指定日志驱动 docker logs (容器ID或者容器名称) #查看容器日志 docker logs -f (容器ID或者容器名称) #实时返回日志
4.启动容器
docker start demo_centos docker restart demo_centos #docker run 也可以启动容器
5.登录容器
docker exec -it (容器ID或者容器名称) /bin/bash(执行的命令)
6.停止容器
docker stop demo_centos docker stop -t 10 demo_centos #10秒钟后停止 docker kill demo_centos #强制停止
7.删除容器
docker rm demo_centos
三、数据管理
1.创建数据卷
docker volume create my-vol
2.查看所有的数据卷
docker volume ls
3.查看数据卷的详细信息
docker volume inspect my-vol
4.挂载主机目录到容器
#--mount:挂载目录 #--type:挂载类型 #--source:主机目录 #--target:容器目录 docker run -d --name nginx --mount type=bind,source=/data,target=/webapp centos:nginx #查看容器挂载信息 docker inspect nginx
5.删除、清理 数据卷
#删除一个不在使用数据卷。注意:有容易在使用的时候不能被删除 docker volume rm my-vol #清理所有没有占用的数据卷 docker volume prune
四、网络管理
1.docker网络原理
容器互联网络原理
Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。
同时,Docker 随机分配一个本地未占用的私有网段(在 RFC1918 中定义)中的一个地址给 docker0 接口。比如典型的 172.17.42.1,掩码为 255.255.0.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。
当创建一个 Docker 容器的时候,同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头(例如 vethAQI2QT)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。
docker安装完成之后,会在宿主机中创建一个虚拟网桥,通过虚拟网桥实现容器与容器之间以及容器与外界的通讯。
网桥工作在OSI七层模型中的第二层:数据链路层。
brctl show #查看虚拟网桥 docker0 的信息。
2.网络模式
docker有四种网络模式:host、container、none、bridge。
①:host(主机模式)
容器不会虚拟出虚拟网卡和IP,而是和宿主机公用
docker run -d -ti --network=host centos
②:container(容器模式)
指定新创建的容器和已有的容器共享network命名空间。
③:none(无模式)
创建的容器没有网卡、IP地址、路由等信息。需要自己添加网卡、配置IP等。
④:bridge(桥接)
可以理解为一个软件交换机,它会挂载到它的网口之间进行转发
3.端口映射
#随机映射 -P #默认映射所有地址所有端口 -p 8080:8080 #映射到本机指定地址的指定端口 -p 127.0.0.1:8080:8080 #指定本机地址后,8080只有本机才能访问 #查看容器端口对应绑定的主机端口 docker port nginx 8080
4.容器互联
#默认情况下IP地址是随机分配的,并且每次启动容器都有可能发生变化,若用户使用--ip选项为容器指定固定ip,则需要创建自定义网络。
docker exec nginx ip a show #查看容器的ip地址 docker exec nginx ping 172.17.0.2 #使用镜像ID413545ae2733的容器ping别的主机
#网桥
#创建一个自己的虚拟网桥 docker network create -d bridge my-bridge #创建两个链接到新网桥的两个容器 docker run -it --name test5 --network my-bridge centos docker run -it --name test6 --network my-bridge centos
5.容器与外部网络连接
①:容器内部访问外部网络
容器通过自己的网络接口桥接到docker0,而docker0是与主机互通的,所以默认可以连接外部网络。
docker exec 413545ae2733 ping www.baidu.com
②:外部网络访问容器内部
如果需要访问容器提供的网络服务,就要通过端口映射。也就是将主机的某个段口映射到容器的网络服务断口。
docker run -itd -p 80:80 httpd #创建一个web容器,并将主机的80端口映射到容器的80端口。
五、Docker 仓库
①公有仓库
#登录公有仓库 docker login #给你的镜像打标签 docker tag centos:nginx sunyunjie/centos:nginx #上传镜像到docker 官方镜像库 docker push sunyunjie/centos:nginx #查看上传镜像是否成功 docker search sunyunjie/centos:nginx
②私有仓库
#安装私有仓库 docker run -d -p 5000:5000 -v /data/:/var/lib/registry registry #标记镜像到私有仓库 docker tag centos:nginx sunyunjie/centos:nginx #上传镜像到私有仓库 docker push sunyunjie/centos:nginx #查看仓库中已经上传的镜像 curl 127.0.0.1:5000/v2/_catalog #从本地仓库下载镜像
docker pull sunyunjie/centos:nginx