文章目录
- Docker介绍
- 安装Docker
- Docker基础操作
-
- Docker服务的启动
- 镜像命令
- 容器命令
-
- [1. 从docker hub去查看Nginx容器的运行命令](#1. 从docker hub去查看Nginx容器的运行命令)
- [2. 查看所有容器状态](#2. 查看所有容器状态)
- [3. 查看容器日志](#3. 查看容器日志)
- [4. 进入Nginx容器执行命令,修改Html内容,添加"Hello World"](#4. 进入Nginx容器执行命令,修改Html内容,添加“Hello World”)
- [5. 停止与开始容器](#5. 停止与开始容器)
- [6. 删除容器](#6. 删除容器)
- 数据卷
-
- [1. 为什么需要数据卷](#1. 为什么需要数据卷)
- [2. 数据卷的操作](#2. 数据卷的操作)
- [3. 数据卷的挂载](#3. 数据卷的挂载)
- [4. 目录与文件挂载](#4. 目录与文件挂载)
- Dockerfile自定义镜像
- DockerCompose集群部署
- 镜像仓库
Docker介绍
大项目组件多,运行环境复杂
- 每个组件需要的依赖和函数库可能版本不同,容易不兼容
- 开发、测试、生产环境有差异,甚至操作系统都不一样
Docker可以在任何Linux机器上一键部署,一键移除
Docker与虚拟机区别
- Docker直接用打包的系统函数库调用OS内核,性能较好,硬盘占用小,启动快
- 虚拟机需要用函数库调用模拟的OS,指令经过Hypevisor转换后调用真正OS的内核,性能一般,硬盘占用大,启动慢
DockerRegistry: 镜像托管服务器,DockerHub、阿里云镜像
安装Docker
Docker基础操作
Docker服务的启动
sh
systemctl enable docker # 开机自启
service start docker
在命令后加上--help
就能打开帮助文档
镜像命令
官方镜像拉取参考DockerHub网站
下面我们要:
- 拉取一个nginx镜像
- 查看镜像
- 将其保存成tar
- 删除dokcer中的nginx镜像
- 从tar中加载这个镜像
- 对这个镜像打标签说明这是我们开发的第一个版本
sh
docker pull nginx[:tag] # 拉取镜像,不指定版本就自动拉取最新版,tag为latest
docker images # 查看镜像
docker save -o nginx.tar nginx:latest # 保存镜像到tar压缩文件,-o是output,后面跟要保存到的文件名
docker rmi nginx:latest# 删除镜像
docker load -i nginx.tar# 加载刚刚保存的镜像,-i是input,后面跟镜像压缩包文件名
docker tag nginx:latest mynginx:1.0 # 给一个镜像打标签为mynginx:1.0
容器命令
下面我们要:
1. 从docker hub去查看Nginx容器的运行命令
容器一开始是完全隔离的,端口映射就是暴露一个接口(可以理解成和宿主机之间接了条通道,只有宿主机能把请求给它)
容器端口一般取决于应用本身很少变化,宿主机端口可以任意指定可用的
具体怎么启动建议在DockerHub中搜索
sh
docker run --name mynginx -p 80:80 -d nginx
2. 查看所有容器状态
默认只能查看到未被停止的,加-a
能看到所有
sh
docker ps
3. 查看容器日志
sh
docker logs mynginx # 查看日志
docker logs -f mynginx # 持续跟踪显示日志,-f=follow
4. 进入Nginx容器执行命令,修改Html内容,添加"Hello World"
实际工作中不建议在容器内修改文件
- docker exec: 进入容器内部,执行一个命令
- -it = interaction terminal 给当前进入的容易创建一个标准输入输出终端
- bash是这里进入容器后要执行的命令,它本身是一个指令处理器
sh
docker exec -it mynginx bash
docker容器里有一套自己的简易文件系统
找到nginx的html页面并打开查看
sh
cd /usr/share/nginx/html/
cat index.html
修改html内容
sh
sed -i 's#Welcome to nginx#Hello World#g' index.html
sed -i 's#<head>#<head><meta charset="utf-8>#g' index.html
5. 停止与开始容器
sh
docker stop mynginx
docker start mynginx
6. 删除容器
sh
docker rm mynginx # 要先停止容器
docker rm -f mynginx # 强制删除
数据卷
1. 为什么需要数据卷
怎么修改容器中的文件呢?
- 使用一个虚拟目录交给容器使用,实际上对应的是宿主机的一个真实目录。
- 如果多个虚拟目录挂载在同一个真实目录上,还能完成文件共享
- 就算容器被删了,文件还是在宿主机文件夹里
2. 数据卷的操作
- 创建数据卷
sh
docker volume create myvolume
- 列出所有数据卷
sh
docker volume ls
- 查看数据卷详细信息
sh
docker volume inspect myvolume
- 删除未使用的数据卷
bash
docker volume prune
- 删除指定数据卷
bash
docker volume rm myvolume
3. 数据卷的挂载
在创建容器 的时候通过-v
参数将一个数据卷挂载到某个容器目录,如果没有这个数据卷会自动创建一个
bash
docker run\
--name mn\
-v myvolume:/usr/share/nginx/html\ # 把myvolume数据卷挂载到容器内的/usr/share/nginx/html这个目录上
-p 80:80\
nginx
4. 目录与文件挂载
也可以直接把宿主机目录挂载到某个容器目录
挂载文件会直接覆盖容器内的文件
Dockerfile自定义镜像
分层方便迭代,只用改上面几层
DockerCompose集群部署
可以基于Compose文件快速部署分布式应用,无需手动逐个创建和运行容器
Compose文件是个文本文件夹,通过指令定义集群中每个容器如何运行,内容约等于多个docker run的集合
详情参考官网DockerCompose文档
最好先自己部署好Nacos再一键部署其他微服务,否则找不到地方注册
镜像仓库
仓库也可以自己建私有仓库
搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。
官网地址:https://hub.docker.com/_/registry
1.简化版镜像仓库
Docker官方的Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。
搭建方式比较简单,命令如下:
sh
docker run -d \
--restart=always \
--name registry \
-p 5000:5000 \
-v registry-data:/var/lib/registry \
registry
命令中挂载了一个数据卷registry-data到容器内的/var/lib/registry 目录,这是私有镜像库存放数据的目录。
访问http://YourIp:5000/v2/_catalog 可以查看当前私有镜像服务中包含的镜像
2.带有图形化界面版本
使用DockerCompose部署带有图象界面的DockerRegistry,命令如下:
yaml
version: '3.0'
services:
registry:
image: registry
volumes:
- ./registry-data:/var/lib/registry
ui:
image: joxit/docker-registry-ui:static
ports:
- 8080:80
environment:
- REGISTRY_TITLE=私有仓库
- REGISTRY_URL=http://registry:5000
depends_on:
- registry
3.配置Docker信任地址
我们的私服采用的是http协议,默认不被Docker信任,所以需要做一个配置:
sh
# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.150.101:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker