centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程

centos搭建运行java项目环境(Docker,tomcat,jdk,nginx,redis,spring_cloud全家桶)教程

传统的linux搭建java项目,步骤比较麻烦,每款软件的安装配置等是多样化的。每款软件有各自的安装步骤,繁琐的命令,着实让人头疼。笔者从接触docker技术后,整理了该教程。让自己成长,还有和技术朋友们共同进步~~~

Docker的作用:缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。(通俗一点说,Docker就像一个大盒子,里面可以装很多物件,如果需要这些物件的可以直接将这个大盒子拿走,而不需要从这个大盒子中一件件的取。)docker鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,可以在一个容器中运行多个应用程序)

传统虚拟机于容器技术的对比:

虚拟机 容器
占用磁盘空间 非常大,GB级 小,MB甚至KB级
启动速度 慢,分钟级 快,秒级
运行形态 运行于Hypervisor上 直接运行在宿主机内核上
并发性 一台宿主机上十几个,最多几十个 上百个,甚至数百上千个
性能 逊于宿主机 接近宿主机本地进程
资源利用率

命令这种东西只有敲了才是自己的,所以docker的命令,笔者放在实际操作中去介绍以及显示,跟着流程一步一步去实现,多操作可以记住。

话不多说跟着笔者直接一步一步进行操作:

搭建环境说明:Docker要求CentOS系统的内核版本高于 3.10,必须是 64 位操作系统,centos系统下查看内核版本命令

uname -r

查看linux一般系统会帮我们安装好yum,如果没有的话,这里有教程:https://blog.51cto.com/3069201/2058781

已有yum的,更新最新版本yum

(1)yum 包更新到最新:

sudo yum update

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

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

(3)设置yum源为阿里云(国内的话设置为国内地址比较快,原因你懂的!):

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker

(1)安装docker
sudo yum install docker-ce

(2)安装后查看docker版本
docker -v

安装docker已完成~
在这里插入图片描述

网上许多教程说添加或者修改daemon.json文件,进行修改docker的镜像源,改为国内的镜像源,下载比较快。其实,默认拉取的最新版本docker中已经帮我们,配置了国内的镜像源。看图1,图2。

图1,ademon.json文件:
centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第1张图片

图2,打开后:
centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第2张图片

如果想改为其他的镜像源请搜索一下国内镜像源网址,编辑该文件修改

vi /etc/docker/ademon.json

重启docker服务

systemctl stop docker

systemctl start docker

直接重启:
systemctl restart docker

设置开机启动:
systemctl enable docker

这时候是从ustc获取镜像,而且速度很快~

需要开启docker的远程访问(在开发和学习时都能带来便利,外部网络环境尽量避免)后续有用:

修改宿主机的docker配置,让其可以远程访问:

vi /lib/systemd/system/docker.service

原来的文件:
centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第3张图片

修改后的文件:
centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第4张图片

 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

运行java项目,使用docker先安装一个容器化的centos7系统,以后许多其它软件(镜像)的制作是基于这个系统做出来的

docker安装centos7

拉取centos的镜像

docker pull centos:7

使用docker images命令可以看到已安装完成的镜像
centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第5张图片

创建容器命令:docker run

 -i:表示运行容器
 
 -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
 
 --name :为创建的容器命名。
 
 -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
 
 -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
 
 -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

挂载文件夹命令作用是:我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。创建容器 添加-v参数 后边为 宿主机目录:容器目录。

通俗的说是:让容器化的centos系统方便同步宿主机(未容器化的,外部的centos系统)的文件安装

笔者在宿主机中路径/usr/local/下创建了文件夹WEB

centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第6张图片

使用命令创建并启动容器,同时挂载文件夹到容器化的centos系统中

docker run -i -t -v /usr/local/centos/:/usr/local/centos --name 创建的容器名字 镜像名字 /bin/bash

在这里插入图片描述

centos安装完成。需要退出当前容器的命令:exit

docker安装jdk

