当前位置: 首页 > news >正文

【Docker】——在Docker工具上安装创建容器并完成项目部署

🎼个人主页:【Y小夜】

😎作者简介:一位双非学校的大三学生,编程爱好者,

专注于基础和实战分享,欢迎私信咨询!

🎆入门专栏:🎇【MySQL,Java基础,Rust】

🎈热门专栏:🎊【Python,Javaweb,Springboot】 

感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️

目录

🎈安装MySQL

🎈启动MySQL

🎈卸载MySQL 

🎈安装nginx

🎈数据卷

🎃引入

🎃概念

🎃相关命令

🎈MySQL数据卷挂载

🎃本地目录挂载

🎈制作自己的镜像

🎃Dockerfile

 🎃构建镜像

🎈网络

🎃自定义网络

🎈项目部署

🎃部署后端

🎃部署前端

🎈DockerCompose


🎈安装MySQL

执行拉取命令

docker pull mysql

但可能出现以下错误

Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded (Client.Timeout exceeded while awaiting headers)

解决方法:

更换镜像源即可

1.修改/etc/docker/daemon.json文件,没有的新建即可

vim /etc/docker/daemon.json

 2、添加如下配置

{"registry-mirrors": ["https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com","https://docker.m.daocloud.io","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://your_preferred_mirror","https://dockerhub.icu","https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc"]
}

3、重新加载配置文件

systemctl daemon-reload

4、重启docker服务

systemctl restart docker

重新运行拉去命令,然后等待即可

 查看是否安装完成

docker images

🎈启动MySQL

docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql

参数说明:

  • -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
  • MYSQL_ROOT_PASSWORD=root:设置 MySQL 服务 root 用户的密码。

 然后使用

docker ps -a

进行查看进程

进入MySQL 

docker exec -it MySQL的名字 bash
mysql -uroot -p

输入密码,这样就成功了 

要是刚进入时,应该使用

 docker start 名字

进行启动工具。 

将镜像保存到本地命令

docker sava -o 保存名字.rar 镜像名

 加载本地镜像到docker中

docker load -i 本地名称

🎈卸载MySQL 

首先查看在docker上运行的工具

docker ps -a

 使用命令移除

 docker rm  mysql名字

再次运行

 docker rm  mysql-test

 然后再移除mysql镜像即可

docker rmi mysql

使用命令查看docker中的镜像

docker images

 

这样就代表MySQL卸载成功了。

🎈安装nginx

docker pull nginx
docker run -d --name nginx -p 80:80 nginx

-d参数表示后台运行

--name 设置镜像名称 

查询日志:

 docker logs nginx

进入容器内部

 docker exec -it 容器名 bash

 

-it 产生一个可交互的终端。

🎈数据卷

🎃引入

进入容器中

docker exec -it nginx bash

进入以下目录

cd /usr/share/nginx/html

执行修改命令

发现根本没有vi命令,这是因为docker只包含镜像运行必备的命令,所以需要使用数据卷解决。

🎃概念

数据卷:是一个虚拟目录,是容器内目录和宿主机目录之间的映射的桥梁。

例如:

🎃相关命令

我们可以使用该命令查询相关数据券指令

docker volume --help

例子:利用nginx容器部署静态资源:

提示:1.要在容器创建的时候进行挂载,如果容器已经创建完成了,就没有办法挂载。

2。在创建容器时。如果挂载了数据券且数据券不存在,会自动创建。

我们先将nginx进行删除

docker rm -f nginx

在进行创建

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

在执行docker run命令时,使用-v 数据券:容器内目录 可以完成数据券挂载。

 使用命令查看数据券

docker volume ls

查看详情

docker volume inspect html

进入目录看一下

cd /var/lib/docker/volumes/html/_data

 然后带点击可视化工具的按钮

直接对文件进行修改(在命令行中使用vim命令修改也可以)

我们去访问一下,看看是否可以

修改完成。

🎈MySQL数据卷挂载

要求:

首先我们先查看安装的容器,看是否有数据卷

docker inspect nginx

docker inspect mysql-test

发现,默认会产生数据卷挂载(匿名卷)

  但是,当删除这个容器时,数据卷没有被删除

可数据卷的目录结构较深,如果我们去操作数据卷目录会不太方便。在很多情况下,我们会直接将容器目录与宿主机指定目录挂载。挂载语法与数据卷类似:

