当前位置 : 主页 > 编程语言 > 其它开发 >

docker基础及Springboot项目部署

来源:互联网 收集:自由互联 发布时间:2022-06-27
Docker简介 Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。 它是目前最流行的 Linux 容器解决方案。 而 Linux 容器是 Linux 发展出了另一种虚拟化技术,简单来讲, Linux 容
Docker简介

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Linux 容器是 Linux 发展出了另一种虚拟化技术,简单来讲, Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。

总体来说, Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker重要概念

1)image镜像: docker镜像就是一个只读模板,比如,一个镜像可以包含一个完整的centos,里面仅安装apache或用户的其他应用,镜像可以用来创建docker容器,另外docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下一个已经做好的镜像来直接使用

2)container容器 :docker利用容器来运行应用,容器是从镜像创建的运行实例,它可以被启动,开始、停止、删除、每个容器都是互相隔离的,保证安全的平台,可以把容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序

3)repostory仓库 :仓库是集中存储镜像文件的沧桑,registry是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag) 仓库分为两种,公有参考,和私有仓库,最大的公开仓库是docker Hub,存放了数量庞大的镜像供用户下载,国内的docker pool,这里仓库的概念与Git类似,registry可以理解为github这样的托管服务。

Docker基础安装及常用环境配置使用 Docker环境安装
  • 安装yum-utils
yum install -y yum-utils device-mapper-persistent-data lvm2
  • 为yum源添加docker仓库位置:

    使用官方源地址(比较慢)可以更换repo地址到国内的镜像

    阿里云镜像: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • 安装docker:
yum install docker-ce
  • 启动docker:
systemctl start docker
Docker系统常用命令 Docker镜像常用命令 搜索镜像
docker search java

image

下载镜像
docker pull java:8
查看镜像版本

由于docker search命令只能查找出是否有该镜像,不能找到该镜像支持的版本,所以我们需要通过Docker Hub来搜索支持的版本。

  • 进入Docker Hub的官网,地址:https://hub.docker.com
  • 然后搜索需要的镜像:

image

  • 查看镜像支持的版本:
  • 进行镜像的下载操作:
docker pull nginx:1.17.0
列出镜像
docker images

image

删除镜像
  • 指定名称删除镜像:
docker rmi java:8

  • 指定名称删除镜像(强制):
docker rmi -f java:8

  • 删除所有没有引用的镜像:
docker rmi `docker images | grep none | awk '{print $3}'`

  • 强制删除所有镜像:
docker rmi -f $(docker images)

打包镜像
# -t 表示指定镜像仓库名称/镜像名称:镜像标签 .表示使用当前目录下的Dockerfile文件
docker build -t mall/mall-admin:1.0-SNAPSHOT .

推送镜像
# 登录Docker Hub
docker login
# 给本地镜像打标签为远程仓库名称
docker tag mall/mall-admin:1.0-SNAPSHOT macrodocker/mall-admin:1.0-SNAPSHOT
# 推送到远程仓库
docker push macrodocker/mall-admin:1.0-SNAPSHOT

Docker容器常用命令 新建并启动容器
docker run -p 80:80 --name nginx \
-e TZ="Asia/Shanghai" \
-v /mydata/nginx/html:/usr/share/nginx/html \
-d nginx:1.17.0

  • -p:将宿主机和容器端口进行映射,格式为:宿主机端口:容器端口;
  • --name:指定容器名称,之后可以通过容器名称来操作容器;
  • -e:设置容器的环境变量,这里设置的是时区;
  • -v:将宿主机上的文件挂载到宿主机上,格式为:宿主机文件目录:容器文件目录;
  • -d:表示容器以后台方式运行。
列出容器
  • 列出运行中的容器:
docker ps

image

  • 列出所有容器:
docker ps -a

image

停止容器

注意:$ContainerName表示容器名称,$ContainerId表示容器ID,可以使用容器名称的命令,基本也支持使用容器ID,比如下面的停止容器命令。

docker stop $ContainerName(or $ContainerId)

例如:

docker stop nginx
#或者
docker stop c5f5d5125587

启动容器
docker start $ContainerName

删除容器
  • 删除指定容器:
docker rm $ContainerName

查看容器的日志
  • 查看容器产生的全部日志:
