当前位置:   article > 正文

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

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
  • 2
  • 3
  • 4
  • 5
  1. 安装docker引擎
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • 1
  1. 启动docker服务
systemctl start docker
  • 1
  1. 验证docker运行是否成功
docker run hello-world
  • 1

二. Docker的镜像与容器

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

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

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

三. 镜像和容器的命令

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

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

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

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

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

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

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

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

  1. 启动的时候进入;
  2. 启动之后进入
# 启动容器的时候并进入到容器
docker run -it centos:centos7 /bin/bash
  • 1
  • 2
# 进入容器
docker exec -it f5e4dbcbb9c1 /bin/bash
  • 1
  • 2
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
  • 1
  • 2
  • 3
  • 4
4.2 启动Nginx
docker run -p 80:80 -d nginx
  • 1

五. 数据卷

​ 数据卷就是让容器可以直接访问到宿主机的某个目录。可以通过 -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
  • 2
  • 3

六. 项目部署

  1. 启动一个MySQL的容器,将宿主机上3306端口映射到容器中的3306
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
  • 1
  1. 将数据库脚本,上传到宿主机的根目录下,然后拷贝到MySQL容器的根目录中
# 将根目录下的 security.sql 拷贝到 mysql 容器中的根目录下
docker cp /security.sql f11903d81392:/
  • 1
  • 2
  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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  1. 启动一个nginx容器,在宿主机上映射一个名为 nginx-html 的目录的数据卷
docker run -p 80:80 -v /nginx-html:/usr/share/nginx/html -d nginx
  • 1
  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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  1. 打包springboot项目,打开手动执行命令的工具
  1. 执行如下命令,将项目打包
# maven的打包命令,-Dmaven.test.skip=true表示忽略单元测试
mvn package -Dmaven.test.skip=true
  • 1
  • 2
  1. 将打好的jar包在本地先运行一下,看是否打包正确;然后上传到服务器
  1. 在服务器中启动springboot项目,启动命令如下所示:
# springboot-security.jar 这个看实际情况做出相应的修改
# &控制台的打印在后台运行;
# nohup 是解决linux远程终端关闭,项目停止运行的问题
nohup java -jar springboot-security.jar  &
  • 1
  • 2
  • 3
  • 4
  1. 前端Vue项目打包,执行如下命令,会在项目目录下生成一个 dist 目录
# 打包前端项目,会在项目目录下生成一个 dist 目录
npm run build:prod
  • 1
  • 2
  1. 将dist目录下的内容上传到 /nginx-html 目录下,该目录是nginx容器的数据卷
  1. 在浏览器中输入地址访问即可

补充

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

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

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

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

### 补充

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

```shell
# u表示要更新的jar
# v输出日志
# f指定归档文件
# 0表示只是把文件替换jar中的文件,而不是打包
# /application.yml 要更新的问题
jar -uvf0 springboot-security.jar /application.yml
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/87532
推荐阅读
相关标签
  

闽ICP备14008679号