# 挂载本地目录
-v 本地目录:容器内目录
# 挂载本地文件
-v 本地文件:容器内文件

注意:本地目录或文件必须以 /./开头,如果直接以名字开头,会被识别为数据卷名而非本地目录名。

例如:

-v mysql:/var/lib/mysql # 会被识别为一个数据卷叫mysql,运行时会自动创建这个数据卷
-v ./mysql:/var/lib/mysql # 会被识别为当前目录下的mysql目录,运行时如果不存在会创建目录

🎃本地目录挂载

删除原来的MySQL容器

docker rm -f mysql

进入root目录

cd ~

 创建并运行新mysql容器,挂载本地目录

docker run -d \
>   --name mysql \
>   -p 3306:3306 \
>   -e TZ=Asia/Shanghai \
>   -e MYSQL_ROOT_PASSWORD=123 \
>   -v ./mysql/data:/var/lib/mysql \
>   -v ./mysql/conf:/etc/mysql/conf.d \
>   -v ./mysql/init:/docker-entrypoint-initdb.d \
>   mysql

查看root目录,可以发现~/mysql/data目录已经自动创建好了

ls -l mysql

🎈制作自己的镜像

        镜像就是一堆文件的集合:但需要注意的是,镜像文件不是随意堆放的,而是按照操作的步骤分层叠加而成,每一层形成的文件都会单独打包并标记一个唯一id,称为Layer)。这样,如果我们构建时用到的某些层其他人已经制作过,就可以直接拷贝使用这些层,而不用重复制作。

🎃Dockerfile

指令

说明

示例

FROM

指定基础镜像

FROM centos:6

ENV

设置环境变量,可在后面指令使用

ENV key value

COPY

拷贝本地文件到镜像的指定目录

COPY ./xx.jar /tmp/app.jar

RUN

执行Linux的shell命令,一般是安装过程的命令

RUN yum install gcc

EXPOSE

指定容器运行时监听的端口,是给镜像使用者看的

EXPOSE 8080

ENTRYPOINT

镜像中应用的启动命令,容器运行时调用

ENTRYPOINT java -jar xx.jar

 🎃构建镜像

例如:

