Docker部署springboot项目

一、架构

Docker架构图

  • Docker daemon( Docker守护进程):Docker daemon是一个运行在宿主机( DOCKER-HOST)的后台进程。可通过 Docker客户端与之通信。
  • Client( Docker客户端):Docker客户端是 Docker的用户界面,它可以接受用户命令和配置标识,并与 Docker daemon通信。图中, docker build等都是 Docker的相关命令。
  • Images( Docker镜像):Docker镜像是一个只读模板,它包含创建 Docker容器的说明。它和系统安装光盘有点像,使用系统安装光盘可以安装系统,同理,使用Docker镜像可以运行 Docker镜像中的程序。
  • Container(容器):容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。可通过 Docker API或者 CLI命令来启停、移动、删除容器。
  • Registry:Docker Registry是一个集中存储与分发镜像的服务。构建完 Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,就需要手动复制。此时可借助Docker Registry来避免镜像的手动复制。一个 Docker Registry可包含多个 Docker仓库,每个仓库可包含多个镜像标签,每个标签对应一个 Docker镜像。这跟 Maven的仓库有点类似,如果把 Docker Registry比作Maven仓库的话,那么 Docker仓库就可理解为某jar包的路径,而镜像标签则可理解为jar包的版本号。Docker Registry可分为公有Docker Registry和私有Docker Registry。 最常用的DockerRegistry莫过于官网的Docker Hub, 这也是默认的Docker Registry。 Docker Hub上存放着大量优秀的镜像, 我们可使用Docker命令下载并使用。

二、安装

1、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

# yum install -y yum-utils device-mapper-persistent-data lvm2

2、设置yum源

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3、安装docker

# sudo yum install -y docker-ce

4、启动并加入开机启动

# systemctl start docker
# systemctl enable docker

5、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

# docker version

三、镜像相关命令

  • docker search java:在仓库中搜索关键字(如java)的镜像NAME:镜像仓库名称。

  • NAME:镜像仓库名称。
    DESCRIPTION:镜像仓库描述。
    STARS:镜像仓库收藏数,表示该镜像仓库的受欢迎程度,类似于 GitHub的 stars0
    OFFICAL:表示是否为官方仓库,该列标记为[0K]的镜像均由各软件的官方项目组创建和维护。
    AUTOMATED:表示是否是自动构建的镜像仓库。

     

  • docker pull java:8:从仓库中下载镜像,若要指定版本,则要在冒号后指定
  • docker images:列出已经下载的镜像
  • REPOSITORY:镜像所属仓库名称。
    TAG:镜像标签。默认是 latest,表示最新。
    IMAGE ID:镜像 ID,表示镜像唯一标识。
    CREATED:镜像创建时间。
    SIZE: 镜像大小。

     

  • docker rmi java:删除本地镜像
  • docker build:构建镜像

四:容器相关命令

1、新建并启动容器

使用以下docker run <镜像名>命令即可新建并启动一个容器,该命令是最常用的命令,它有很多选项,下面将列举一些常用的选项。

# docker run -d -p 80:80 nginx

这样就能启动一个 Nginx容器。在本例中,为 docker run添加了两个参数,含义如下:

  • -d 后台运行
  • -p 宿主机端口:容器端口 #开放容器端口到宿主机端口

2、列出容器

用 docker ps命令即可列出运行中的容器

# docker ps

  • CONTAINER_ID:表示容器 ID。
  • IMAGE:表示镜像名称。
  • COMMAND:表示启动容器时运行的命令。
  • CREATED:表示容器的创建时间。
  • STATUS:表示容器运行的状态。UP表示运行中, Exited表示已停止。
  • PORTS:表示容器对外的端口号。
  • NAMES:表示容器名称。该名称默认由 Docker自动生成,也可使用 docker run命令的--name选项自行指定。

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

3、停止容器

使用 docker stop <容器id>命令,即可停止容器

# docker stop cfd2818ee7a9

 

4、强制停止容器

可使用 docker kill <容器id>命令发送 SIGKILL信号来强制停止容器

# docker kill cfd2818ee7a9

5、启动已停止的容器

使用docker run命令,即可新建并启动一个容器。对于已停止的容器,可使用 docker start <容器id>命令来启动

