it编程 > 编程语言 > Java

SpringCloud微服务 【实用篇】| Docker镜像、容器、数据卷操作

36人参与 2024-07-28 Java

目录

一:docker基本操作

1. 镜像操作

镜像相关命令

2. 容器操作

容器相关命令

3. 数据卷(容器数据管理)

数据卷

操作数据卷

挂载数据卷

挂载的方式区别


一:docker基本操作

1. 镜像操作

镜像相关命令

镜像的命名规范

镜像操作命令:crud

①获取镜像的方式有两种:

②想知道本地有哪些镜像,使用docker images命令查看镜像。这里image理解为镜像的意思。

③使用docker rmi命令删除镜像,rmi是remove image的缩写。

④分享镜像的两种方式:

⑤也可以使用docker --help命令查看帮助文档

案例1:从dockerhub中【拉取】一个nginx镜像并【查看】

第一步:去镜像仓库搜索nginx镜像,比如dockerhub

第二步:根据查看到的镜像名称,拉取自己需要的镜像

通过命令docker pull nginx拉取,没指定版本号就是最新版本

第三步:通过命令docker images 查看拉取到的镜像

案例2:利用docker save将nginx镜像导出磁盘,然后再通过load加载回来

步骤一:利用docker 命令 --help命令查看docker save和docker load的语法

docker save --help查看命令,o压缩包的名称


 

docker load --help查看命令,i参数会打印日志,q参数不会打印日志

步骤二:使用docker save导出镜像到磁盘

docker save -o nginx.tar nginx:lastest

步骤三:使用docker load加载镜像

 首先先删除原来的镜像,可以根据 镜像名称+版本号 或者 镜像id 进行删除

docker rmi -f  镜像名称:版本号 # -f参数表示删除正在运行的镜像

加载压缩包为镜像

docker load -i nginx.tar

2. 容器操作

容器相关命令

创建容器比较常用的命令就是docker run,不仅仅可以创建容器,还可以让容器处于运行状态---三大状态之一。

②三大状态之二就是暂停状态,使用docker pause命令,让容器处于暂停状态。要想恢复到运行状态,使用docker unpause命令。

③三大状态之二就是停止状态,使用docker stop命令,从停止恢复运行使用docker start命令。

tip:暂停和停止的区别,为什么暂停可以使用pause和unpause;而stop确不使用unstop?

④使用docker ps命令可以查看当前所有运行的容器及状态docker logs命令查看容器运行日志docker exec命令可以进入容器的内部

⑤使用docker rm 可以删除指定容器

案例1:创建运行一个nginx容器

docker hub查看nginx的容器运行命令,以下命令为例:

docker run --name some-nginx -d -p 8080:80 some-content-nginx

*docker run :创建并运行一个容器;

*--name:给容器起一个名字;

*-p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口(可以随意改变),右侧是容器端口;作用是让本来完全隔离的容器暴露一个窗口,让外界进行访问;

*-d:后台运行容器

*some-content-nginx:镜像名称,例如nginx

解释:端口映射

创建并运行容器

查看容器的状态:docker ps

访问nginx

# 前面是虚拟机的ip,后面是我们指定的端口
192.168.2.129:81

查看容器的日志信息

docker logs -f 容器名称 # -f 表示持续更新查看日志

案例2:进入nginx容器,修改html文件内容,添加“北京欢迎您”

进入我们刚刚创建的nginx容器

docker exec -it mn bash # bash表示使用linux命令操作

*docker exec :进入容器内部,执行一个命令;

*-it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互 ;

*mn :要进入的容器的名称 ;

*bash:进入容器后执行的命令,bash是一个linux终端交互命令;

进入容器内部

查看nginx在那个目录,就需要查看dockerhub,静态页面的文件夹/usr/share/nginx/html

cd /usr/share/nginx/html

找到index.html

镜像只是封装必要的函数库,对于vim命令没有封装不能使用,使用sed命令进行修改

sed -i 's#welcome to nginx#北京欢迎您#g' index.html # 替换原始的标签
sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html #支持中文

再次去访问:成功替换

使用exit退出容器,然后停掉容器

docker stop 容器名称

 此时查看容器的状态

docker ps -a # 默认是只能查看正在运行的容器,-a表示查看所有(包括停掉的)

