重生之我在暑假学习微服务第四天《Docker-下篇》

目录

​编辑

一、Docker常见命令

1、先连接上我们的centos7

2、拉取jnginx

3、镜像操作

(1)保存镜像

(2)删除镜像

(3)下载镜像

4、容器操作

(1)将nginx运行到容器中

(2)查看运行中的容器

(3)简化输出格式

a.先打开这个文件

b.开始对文件进行修改

c.让文件生效

d.测试

[(4) 停止容器运行](#(4) 停止容器运行)

(5)查看所有容器

(6)启动容器

(7)查看日志

[​编辑 (8)进入容器内部](#编辑 (8)进入容器内部)

(9)进入mysql容器

(10)删除容器

二、数据卷

1、创建数据卷

2、查看数据卷

3、查看数据卷详情

4、本地挂载

(1)先查看容器是否挂载数据卷

(2)先创建mysql的本地存储目录

(3)删除mysql容器

(4)开始创建mysql

三、自定义镜像

1、先下载jre

2、准备一个文件夹存放java打包后的jar包

[3、 准备好Dockerfile文件](#3、 准备好Dockerfile文件)

4、开始创建镜像

四、网络

1、添加一个自定义的网络

2、容器连接网络

结语


一、Docker常见命令

1、先连接上我们的centos7

启动虚拟机中的centos7,输入账号密码

启动MobaXterm

这样就连接成功了

先去简单的看一下这个图片

2、拉取jnginx

这里默认拉取的是最新版本

拉取nginx:

复制代码
 docker pull nginx

查看容器中的镜像:

复制代码
docker images

这个单词可以理解为镜像

这样就代表成功了

这里如果失败了那应该就是配置文件的问题,可以参考上篇文章配置一下加速器

重生之我在暑假学习微服务第三天《Docker-上篇》-CSDN博客

3、镜像操作

(1)保存镜像

复制代码
docker save -o nginx.tar nginx:latest
  • docker save:Docker 提供的子命令,用于将一个或多个镜像保存到归档文件中。
  • -o nginx.tar-o--output 参数指定输出文件的名称。这里将文件命名为 nginx.tar
  • nginx:latest:指定要保存的镜像名称及标签(latest 是标签,表示最新版本)。

保存后可以运行ll查看下

(2)删除镜像

复制代码
docker rmi nginx:latest
  • docker rmi 是 Docker 的删除镜像命令。
  • nginx:latest 指定要删除的镜像名称及标签,latest 是默认标签。

删除后再次查看仓库可以看到nginx没了

(3)下载镜像

除了直接拉取也可以从本地下载,刚才不是保存过一个nginx.tar包吗

再给它下载过来不得了

复制代码
docker load -i nginx.tar

4、容器操作

(1)将nginx运行到容器中

也就是这个地方对应的指令

复制代码
docker run -d --name nginx -p 80:80 nginx
  • docker run

    启动一个新的容器实例。

  • -d

    以"后台模式"(detached mode)运行容器,即容器在后台运行,不占用当前终端。

  • --name nginx

    为容器指定一个名称 nginx,方便后续管理(如停止、重启等)。

  • -p 80:80

    端口映射,格式为 主机端口:容器端口

    • 主机的 80 端口会映射到容器的 80 端口,使得外部可通过 http://localhost 或服务器 IP 访问 Nginx。
  • nginx

    使用的镜像名称(默认从 Docker Hub 拉取最新版 nginx)。

(2)查看运行中的容器

复制代码
docker ps

(3)简化输出格式

a.先打开这个文件
复制代码
vi ~/.bashrc
b.开始对文件进行修改

加入这两行命令就行,前面是简写,也可以自行添加自己常用的命令

复制代码
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'
c.让文件生效
复制代码
source ~/.bashrc
d.测试

修改后要重新运行source ~/.bashrc才会生效

这样就成功了

(4) 停止容器运行

复制代码
docker stop nginx

(5)查看所有容器

在dps后面加一个-a就行了

(6)启动容器

复制代码
docker start nginx

(7)查看日志

(8)进入容器内部

先进入一下nginx容器

复制代码
docker exec -it nginx bash

可以看到这里变成了容器的id,说明进入成功了

可以查看一下当前目录下的所有文件

(9)进入mysql容器

ok,启动成功

(10)删除容器

复制代码
docker rm mysql

如果容器正在运行可以在后面加一个-f,这里就不演示了

二、数据卷

这里说一下我的理解,数据卷大概就是你可以通过你的主机来操作Docker中的nginx容器中的文件,也就是通过数据卷这一中间件来实现交互的功能。

1、创建数据卷

容器挂载数据卷的时候要创建的时候挂载,所以这里要先删除之前的容器

运行这一命令就行了

复制代码
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx

-d

以"分离模式"(detached mode)运行容器,即容器在后台运行,不占用当前终端。

--name nginx

为容器指定一个名称 nginx,方便后续通过名称管理容器(如启动、停止等)。

-p 80:80

将主机的 80 端口映射到容器的 80 端口。格式为 主机端口:容器端口,使得外部可以通过主机的 80 端口访问 Nginx 服务。

-v html:/usr/share/nginx/html

创建一个名为 html 的 Docker 卷,并将其挂载到容器的 /usr/share/nginx/html 目录。该目录是 Nginx 默认的静态文件存放路径。

  • 如果 html 卷不存在,Docker 会自动创建。
  • 使用卷的好处是数据持久化,即使容器删除,卷中的数据仍会保留。

这样就表示成功了

2、查看数据卷

复制代码
docker volume ls

可以看到刚才创建的html成功了

3、查看数据卷详情

复制代码
docker volume inspect html

这里应该就是挂载成功了

果然成功了,访问出来了nginx的欢迎页面

测试一下修改宿主机能否更改容器中的html

修改成功!!!

测试一下图片能否展示出来(这里就随便找一张图片了)

访问成功了 !!!

检查一下nginx中的文件

可以看到nginx和宿主机文件一样

4、本地挂载

(1)先查看容器是否挂载数据卷

先运行:docker inspect nginx

可以看到卷名是:html,宿主机和nginx的地址都在这

这里我们的mysql并没有配置过数据卷,所以系统会默认给我们生成一个

这个名字太复杂了不方便我们的后续操作

(2)先创建mysql的本地存储目录

直接创建在root/mysql下面就行了

(3)删除mysql容器

不知道那个多余的是否有影响

(4)开始创建mysql

复制代码
# 运行指令:
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
mysql

这样就成功了

看是否连接成功了

这里不会连接的可以看一下上篇文章:重生之我在暑假学习微服务第三天《Docker-上篇》-CSDN博客

这里忘记说了,在连接数据库之前可以先自己创建一个表测试一下

将自己创建的表的sql语句放data里面用于检测连接

成功后如下图

三、自定义镜像

镜像通常由多层(Layers)组成,每一层包含文件系统的变更记录。这些层是只读的,最终通过联合文件系统(如 OverlayFS、AUFS)合并成一个可用的文件系统视图。

1、先下载jre

这里的jre可以用原本自己电脑上面的

2、准备一个文件夹存放java打包后的jar包

3、 准备好Dockerfile文件

cpp 复制代码
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

4、开始创建镜像

可以看到镜像创建成功了 ,同时也启动成功了

可以看到访问成功了

四、网络

为了让所有容器能够互相访问,所以加入自定义网络来确保容器间更好的连接

常用指令如下:

1、添加一个自定义的网络

可以通过ip address来查看一下,这里可以发现我们的网络创建成功了。

2、容器连接网络

可以看到连接成功

可以看到aaa镜像也配置成功了

可以看到aaa可以连接到数据库

这里连接nginx失败了,因为不在同一个网段下

结语

Docker 篇的内容更新还差最后一个项目部署环节啦~ 我计划明天专门更新这部分内容,把步骤拆解得更细致、逻辑梳理得更顺畅,这样大家看起来也能一目了然,跟着操作时也会更清晰省力~ 敬请期待哦~

相关推荐
青云交15 分钟前
「源力觉醒 创作者计划」_文心大模型 4.5 开源 28 天:从车间轴承到山村课堂的 AI 突围
java·模型微调·工业质检·文心 4.5·开源 ai·中小企业 ai·乡村教育
正在走向自律18 分钟前
企业微信API接口发消息实战:从0到1的技术突破之旅
java·数据库·企业微信·accesstoken·agentid·corpid·企业微信发消息
Mr Aokey1 小时前
破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践录
java·spring boot·mybatis
RaLi和夕1 小时前
单片机学习笔记.AD/DA(略含有SPI,用的是普中开发板上的XPT2046芯片)
c语言·笔记·单片机·嵌入式硬件·学习
MingYue_SSS1 小时前
USB电源原理图学习笔记
笔记·嵌入式硬件·学习
咚咚?1 小时前
电子签章(PDF)
java·pdf
典孝赢麻崩乐急1 小时前
Redis学习------缓存穿透
redis·学习·缓存
啊阿狸不会拉杆1 小时前
《Java 程序设计》第 11 章 - 泛型与集合
java·开发语言·jvm·数据结构·算法
饭碗、碗碗香2 小时前
【vLLM学习笔记】:vLLM 参数说明
人工智能·笔记·学习·ai
fouryears_234175 小时前
适配器模式——以springboot为例
java·spring boot·适配器模式