docker安装帮助文档地址:https://docs.docker.com/engine/install/centos/
告诉自己:高级开发重金难求,低级开发满大街都是。
一、基础
1.Docker概述(2023.04.17)
传统部署:程序员开发项目-》打包成jar包-》给运维人员部署-》线上环境依赖需要一个个部署。
在容器技术未出来之前,我们都是使用虚拟机技术(在Windows系统中安装一个Vmware,通过这个软件可以虚拟出来一台或多台电脑,好处是虚拟出来的电脑跟真实电脑差不多,但是它相当占用内存资源)
模拟电脑虚拟机技术核心区块划分示例图:
虚拟机技术缺点:
- 资源占用率十分高
- 冗余步骤多
- 启动很慢
docker部署:程序员开发项目-》打包成jar包(携带docker环境部署镜像信息)-》运维直接根据携带的docker镜像信息直接部署启动项目。
便捷之处:
- 镜像就包含所有环境依赖内容,十分轻巧,可直接启动,省时省力.(原因:使用容器化技术)
容器化技术:容器化技术不是模拟一个完整的操作系统。
比较docker和虚拟机技术的不同:
- 传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。
- 容器内的应用直接运行在宿主机的内部,容器是没有内核的,也没有虚拟我们的硬件。所以很轻便。
- 每个容器间是相互隔离的,每个容器内都有一个属于自己的文件系统,互不影响。
使用容器化技术有什么优点:
- 应用更快的交付与部署
- 更便捷的升级和扩缩容
- 更简单的运维系统
- 更高效的计算资源利用
2.Docker安装
2.1.docker架构图
2.2.docker核心名词了解
镜像(image):
docker镜像好比一个模板,可以通过这个模板来创建容器服务(Tomcat镜像-》run-》Tomcat01容器),通过这个镜像可以创建多个容器,最终服务运行或项目运行都是在容器中。
容器(container):
Docker利用容器技术,独立运行一个或者一个组应用。包含启动、停止、删除等基本命令。(可以把容器理解为一个简易的Linux系统)
仓库(repository):
仓库是存放镜像的地方。分为公有仓库和私有仓库。
2.3.环境准备
- 需要有购买的云服务器一台
- 使用类似XShell连接云服务器操作
2.4.版本查看
系统内核是3.10以上
// 输入指令:uname -r
4.18.0-348.7.1.el8_5.x86_64
系统版本
// 输入指令:cat /etc/os-release
NAME=“CentOS Linux”
VERSION=“8 (Core)”
ID=“centos”
ID_LIKE=“rhel fedora”
VERSION_ID=“8”
PLATFORM_ID=“platform:el8”
PRETTY_NAME=“CentOS Linux 8 (Core)”
ANSI_COLOR=“0;31”
CPE_NAME=“cpe:/o:centos:centos:8”
HOME_URL=“https://www.centos.org/”
BUG_REPORT_URL=“https://bugs.centos.org/”
CENTOS_MANTISBT_PROJECT=“CentOS-8”
CENTOS_MANTISBT_PROJECT_VERSION=“8”
REDHAT_SUPPORT_PRODUCT=“centos”
REDHAT_SUPPORT_PRODUCT_VERSION=“8”
2.5.安装
docker安装帮助文档地址:https://docs.docker.com/engine/install/centos/
2.5.1.卸载旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.5.2.下载安装包
yum install -y yum-utils
2.5.3.设置镜像地址
推荐使用阿里云镜像配置:
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
默认是从国外的,下载速度会非常慢(不建议使用这种方式
):
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
2.5.4.更新yum软件包索引
yum makecache fast
2.5.5.安装dokcer(docker-ce社区版-免费,ee企业版)
yum install docker-ce docker-ce-cli containerd.io
2.5.6.启动docker
systemctl start docker
2.5.7.判断是否安装启动成功
docker version
2.5.8.下载镜像hello-world案例
docker run hello-world
docker run hello-world
命令运行流程图:
docker是怎么工作的?(底层原理)
2.5.9.查看当前服务器镜像
docker images
2.6.删除docker
2.6.1.删除依赖
yum remove docker-ce docker-ce-cli containerd.io
2.6.2.删除资源
rm -rf /var/lib/docker
3.Docker命令
帮助文档地址:https://docs.docker.com/engine/reference/commandline/
3.1.帮助命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令
3.2.镜像命令
docker images #查看所有本机上的镜像
docker images -a #列出所有镜像
docker images -aq #列出所有镜像id
docker search mysql #搜索镜像(mysql)
docker pull mysql #下载镜像(mysql,默认下载最新版本)
docker pull mysql:5.7 #下载镜像(mysql,指定版本下载)
docker rmi -f 镜像id #删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id 镜像id #删除多个镜像
docker rmi -f $(docker images -aq) #删除全部镜像
systemctl restart docker #重启docker镜像
a
==> all(所有-镜像)
q
==> query id(查询id)
rmi
==> remove image(删除镜像)
f
==> file(文件)
3.3.容器命令
说明:我们有了镜像才可以创建容器,Linux环境下下载一个centos镜像来测试学习
docker pull centos #下载centos镜像
docker run -it centos /bin/bash #测试,启动并进入容器
exit #从容器中退回主机(停止容器)
Ctrl + P + Q #退出容器不停止
docker ps #查看运行中的容器
docker rm 容器id #删除指定容器id,不能删除正在运行的容器,如果要强制删除,使用docker rm -f $(docker ps -aq)
docker rm -f $(docker ps -aq) #删除所有容器
docker ps -a -q|xargs docker rm #删除所有容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前正在运行的容器
docker logs -tf --tail 10 容器id #显示某个容器的最近10条日志
docker logs -tf --tail 10 容器id #显示某个容器的最近10条日志
docker top 容器id #查看容器中的进程信息
docker inspact 容器id #查看容器的元数据信息(所有容器相关数据)
docker exec -it 容器id /bin/bash #进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach 容器id #进入容器正在执行的终端,不会启动新的进程,无法在里面操作(少用)
touch test.java #在容器中新建文件
docker cp 容器id:/文件路径/文件名.后缀 /主机文件路径/文件名.后缀 #文件从容器中拷贝到主机中
docker cp /主机文件路径/文件名.后缀 容器id:/文件路径/文件名.后缀 #文件从主机中拷贝到容器中
cd mnt #进入jar服务所在父文件目录
java -jar jar包名.jar & #在容器中启动jar服务(服务后台运行)
ps -aux|grep java #查询当前容器中运行的进程信息
kill -9 进程id #终止某个进程
tail -f nohup.out #实时查看控制台日志信息
tail -n 500 nohup.out #查看最新控制台500行日志信息
it
==> 使用交互方式运行(即,可输入指令、会自动执行输入指令功能)
d
==> 后台方式运行
p
==> 主机端口和容器内的端口映射(例如:-p 8084:8080 => 8084为外网可访问端口,8080项目启动实际运行端口。这样处理的好处是,当你容器内的端口被其他服务使用了,可以映射一个未被使用的端口号)
tf
==> time-fomat,加上这个,日志显示就会加上时间戳(如:2023-04-23T13:23:05.961372171Z)
--tail number
==> 要显示的日志条数
&
==> 服务后台运行,不会因为当前控制台退出而结束
创建复杂的镜像:
docker run -itd
–privileged
-p 8086:8080
-p 33081:3306
–name test2