要想在启动,使用

docker start 容器名称

此时在删除容器

docker rm -f 容器名称

案例3:创建并运行一个redis容器,并且支持数据持久化,进入redis容器,并执行redis-cli客户端命令,存入num=666

创建并运行容器

docker run --name mr -p 6379:6379 -d redis --appendonly yes #aof模式的持久化

进入容器内部并连接redis

存入数据

查看容器状态:

docker ps 添加 -a 参数查看所有状态的容器; 

删除容器:

docker rm 不能删除运行中的容器,除非添加 -f 参数; 

进入容器:

命令是docker exec -it [容器名] [要执行的命令] ;exec命令可以进入容器修改文件,但是在容器内修改文件是不推荐的:第一点不方便,连vim命令都没有,第二点:在容器中进行修改是没有任何记录的。

3. 数据卷(容器数据管理)

容器与数据耦合的问题

数据卷

数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。

注:相当于通过数据卷进行容器和宿主机的文件建立了联系!就不要进入容器内部修改了!

数据卷的作用: 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全!

操作数据卷

数据卷操作的基本语法如下:

docker volume [command] # 二级命令,后面才是真正的操作数据卷的命令

docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:

案例1:创建一个数据卷,并查看数据卷在宿主机的目录位置

创建一个数据卷

docker volume create 数据卷名称 # 创建一个数据卷

查看数据卷

docker volume ls # 列出所有的数据卷
docker volume inspect 数据卷名称 # 查看某个数据卷的详细信息

删除数据卷

docker volume prune # 删除所有未使用的数据卷
docker volume rm 数据卷名称 # 删除某个指定的数据卷

挂载数据卷

首先创建好数据卷,在运行容器时,可以通过 -v 参数来挂载一个数据卷到某个容器目录

docker run --name mn -p 88:80 -v html:/root/html -d nginx

*docker run :就是创建并运行容器

*-- name mn :给容器起个名字叫mn

*-v html:/root/htm :把html数据卷挂载到容器内的/root/html这个目录中

*-p 8080:80 :把宿主机的88端口映射到容器内的80端口

*nginx :镜像名称

案例1:创建一个nginx容器,修改容器内的html目录内的index.html内容

步骤一:创建容器并挂载数据卷到容器内的html目录

docker run --name mn -p 88:80 -v html:/usr/share/nginx/html -d nginx

步骤二:进入html数据卷所在的位置,并修改html内容

docker volume inspect html # 查看数据卷所在的位置
cd //var/lib/docker/volumes/html/_data # 进入数据卷所在的目录
ls # 查看目录下的文件,nginx文件会被同步过来
vim index.html # 可以使用vim命令进行修改

数据卷挂载方式: -v 数据卷名称: /容器的目标目录, 如果容器运行时volume不存在,会自动被创建出来!所以以后就没有必要刻意的去创建数据卷!

案例二:创建并运行一个mysql容器,将宿主机目录直接挂载到容器

提示:目录挂载与数据卷挂载的语法是类似的:

第一步:从dockerhub拉取myql的镜像

docker pull mysql

也可以加载已经下载好的压缩包,把压缩包上传到一个目录,例如tmp目录,然后执行load命令

docker load -i mysql.tar # 把压缩包加载为镜像

第二步:创建两个目录

mkdir -p /tmp/mysql/data # 创建mysql存储数据的目录,-p表示递归创建
mkdir -p /tmp/mysql/conf # 创建mysql配置目录,并把mysql的配置文件传进去

第三步:运行mysql容器

docker run --name mysql -p 3306:3306 -e mysql_root_password=123456 \ # 设置密码
 -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \ # 挂载配置文件
 -v /tmp/mysql/data:/var/lib/mysql \ #挂载数据目录
 -d  mysql:5.7.25 

挂载的方式区别

(0)

您想发表意见!!点此发布评论

推荐阅读

02-微服务-Eureka注册中心

07-28

Docker入门教程

07-28

Docker容器

07-28

云原生微服务治理 第四章 Spring Cloud Netflix 服务注册/发现组件Eureka

07-28

Eureka使用详解,看这篇就够了,超详细,很香!!!

07-28

Docker容器及镜像打包操作指南

07-28

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论