# docker start cfd2818ee7a9

6、查看容器所有信息

使用命令docker inspect <容器id>

# docker inspect cfd2818ee7a9

7、查看容器日志

使用命令docker container logs <容器id>

# docker container logs cfd2818ee7a9

实时日志

# docker container logs -f cfd2818ee7a9

docker logs -f -t --since="2017-05-31" --tail=10 **

--since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志。

-f : 查看实时日志

-t : 查看日志产生的日期

-tail=10 : 查看最后的10条日志。

8、查看容器里的进程

使用命令docker top <容器id>

# docker top cfd2818ee7a9

9、进入容器

使用docker container exec -it <容器id> /bin/bash命令用于进入一个正在运行的docker容器。如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令了

# docker container exec -it cfd2818ee7a9 /bin/bash

   exit:退出容器

10、删除已停止的容器

使用 docker rm命令即可删除指定容器

# docker rm cfd2818ee7a9

docker rm -f 容器id:删除正在运行的容器

11、查看端口映射情况

docker port NAMES

五:准备springboot工程

首先在springboot项目的pom.xml文件中添加Docker镜像名称:

<properties>
    <docker.image.prefix>springboot</docker.image.prefix>
</properties>

在plugin中添加docker构建插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <!-- Docker maven plugin -->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
                <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                <dockerDirectory>src/main/docker</dockerDirectory>
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
        <!-- Docker maven plugin -->
    </plugins>
</build>

 接着使用maven install编译打包工程

六、构建镜像

新建一个名为docker的文件夹,在文件中新建一个Dockerfile文件,Dockerfile相当于说明书,告诉docker容器应该如何运行项目,规定项目运行的一些规则:

FROM java:8
VOLUME /tmp
ADD vblog-web-0.0.1-SNAPSHOT.jar vblog.jar 
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/vblog.jar"]

FROM:表示基础镜像,即运行环境

VOLUME:一个特别指定的目录,用于存储数据,该命令的作用是在/var/lib/docker创建一个名为tmp的目录,在开启redis服务时,需要特别指定redis的数据存储在哪个文件夹,此时这个命令就十分有用

ADD:拷贝文件并且重命名

EXPOSE:并不是真正的发布端口,这个只是容器部署人员与建立image的人员之间的交流,即建立image的人员告诉容器布署人员容器应该映射哪个端口给外界

ENTRYPOINT:容器启动时运行的命令,相当于我们在命令行中输入java -jar xxxx.jar,为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT

十分钟学会用docker部署微服务

然后将第四步中准备的jar包上传到该文件夹中。然后在当前文件构建镜像,运行命令:(-t指定镜像名称,末尾的点标识Dockerfile文件的路径)

# docker build -t docker .

运行容器

docker run -d -p 80:8082 docker

 

 

 

 

访问ip+80端口,就可以访问到我们部署的服务了。

七、构建Nginx

输入命令 docker pull nginx:1.15 拉取 nginx 的镜像;

新建三个文件夹,用于添加Nginx的相关配置:

mkdir /opt/nginx/conf.d

mkdir /opt/nginx/html

mkdir /opt/nginx/nginx.conf

 

在nginx.conf文件夹新建nginx.conf文件,内容如下:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;
  #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

在conf.d文件夹新建default.conf配置文件(ip改成自己的),内容如下:

server {
    listen       80;
    server_name  localhost;
 
    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;
	
	location /vblog {
		proxy_pass http://ip:8082;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection 'upgrade';
	}
 
	location / {
		index index.html;
		root /usr/share/nginx/html;
	}
 
    #error_page  404              /404.html;
 
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
 
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
 
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}
 
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

 在/opt/nginx/html文件夹放入前端代码,然后运行命令:

docker run --name nginx -d -p 80:80 -v /opt/nginx/html:/usr/share/nginx/html:ro -v /opt/nginx/logs:/var/log/nginx -v /opt/nginx/conf.d:/etc/nginx/conf.d:ro -v /opt/nginx/nginx.conf/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx

映射端口 

映射静态文件路径/opt/nginx/html

日志/opt/nginx/logs

配置文件等

--然后访问 ip:80/index.html可以访问到html页面,访问ip+80/vblog/*可以正常访问到后台接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值