笔者把jdk和一些需要安装到系统中的软件上传到宿主机的/usr/local/WEB/中:
centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第7张图片

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境; 
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了; 
3、对于运维人员:在部署时,可以实现应用的无缝移植。
命令 作用
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name 声明镜像的创建者
ENV key value 设置环境变量 (可以写多条)
RUN command 是Dockerfile的核心部分(可以写多条)
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file 和ADD相似,但是如果有压缩文件并不能解压
WORKDIR path_dir 设置工作目录

/usr/local/WEB路径下(安装包一起的路径下)创建文件Dockerfile(名字必须是这个)

有两种方法写运行容器运行脚本,一种是打开拉下来该文件重写,然后覆盖文件。一种是进入容器安装vi或者vim编辑器进去文件直接写,笔者是选择拉下来将该文件重写覆盖:

#依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER YaoXinHong
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u231-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_231
ENV JRE_HOME $JAVA_HOME/jre
ENV PATH $JAVA_HOME/bin:$PATH

创建该镜像(名字为jdk1.8,是后面maven插件有用):

docker build -t jdk1.8 .

莫忘记后面的 .

创建启动jdk容器

docker run -di --name=jdk1.8 jdk1.8

登录jdk容器中查看是否成功命令:

docker exec -it jdk1.8 /bin/bash

centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第8张图片

docker安装tomcat

重新编写Dockerfile文件脚本:

拉取镜像:

docker pull tomcat

创建容器:

docker run -di --name=容器名字 -p 8080:8080 tomcat:latest

登入容器内可以看到jdk可以不安装的原因,我们拉取的默认最新的tomcat镜像版本,登录进去容器内部,可以看到它已经帮我们安装好jdk环境:
在这里插入图片描述

docker安装nginx

拉取镜像:

docker pull nginx

创建容器:

docker run -di --name=容器名字 -p 80:80 nginx:latest

启动容器后访问80端口效果:
centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第9张图片
容器 nginx 反向代理多台tomcat,操作方式一(每次修改需要登录进入容器):
修改文件之前先查看下tomcat的容器地址

容器的ip ,运行后得到 IPAddress
docker inspect 容器id
对于容器来说,宿主机ip就是IPAddress

查看所有的容器id地址
docker inspect --format='{{.Name}} - {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

或者进入容器,查看容器ip
cat /etc/hosts

登录容器修改/etc/nginx/nginx.conf文件

修改文件需要安装vi/vim编辑工具
进入容器
docker exec -it 容器id /bin/bash
安装vim
apt-get update
apt-get install vim

安装过后,如果下次不想再次安装,可以把该安装了vi编辑器的容器做成镜像,方便下次生成容器
生成新镜像
docker commit 容器id 新镜像名

查看本地镜像
docker images

