官方资料:
Docker 官网:http://www.docker.com
Github Docker 源码:https://github.com/docker/docker
安装docker apt install docker-ce -y检查服务
systemctl [start|stop|restart|status|...] docker docker version|info注意:
安装前:只有eth0和lo网卡
安装后:docker启动后,多出来了docker0网卡,网卡地址172.17.0.1
加速配置
# 定制加速仓库 echo '{"registry-mirrors": ["https://kcmn5udq.mirror.aliyuncs.com"]}' > /etc/docker/daemon.json # 重启服务 systemctl restart docker基本实践
搜索线上的nginx镜像文件
# 需要联网 docker search [image_name]获取
docker pull [image_name]查看
docker images <image_name>历史(查看镜像文件创建历史记录)
docker history [image_name]进阶实践
标签(起个别名)
docker tag [old_image]:[old_version] [new_image]:[new_version]示例: 多了一个镜像,但镜像的ID是一样的(表示的是同一个镜像,知识起了个别名)
python@ubuntu:~$ docker tag nginx:latest new_nginx:v1.0 python@ubuntu:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE new_nginx v1.0 f949e7d76d63 12 months ago 126MB nginx latest f949e7d76d63 12 months ago 126MB mysql 5.7.22 0d16d0a97dd1 2 years ago 372MB delron/fastdfs latest 8487e86fc6ee 2 years ago 464MB delron/elasticsearch-ik 2.4.6-1.0 095b6487fb77 2 years ago 689MB删除
docker rmi [image_id/image_name:image_version] (注意:删除的有别名的镜像的时候,删除的是image_name,如果删除镜像id,那么该镜像会被删除)。这里示例删除别名镜像: python@ubuntu:~$ docker rmi new_nginx:v1.0 Untagged: new_nginx:v1.0 python@ubuntu:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest f949e7d76d63 12 months ago 126MB mysql 5.7.22 0d16d0a97dd1 2 years ago 372MB delron/fastdfs latest 8487e86fc6ee 2 years ago 464MB delron/elasticsearch-ik 2.4.6-1.0 095b6487fb77 2 years ago 689MB导出
docker save -o [包文件] [镜像]示例:导出桌面
导入
docker load < [image.tar_name]基本实践
查看容器
# -a 表示查看包括未启动的容器 docker ps -a创建容器并启动(第一次启动需要创建)
docker run -itd <image_name>启动容器
docker start [container_id]关闭容器
docker stop [container_id]删除容器
docker rm [-f] [container_id]进阶实践
进入(登录)容器
docker exec -it [container_id] /bin/bash属性解析
-i:则让容器的标准输入保持打开。
-t:让docker分配一个伪终端,并绑定到容器的标准输入上
/bin/bash:执行一个命令
提交(创建一个镜像)
docker commit -m '改动信息' -a "作者信息" [container_id] [new_image:tag]日志
docker logs [container_id]属性
docker inspect [container_id]数据卷
数据卷就是将宿主机的某个目录,映射到容器中(*访问宿主机文件就是访问容器文件),作为数据存储的目录,我们就可以在宿主机对数据进行存储
命令详解
docker run -itd --name [容器名字] -v [宿主机文件]:[容器文件] [镜像名称]注意:
-v 宿主机文件:容器文件 可以存在多个,表示同时挂载多个
宿主机问文件尽量用绝对路径,容器文件即使不存在,Docker自动创建
默认构建容器,网络模式为桥接模式;那么桥接模式下,容器只能和宿主机通信,原理图如下:
那么,如果我们想,通过宿主机的ip和端口来直接访问容器,该如何实现呢?接下来,我们讲解docker的端口映射就可以做到这点!
端口映射
命令格式:
docker -P|p [镜像名称]注意:
-P(大写) 指的是容器应用PORT随机映射到宿主机上的PORT
生产场景一般不使用随机映射,好处是由docker分配,宿主机端口不会冲突,
-p(小写) 宿主机IP:宿主机PORT:容器PORT
指定端口映射,在标准化场景下使用频率高,
宿主机IP不写表示"0.0.0.0",宿主机PORT不写表示随机端口,容器PORT必须指定
简单实践
默认随机映射(大写的-P)
docker run -d -P nginx指定端口映射(-p(小写) 宿主机IP:宿主机PORT:容器PORT)
python@ubuntu:~/Desktop$ docker run -d -p 192.168.203.153:8899:80 nginx a875f555f9214b38cf45d49bcfacfa6cbf3e904e0d8b069d800f8552da8949b6此时就可以在本地的window系统访问容器的nginx了
网络模型
命令格式
docker network help|ls|create|...模式解析
bridge模式:Docker的默认模式,它会在docker容器启动时候,自动配置好自己的网络信息,同一宿主机的所有容器都在一个网络下,彼此间可以通信。类似于我们vmware虚拟机的nat模式。
host模式:鸠占鹊巢,用着宿主机的东西,干自己的事情。容器使用宿主机的ip地址进行通信。
特点:容器和宿主机共享网络
**none模式:**这种模式最纯粹,不会帮你做任何网络的配置,可以最大限度的定制化。
简单实践
容器使用宿主机的ip地址和端口进行通信,容器和宿主机共享网络。
# 重点,必须掌握 docker run --network=host -itd --name <容器名称> <镜像名称>使用网络
docker run --network=host -itd --name nginx-host nginx断开网络
docker network disconnect bridge-test nginx-new-bri连接网络
docker network connect bridge-test nginx-new-bri