Docker入门到精通(项目部署)

在这里插入图片描述

Docker

一. Docker安装

安装参考地址:https://docs.docker.com/engine/install/centos/

  1. 安装仓库
yum install -y yum-utils

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
  1. 安装docker引擎
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 启动docker服务
systemctl start docker
  1. 验证docker运行是否成功
docker run hello-world

二. Docker的镜像与容器

镜像:一个可以被特定的软件或者硬件识别的静态程序。

容器:是一个运行着的程序,它是有容器镜像产生的,一个镜像可以产生很多的容器。

2.1 镜像加速器的配置
  1. 登录阿里云,搜索 “容器镜像服务”
  1. 找到 “镜像工具” => “镜像加速器”,按照文档来操作即可

三. 镜像和容器的命令

3.1 镜像操作
# 查看电脑中所有的镜像
docker images
# 根据镜像id删除镜像,也可以通过名字加标签删除,删除镜像之前要将与之关联的容器删除掉
docker rmi feb5d9fea6a5
# 从镜像仓库获取拉去镜像
docker pull mysql:8
docker pull nginx
3.2 容器的操作
# 查看正在运行着的容器
docker ps 

# 查看所有的容器(正在运行和已经退出的)
docker ps -a
# 杀死一个容器,直接杀死
docker kill b1dec6d5528f

# 关闭一个容器,是比较优雅的方式
docker stop b1dec6d5528f
# 根据容器id删除某个容器
docker rm b1dec6d5528f

# docker ps -qa 查看所有容器的id, $() 这是Linux的命令,会优先执行 $() 中的内容
docker rm $(docker ps -qa)
3.3 docker引擎的工作机制

当启动一个容器的时候,如果docker引擎觉得容器没有事情做的时候,会把容器杀掉,所以在有些时候我们要给容器找点事干,那么docker引擎就不会将容器杀掉。

上图中,启动一个centos7之后,然后容器就觉得容器没有事情做,然后就将容器杀死了。

# 如下的命令,启动一个centos7的容器,然后让其循环打印 hello,目的是让其有事可干,引擎不会杀死该容器
docker run centos:centos7 /bin/bash -c "while true; do echo hello; sleep 2; done"
3.4 进入容器

进入到容器(容器是运行状态)有两种方式:

  1. 启动的时候进入;
  2. 启动之后进入
# 启动容器的时候并进入到容器
docker run -it centos:centos7 /bin/bash
# 进入容器
docker exec -it f5e4dbcbb9c1 /bin/bash
3.5 返回宿主机

返回宿主机有两种方式:

  1. exit: 退出交互的终端
  2. ctrl + p + q: 这是返回到宿主机,并没有退出那个交互的终端。

四. 启动常见容器

容器中软件的端口只存在于容器的内部,不会占用宿主机的端口,如果想要在外部访问到容器中某个软件,那么必须要通过 -p 来指定将宿主机中的端口映射到容器中端口,访问的时候请求先到宿主机,由宿主机根据端口映射,将请求转发到对应的容器中。

4.1 MySQL
# 3306:3306 第一个3306是宿主机的3306端口,第二个3306是容器中的端口;
# -e 指定MySQL的环境配置,MYSQL_ROOT_PASSWORD是固定写法,用来指定 mysql的root的密码用的
# -d 将日志的打印(目的是让Docker引擎觉得它有事干)在后台进程中运行
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
4.2 启动Nginx
docker run -p 80:80 -d nginx

五. 数据卷

​ 数据卷就是让容器可以直接访问到宿主机的某个目录。可以通过 -v 指定将容器中的某个目录映射到宿主机的某个目录,那么在容器中透过对应的目录,所有操作都是在操作宿主机上对应文件夹下的文件。

# /nginx-html 这个是宿主机上的目录,可以不提前创建,那么在启动容器的过程会自动的创建
# /usr/share/nginx/html 是nginx容器的目录,透过这个目录下看到内容其实是 宿主机上 /nginx-html目录下的内容
docker run -p 80:80 -v /nginx-html:/usr/share/nginx/html -d nginx