docker logs $ContainerName

image

  • 动态查看容器产生的日志:
docker logs -f $ContainerName

查看容器资源占用状况
  • 查看指定容器资源占用状况,比如cpu、内存、网络、io状态:
docker stats $ContainerName

image

  • 查看所有容器资源占用情况:
docker stats -a

image

查看容器磁盘使用情况
docker system df

image

执行容器内部命令
docker exec -it $ContainerName /bin/bash

image

MySQL安装
  • 下载MySQL5.7的docker镜像:
docker pull mysql:5.7

  • 使用如下命令启动MySQL服务:
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7

  • 参数说明
    • -p 3306:3306:将容器的3306端口映射到主机的3306端口
    • -v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂在到主机
    • -v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
    • -v /mydata/mysql/data:/var/lib/mysql/:将数据文件夹挂载到主机
    • -e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码
  • 进入运行MySQL的docker容器:
docker exec -it mysql /bin/bash

  • 使用MySQL命令打开客户端:
mysql -uroot -proot --default-character-set=utf8

  • 创建mall数据库:
create database mall character set utf8

  • 安装上传下载插件,并将document/sql/mall.sql上传到Linux服务器上:
yum -y install lrzsz

  • mall.sql文件拷贝到mysql容器的/目录下:
docker cp /mydata/mall.sql mysql:/

  • 将sql文件导入到数据库:
use mall;
source /mall.sql;

  • 创建一个reader:123456帐号并修改权限,使得任何ip都能访问:
grant all privileges on *.* to 'reader' @'%' identified by '123456';

Redis安装
  • 下载Redis5.0的docker镜像:
docker pull redis:5

  • 使用如下命令启动Redis服务:
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-d redis:5 redis-server --appendonly yes

  • 进入Redis容器使用redis-cli命令进行连接:
docker exec -it redis redis-cli

Nginx安装
  • 下载Nginx1.10的docker镜像:
docker pull nginx:1.10

  • 先运行一次容器(为了拷贝配置文件):
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx  \
-d nginx:1.10

  • 将容器内的配置文件拷贝到指定目录:
docker container cp nginx:/etc/nginx /mydata/nginx/

  • 修改文件名称:
mv nginx conf

  • 终止并删除容器:
docker stop nginx
docker rm nginx

  • 使用如下命令启动Nginx服务:
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx  \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10

RabbitMQ安装
  • 下载rabbitmq3.7.15的docker镜像:
docker pull rabbitmq:3.7.15

  • 使用如下命令启动RabbitMQ服务:
docker run -p 5672:5672 -p 15672:15672 --name rabbitmq \
-d rabbitmq:3.7.15

  • 进入容器并开启管理功能:
docker exec -it rabbitmq /bin/bash
rabbitmq-plugins enable rabbitmq_management

Springboot整合Docker打包

Docker开启2375端口配合Spirngboot Maven打包插件实现镜像上传

前提条件:

1.安装好docker后开启2375端口 用于springboot远程连接实现镜像上传,此方案存在风险,一般只推荐测试环境使用。

2.Springboot配置maven插件

pom核心插件
配置服务器地址及插件

   <properties>
        <java.version>1.8</java.version>

        <docker.host>http://127.0.0.1:2375</docker.host>
        <docker.maven.plugin.version>1.2.2</docker.maven.plugin.version>


    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!--Docker 打包插件-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>${docker.maven.plugin.version}</version>
                <executions>
                <execution>
                <id>build-image</id>
                <phase>package</phase>
                <goals>
                <goal>build</goal>
                </goals>
                </execution>
                </executions>
                <configuration>
                    <imageName>mall/${project.artifactId}:${project.version}</imageName>
                    <dockerHost>${docker.host}</dockerHost>
                    <baseImage>java:8</baseImage>
                    <entryPoint>["java", "-jar" ,"/${project.build.finalName}.jar"]
                    </entryPoint>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>



正常打包

image

服务器查看镜像

image

springboot项目启动
docker run -p 8080:8080 --name springboottest --link mysql:db -d mall/springboot-mybatis-plus:0.0.1-SNAPSHOT 

直接访问端口即可测试接口

上一篇:计算机网络体系架构
下一篇:没有了
网友评论