docker build -t docker-demo:1.0 .
  • docker build : 就是构建一个docker镜像

  • -t docker-demo:1.0-t参数是指定镜像的名称(repositorytag

  • . : 最后的点是指构建时Dockerfile所在路径,由于我们进入了demo目录,所以指定的是.代表当前目录,也可以直接指定Dockerfile目录:

当在dockerfile中需要下载Docker基础

这里我直接上传tar包(jdk镜像)

使用命令让它变为自己的镜像

docker load -i jdk.tar

使用命令查看

docker images

 

 进行构建

docker build -t docker-demo .

运行镜像(-d参数代表后台运行)

docker run -d --name dd -p 8080:8080 docker-demo

查看日志

docker logs -f dd

到浏览器里面访问一下,发现访问成功!

🎈网络

当我们查看容器详情时,发现网络

docker inspect mysql


我们进入dd容器内

docker exec -it dd bash

然后ping一下ip

        但是,容器的网络IP其实是一个虚拟的IP,其值并不固定与某一个容器绑定,如果我们在开发时写死某个IP,而在部署时很可能MySQL容器的IP会发生变化,连接会失败。

🎃自定义网络

命令

说明

文档地址

docker network create

创建一个网络

docker network create

docker network ls

查看所有网络

docs.docker.com

docker network rm

删除指定网络

docs.docker.com

docker network prune

清除未使用的网络

docs.docker.com

docker network connect

使指定容器连接加入某网络

docs.docker.com

docker network disconnect

使指定容器连接离开某网络

docker network disconnect

docker network inspect

查看网络详细信息

docker network inspect

 首先通过命令创建一个网络

docker network create hmall

然后查看网络

docker network ls

 

让dd和mysql都加入该网络

docker network connect hmall mysql

 

docker network connect hmall dd

进入容器

docker exec -it dd bash

ping一下

ping mysql

总结

  • 在自定义网络中,可以给容器起多个别名,默认的别名是容器名本身

  • 在同一个自定义网络中的容器,可以通过别名互相访问

🎈部署HTML前端基础版

先将压缩包上传到页面中,然后开始解压缩到目录中

unzip  zndw.zip

 然后将我们的

(前提是Nginx已经下载好了)

docker stop $(docker ps -q)

 然后开始运行一段代码(记得构建数据卷)

docker run -d -p 80:80 -v /root/zndw:/usr/share/nginx/html nginx:alpine

然后使用命令查看一下,正在运行的容器

docker ps

 最后我们直接通过网址就行访问,比如,

http://100.116.103.26/login.html

 发现我们访问成功了。

🎈项目部署

🎃部署后端

(这里使用黑马商城举例子)

先使用idea打开,设置一下配置

这里已经有了dockerfile文件

接下来进行打包

然后发现打包完成

 将jar包和dockerfile文件放入虚拟机中

然后对镜像进行构建

docker build -t hmall .

查看一下所有的镜像

进行运行

docker run -d --name hmall --network hmall -p 8080:8080 hmall

查看日志:

docker logs -f hmall

访问一下,访问成功

🎃部署前端

要求:创建一个nginx.conf 、html目录与容器挂载

先上传Nginx文件

创建nginx容器并完成两个挂载:

  • /root/nginx/nginx.conf挂载到/etc/nginx/nginx.conf

  • /root/nginx/html挂载到/usr/share/nginx/html

docker run -d \--name nginx \-p 18080:18080 \-p 18081:18081 \-v /root/nginx/html:/usr/share/nginx/html \-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \--network hmall \nginx

 接下来我们通过浏览器去进行访问,http://你的虚拟机ip:18080

访问成功

我们查一下日志

docker logs -f hmall

试一下搜索功能是否可以连上后端,发现可以搜索到数据库中的数据

输出日志:

🎈DockerCompose

Docker Compose 通过一个单独的Docker-compose.yml模版文件(YAML格式) 来定义一组相关的应用容器,帮助我们实现多个关联的Docker容器的快速部署。

进行描述一个项目内的多个服务(稍微复杂的项目,其中还会有各种各样的其它中间件,需要部署的东西远不止3个。如果还像之前那样手动的逐一部署,就太麻烦了。

        Docker Compose就可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。

docker run 参数

docker compose 指令

说明

--name

container_name

容器名称

-p

ports

端口映射

-e

environment

环境变量

-v

volumes

数据卷配置

--network

networks

网络

相关文章:

  • Flink HA 总结
  • 人工智能大语言模型与AI芯片新进展:技术演进与商业化路径
  • 【3D基础】深入解析OBJ与MTL文件格式:Blender导出模型示例及3D开发应用
  • 【Linux】第十二章 安装和更新软件包
  • deepseek对IBM MQ SSL 证书算法的建议与解答
  • 自动驾驶L4级技术落地:特斯拉、Waymo与华为的路线之争
  • [三分钟]web自动化测试(三):selenium自动化测试常用函数(下)
  • 突破JVM边界:类加载三重门与栈帧的生存法则
  • x-cmd install | Orbiton:极简至上的终端文本编辑器与轻量级 IDE
  • wps批注线条怎么取消去掉wps批注后有竖线
  • idea启动springboot方式及web调用
  • 数据库基础与核心操作:从概念到实战的全面解析
  • Linux进程7-signal信号处理方式验证、可重入函数举例、信号集函数验证、信号集阻塞验证
  • Github两种鉴权模式PAT与SSH
  • 【Shell 脚本入门】轻松上手的实战指南
  • DIFY教程第三弹:构建一个智能生成图片的Agent
  • 【OSG学习笔记】Day 13: 事件处理——响应键盘与鼠标
  • 高压直流输电MATLAB/simulink仿真模型+说明文档
  • UDP协议详解+代码演示
  • Nginx支持HTTP2/HTTP3的并用CURL测试
  • ​关键词看中国经济“一季报”:韧,长期向好看底气
  • 第二艘国产大型邮轮实现坞内起浮,重点强化邮轮供应链本土化建设
  • 商超展销延长、专区专柜亮相……上海“外贸拓内销”商品与市民见面
  • 伊朗最大港口爆炸:26公里外都能听到,超七百人受伤,原因指向化学品储存
  • 魔都眼·上海车展⑥|周六客流超13.5万人次,创开展新高
  • 70后供销合作总社理事会原副主任侯顺利任中国融通外部董事