- 个人主页:VON
- 文章所属专栏:微服务
- 系列文章链接:
- 重生之我在暑假学习微服务第一天《MybatisPlus-上篇》-CSDN博客
- 重生之我在暑假学习微服务第二天《MybatisPlus-下篇》-CSDN博客
- 重生之我在暑假学习微服务第三天《Docker-上篇》-CSDN博客
- 时间:每天12点前准时更新
特别声明:本篇文章对应黑马程序员微服务课程P25-P34
目录
[(4) 停止容器运行](#(4) 停止容器运行)
[编辑 (8)进入容器内部](#编辑 (8)进入容器内部)
[3、 准备好Dockerfile文件](#3、 准备好Dockerfile文件)
一、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 篇的内容更新还差最后一个项目部署环节啦~ 我计划明天专门更新这部分内容,把步骤拆解得更细致、逻辑梳理得更顺畅,这样大家看起来也能一目了然,跟着操作时也会更清晰省力~ 敬请期待哦~