1、基础知识
- 1.1 概念
Docker是一个用于快速环境部署/搭建的工具。 - 角色组成
组件 | 描述 |
---|---|
Docker镜像 | 它是一个只读的文件,就类似于我们安装操作系统时候所需要的那个iso光盘镜像,通过运行这个镜像来完成各种应用的部署。这里的镜像就是一个能被docker运行起来的一个程序。 |
Docker容器 | 容器就类似于我们运行起来的一个操作系统,而且这个操作系统启动了某些服务。这里的容器指的是运行起来的一个Docker镜像。 |
Docker仓库 | 仓库就类似于我们在网上搜索操作系统光盘的一个镜像站。这里的仓库指的是Docker镜像存储的地方。 |
官方资料:
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
2、基础管理
2.1、镜像管理
基本实践
搜索线上的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]
2.2、容器管理
基本实践
查看容器
# -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]
2.3、数据管理
数据卷
数据卷就是将宿主机的某个目录,映射到容器中(*访问宿主机文件就是访问容器文件),作为数据存储的目录,我们就可以在宿主机对数据进行存储
命令详解
docker run -itd --name [容器名字] -v [宿主机文件]:[容器文件] [镜像名称]
注意:
-v 宿主机文件:容器文件 可以存在多个,表示同时挂载多个
宿主机问文件尽量用绝对路径,容器文件即使不存在,Docker自动创建
2.4、网络管理
默认构建容器,网络模式为桥接模式;那么桥接模式下,容器只能和宿主机通信,原理图如下:
那么,如果我们想,通过宿主机的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