在nginx.conf中添加以下如以下内容

 upstream tomcat_client {
         server Ip地址:端口号 weight=2;
    } 

    server {
        server_name "";
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        location / {
            proxy_pass http://tomcat_client;
            proxy_redirect default;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

修改号配置文件后,重启nginx容器:

关闭nginx:
nginx -s stop

启动容器
docker start 容器名字

centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第10张图片

操作方式二(修改宿主机源文件就可以同步修改容器文件):

挂载nginx容器文件夹到宿主机文件夹中,通过修改宿主机文件,同步到容器nginx的配置文件.

先开启一个容器,把容器内的配置文件复制在宿主机内(因为docker有时候不能同步复制文件,最好自己把文件复制下来比较妥当):
centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第11张图片
挂载并启动容器里的nginx配置文件夹和nginx日志文件:

docker run --name mynginx -d -p 80:80  -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/logs:/var/log/nginx -d docker.io/nginx

直接对宿主机的/usr/local/nginx/conf/nginx.conf文件修改nginx反向代理的配置,输入如上面操作方式一的一样配置代码,然后重启容器就可以了。每次操作直接免了去登录容器内修改的步骤。我推荐使用第二种。

如果有强迫证删除之前创建的用来复制配置文件的nginx容器:

先暂停容器
docker stop 容器名字
删除容器
docker rm 容器名字

docker安装redis

拉取镜像:

docker pull redis

创建容器并加上密码:

docker run --name redis-dev -p 6379:6379 -d --restart=always redis:latest redis-server --appendonly yes --requirepass "密码"

在window系统下使用redis客户端工具测试效果:
centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第12张图片

docker安装mysql

docker pull centos/mysql-57-centos7

创建容器:

docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=密码 centos/mysql-57-centos7

使用Navicat Premium 12测试效果:

centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第13张图片

docker搭建私有仓库

(1)拉取私有仓库镜像(此步省略)
docker pull registry

(2)启动私有仓库容器
docker run -di --name=容器名字 -p 5000:5000 registry

(3)打开浏览器 输入地址http://ip地址:5000/v2/_catalog看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空

(4)修改ademon.json (/etc/docker/ademon.json),如果没有添加一个
添加以下内容,保存退出。
  {"insecure-registries":["ip地址:5000"]}
此步用于让 docker信任私有仓库地址

(5)重启docker 服务
systemctl restart docker

步骤一:
centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第14张图片

步骤二:
centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第15张图片

步骤三完成图:
centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第16张图片

上传镜像到私有仓库例子:

(1)标记此镜像为私有仓库的镜像
docker tag jdk1.8 ip地址:5000/jdk1.8

(2)再次启动私服容器
docker start registry

(3)上传标记的镜像
docker push ip地址:5000/jdk1.8

docker使用dockermaven插件自动部署eureka项目

1.使用dockermaven插件需要先开启docker的远程访问设置,上面有安装docker的时候先开了,不再赘述。

2.在要发布的项目pom文件中引入该代码:

<build>
    <finalName>appfinalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-maven-pluginartifactId>
        plugin>
        
        <plugin>
            <groupId>com.spotifygroupId>
            <artifactId>docker-maven-pluginartifactId>
            <version>1.2.1version>
            <configuration>
				<imageName>ip地址/${project.artifactId}:${project.version}imageName>
                <baseImage>jdk1.8baseImage>
                <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]entryPoint>
                <resources>
                    <resource>
                        <targetPath>/targetPath>
                        <directory>${project.build.directory}
                        directory>
                        <include>${project.build.finalName}.jarinclude>
                    resource>
                resources>
                <dockerHost>http://ip地址:2375(docker远程访问端口)dockerHost>
            configuration>
        plugin>
    plugins>
build>

3.在windows的命令提示符下,进入项目所在的目录,输入以下命令,进行打包和上传镜像

mvn clean package docker:build ‐DpushImage

这里有个坑,项目名字不能有大写形式,确保docker远程已开启,私有仓库也开启,否则自动构建失败!!!

4.进入宿主机查看上传的镜像:

docker images

centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第17张图片

5.启动容器

docker run -di -p 8081:10001 镜像名字

6.浏览器访问项目:
centos搭建Docker(tomcat,jdk,nginx,redis,spring_cloud全家桶)教程_第18张图片

以上是使用docker发布java项目的整个过程,其他项目的发布也大同小异了。

最后写一些常用的docker命令:

镜像相关命令:

查看所有的镜像 docker images
删除镜像 docker rmi 镜像名字:版本号 例如 yaoxinhong:latest
查询镜像版本 docker search 镜像名称
拉取镜像(不指定版本默认拉取最多星星的那个) docker pull 镜像名:版本号
镜像保存为tar包备份下来 docker save -o .tar 镜像名字
从tar包中恢复为镜像 docker load -i XXX.tar

容器相关命令:

查看正在运行的容器 docker ps
查看所有容器 docker ps -a
后台挂着登录容器方式 docker exec -di 容器名字 /bin/bash
进入容器显示前台输入登录方式 docker exec -it 容器名字 /bin/bash
后台挂着创建并启动容器方式 docker run -di -p 00:00 --name=新建容器名字 镜像名字
进入容器显示前台输入登录方式 docker run -it -p 00:00 --name=新建容器名字 镜像名字
启动容器 docker start 容器名字
关闭容器 docker stop 容器名字
从容器中拷贝资料出来宿主机 docker cp 容器名字:容器目录 需要拷贝的文件或目录
从宿主机中拷贝资料到容器里 docker cp 需要拷贝的文件或目录 容器名称:容器目录
删除容器 docker rm 容器名字
容器保存为镜像 docker commit 容器名字 镜像名字

对这篇文章有什么问题,尽情留下,一起学习解决,共同进步~~~

你可能感兴趣的:(docker)