六. 项目部署

  1. 启动一个MySQL的容器,将宿主机上3306端口映射到容器中的3306
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
  1. 将数据库脚本,上传到宿主机的根目录下,然后拷贝到MySQL容器的根目录中
# 将根目录下的 security.sql 拷贝到 mysql 容器中的根目录下
docker cp /security.sql f11903d81392:/
  1. 进入到容器,然后进入到 MySQL执行如下命令,导入脚本
# 进入到mysql 容器
docker exec -it f11903d81392 /bin/bash

# 进入到mysql, 要输入密码
mysql -uroot -p 

# 创建 security数据库,与Java项目中数据库配置保持一致
CREATE DATABASE smartbuilding;

# 使用 security 这个数据库
use security;

# 导入SQL的脚本
source /security.sql;

# 退出数据库
exit;

# 退出容器
exit
  1. 启动一个nginx容器,在宿主机上映射一个名为 nginx-html 的目录的数据卷
docker run -p 80:80 -v /nginx-html:/usr/share/nginx/html -d nginx
  1. Java程序打包,在pom.xml 文件中引入如下的依赖,根据实际情况修改配置。
<dependencies>
	<!-- 其他依赖省略  -->
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>
  1. 打包springboot项目,打开手动执行命令的工具
  1. 执行如下命令,将项目打包
# maven的打包命令,-Dmaven.test.skip=true表示忽略单元测试
mvn package -Dmaven.test.skip=true
  1. 将打好的jar包在本地先运行一下,看是否打包正确;然后上传到服务器
  1. 在服务器中启动springboot项目,启动命令如下所示:
# springboot-security.jar 这个看实际情况做出相应的修改
# &控制台的打印在后台运行;
# nohup 是解决linux远程终端关闭,项目停止运行的问题
nohup java -jar springboot-security.jar  &
  1. 前端Vue项目打包,执行如下命令,会在项目目录下生成一个 dist 目录
# 打包前端项目,会在项目目录下生成一个 dist 目录
npm run build:prod
  1. 将dist目录下的内容上传到 /nginx-html 目录下,该目录是nginx容器的数据卷
  1. 在浏览器中输入地址访问即可

补充

springboot在不重新打包的情况下,更新jar包中的内容的命令如下所示:

# u表示要更新的jar
# v输出日志
# f指定归档文件
# 0表示只是把文件替换jar中的文件,而不是打包
# /application.yml 要更新的问题
jar -uvf0 springboot-security.jar /application.yml

> 11. 将dist目录下的内容上传到 `/nginx-html` 目录下,该目录是nginx容器的数据卷

> 12. 在浏览器中输入地址访问即可

### 补充

> springboot在不重新打包的情况下,更新jar包中的内容的命令如下所示:

```shell
# u表示要更新的jar
# v输出日志
# f指定归档文件
# 0表示只是把文件替换jar中的文件,而不是打包
# /application.yml 要更新的问题
jar -uvf0 springboot-security.jar /application.yml
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker项目部署是指使用Docker技术来部署和管理应用程序的过程。Docker是一种开源的容器化平台,可以将应用程序及其依赖项打包成一个容器,并在任何支持Docker的环境中运行。通过使用Docker,可以实现应用程序的快速部署、可移植性和可扩展性。 要开始使用Docker进行项目部署,首先需要安装Docker Engine和containerd。可以使用以下命令安装最新版本的Docker Engine和containerd:yum install docker-ce docker-ce-cli containerd.io 安装完成后,可以使用Docker命令行工具来管理和操作Docker容器。可以使用以下命令来启动和停止容器、查看容器信息等操作。 要卸载Docker引擎、CLI和Containerd包,可以使用以下命令:yum remove docker-ce docker-ce-cli containerd.io 通过Docker部署项目,可以实现应用程序的隔离性、可复制性和高效性。使用Docker可以将应用程序及其依赖项打包成一个容器,使得应用程序在不同环境中都能够一致地运行。同时,Docker还提供了丰富的工具和功能,可以方便地管理和部署多个容器,实现应用程序的快速部署和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [docker项目部署](https://blog.csdn.net/m0_49556309/article/details/117093002)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [docker部署项目](https://blog.csdn.net/weixin_45607293/article/details/122707731)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值