Docker
一. Docker安装
安装参考地址:https://docs.docker.com/engine/install/centos/
- 安装仓库
yum install -y yum-utils
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 安装docker引擎
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 启动docker服务
systemctl start docker
- 验证docker运行是否成功
docker run hello-world
二. Docker的镜像与容器
镜像:一个可以被特定的软件或者硬件识别的静态程序。
容器:是一个运行着的程序,它是有容器镜像产生的,一个镜像可以产生很多的容器。
2.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 进入容器
进入到容器(容器是运行状态)有两种方式:
- 启动的时候进入;
- 启动之后进入
# 启动容器的时候并进入到容器
docker run -it centos:centos7 /bin/bash
# 进入容器
docker exec -it f5e4dbcbb9c1 /bin/bash
3.5 返回宿主机
返回宿主机有两种方式:
- exit: 退出交互的终端
- 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
指定将容器中的某个目录映射到宿主机的某个目录,那么在容器中透过对应的目录,所有操作都是在操作宿主机上对应文件夹下的文件。文章来源:https://www.toymoban.com/news/detail-783933.html
# /nginx-html 这个是宿主机上的目录,可以不提前创建,那么在启动容器的过程会自动的创建
# /usr/share/nginx/html 是nginx容器的目录,透过这个目录下看到内容其实是 宿主机上 /nginx-html目录下的内容
docker run -p 80:80 -v /nginx-html:/usr/share/nginx/html -d nginx
六. 项目部署
- 启动一个MySQL的容器,将宿主机上3306端口映射到容器中的3306
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
- 将数据库脚本,上传到宿主机的根目录下,然后拷贝到MySQL容器的根目录中
# 将根目录下的 security.sql 拷贝到 mysql 容器中的根目录下
docker cp /security.sql f11903d81392:/
- 进入到容器,然后进入到 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
- 启动一个nginx容器,在宿主机上映射一个名为
nginx-html
的目录的数据卷
docker run -p 80:80 -v /nginx-html:/usr/share/nginx/html -d nginx
- 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>
- 打包springboot项目,打开手动执行命令的工具
- 执行如下命令,将项目打包
# maven的打包命令,-Dmaven.test.skip=true表示忽略单元测试
mvn package -Dmaven.test.skip=true
- 将打好的jar包在本地先运行一下,看是否打包正确;然后上传到服务器
- 在服务器中启动springboot项目,启动命令如下所示:
# springboot-security.jar 这个看实际情况做出相应的修改
# &控制台的打印在后台运行;
# nohup 是解决linux远程终端关闭,项目停止运行的问题
nohup java -jar springboot-security.jar &
- 前端Vue项目打包,执行如下命令,会在项目目录下生成一个 dist 目录
# 打包前端项目,会在项目目录下生成一个 dist 目录
npm run build:prod
- 将dist目录下的内容上传到
/nginx-html
目录下,该目录是nginx容器的数据卷
- 在浏览器中输入地址访问即可
补充
springboot在不重新打包的情况下,更新jar包中的内容的命令如下所示:文章来源地址https://www.toymoban.com/news/detail-783933.html
# 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
到了这里,关于Docker入门到精通(项目部署)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!