一、docker基本原理
要想理解docker运行原理,需要弄清楚以下几个问题:
1、docker如何处理复杂的应用依赖?如何处理依赖之间的兼容关系?
- docker将应用、运行所需的系统函数库、应用相关依赖、配置文件,全部打包到一起,形成可移植的镜像。
- 并且docker使用了沙箱机制,使得应用之间相互隔离。
2、docker如何处理开发、测试、生产各个环境的差异?
- docker镜像包含了完整的运行环境,其中就包括系统函数库,也就是docker镜像仅仅依赖系统的linux内核,而无论是Centos还是Ubuntu它们的核心都是linux内核,所以docker镜像可以任意linux操作系统上运行。
3、总结
docker通过将应用和所需的最小运行的环境一起打包为镜像,利用沙箱机制隔离各个应用,从而实现了应用依赖兼容和在任意linux操作系统上的运行。
二、docker的基本概念
1、镜像(image)
- docker将应用和其所需要的依赖、函数库、环境、配置等文件打包到一起,称为镜像。
2、容器(container)
- docker镜像在运行的时创建一个隔离环境环境,对外不可见,称为容器。
3、DockerHub
- dockerhub是一个docker镜像的托管平台,这种平台又称为docker register
- 国内也有很多这种公开的托管服务平台,比如网易云镜像服务、阿里云镜像服务。
三、docker安装及验证
四、docker应用镜像安装运行–流程
- 上图所示,docker在安装完成后,启动docker,会启动一个docker server的进程,这个进程其实是docker的守护进程,它用来接收并处理docker命令,管理镜像和容器。
- 我们在控制台Client敲出docker命令,然后Docker Server也就是docker守护进程会接收命令,并且处理命令。
- **运行流程:**上图所示,Client发出指令,docker server接收命令并运行,根据指令去docker公共镜像托管仓库去获取并下载MySQL镜像,然后启动运行MySQL镜像,生成Container容器,MySQL运行成功。因为每个容器是相互隔离的,所以,多运行几次,便会生成多个互相独立的MySQL容器。
五、docker应用镜像安装运行–命令解读
六、docker常用指令
七、docker常用指令演示(以nginx安装为例)
- ①搜索Nginx镜像
Dockerhub镜像仓库
搜索镜像,了解镜像详情及配置。
- ②拉取Nginx镜像
// 拉取nginx镜像,这里也可以在nginx:[版本]指定版本
//格式: docker pull 镜像名
docker pull nginx
- ③查看镜像
// 查看当前系统已经pull拉取的所有镜像
docker images
④保存镜像为tar文件
//查看命令help帮助
docker save --help
// -o 文件名 镜像名,是将当前镜像保存为一个本地文件,通常保存为tar压缩文件
//格式:docker save -o 文件名 镜像名[:版本]
docker save -o nginx.tar nginx
- ⑤删除本地镜像
//删除本地镜像
//格式:docker rmi 镜像名[:版本]
docker rmi nginx:latest
- ⑥加载本地镜像tar包
//了解docker load 命令help帮助
docker load --help
//-i 镜像tar包,-i后面是镜像tar包;-q 是指不要加载输出
docker load -i nginx.tar -q
- ⑦创建容器并运行镜像
//运行镜像
//-d指后台运行;--name 指定当前容器名称;
//-p 指定端口映射,前面是宿主机端口(可随意),后面是应用默认端口(固定的)
//格式:docker run -d --name 镜像名 -p 宿主机端口:应用端口 镜像名
docker run -d --name nginx -p 8081:80 nginx
上面显示容器端口占用报错和容器名重复报错,只需要把当前容器删除从新命名即可,指令是【docker rm -f 镜像名】。
- ⑧查看容器
//查看正常运行容器
docker ps
docker ps -a //查看所有容器
//可以格式化查看的内容
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
- ⑨删除容器
//删除容器
//格式:docker rm 容器名
//-f 可以强制删除正在运行的容器
docker rm dockerNginx
docker rm -f dockerNginx
- ⑩停止容器
//格式:docker stop 容器名,停止容器
docker stop dockerNginx
- ⑪启动容器
//格式:docker start 容器名,启动容器
docker start dockerNginx
nginx运行成功直接访问该端口:
- ⑫查看容器详情
//格式:docker inspect 容器名
docker inspect dockerNginx
- ⑬查看容器运行日志
//格式:docker logs [-f] 容器名,-f表示follow一直跟踪日志,ctrl + c结束
docker logs
* ⑭进入容器内部
//格式:docker exec -it 镜像名 bash,进入容器内部,
//-it即开启一个终端用以交互,bash是命令行终端模式
docker exec -it nginx bash
八、docker命令别名
# 修改/root/.bashrc文件,添加相关docker命令简写:
vi /root/.bashrc
内容如下:
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
保存退出,命令是 :wq!回车
使得命令生效:
//执行下面命令,使得命令简写生效
source /root/.bashrc
九、数据卷
十、制作镜像(自定义)
十一、Docker容器网络互通
java应用访问其他中间件容器,如MySQL、Redis等。容器的 IP 是虚拟的,所以不能在项目中固定写。如何解决这个问题呢?可以去查看下面这个文章。
十二、dockerCompose
引用他人:
https://blog.csdn.net/m0_37899908/article/details/131268835;