舒大少博客

一个95后少年的个人博客

当前时间为:
欢迎大家来到舒大少博客http://admin.evshou.com,广告合作以及淘宝商家推广请微信联系15357240395

2020java微服务架构二之Docker容器化技术

2021-01-12 14:33:08
swq1822677238

手机扫码查看

2020java微服务架构二之Docker容器化技术

2020java微服务架构二之Docker容器化技术

Docker的思想

1.集装箱:
会将所有需要的内容放到不同的集装箱中,谁需要这些环境就直接拿到这个集装箱就可以了。

2.标准化:
a.运输的标准化:docker有一个码头,所有上传的集装箱都放在了这个码头上,当谁需要某一个环境,就直接派大海豚去搬运这个集装箱就可以了。
b.命令的标准化:docker提供了一些列的命令,帮助我们去获取集装箱等操作。
c.提供REST的API:衍生出了很多的图形化界面,Rancher

3.隔离性:
docker在运行集装箱内的内容时,会在Linux内核中,单独的开辟一片空间,这片空间不会影响到其他程序。

注册中心:超级码头,上面放的就是集装箱
镜像:集装箱
容器:运行起来的镜像


Docker的基本操作

A.安装Docker

1.下载关于Dcoker的依赖环境
yum -y install yum-utils device-mapper-persistent-data lvm2

2.设置下载docker镜像源
yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.安装Docker
yum makacache fast
yum -y install docker-ce

4.启动Docker并设置开机自启动
systemctl start docker
systemctl enable docker

测试:docker run hello-world

B.Docker的中央仓库

1.Docker官方的中央仓库:镜像最全但速度较慢
2.国内镜像网站:网易蜂巢daoCloud
3.在公司内部会采用私服的方式拉取镜像(添加配置)

创建或修改 /etc/docker/daemon.json 文件

# vi /etc/docker/daemon.json
{
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "insecure-registries":["ip:port"]
}

重启两个服务:
systemctl daemon-reload
systemctl restart docker

C.镜像的操作

拉取镜像到本地
docker pull 镜像名称
docker pull daocloud.io/library/tomcat:8.5.15-jre8-alpine

查看全部本地镜像
docker images

删除本地镜像
docker rmi 镜像的标识

镜像导入导出
镜像导出:docker save -o 导出的路径和文件名 镜像id
docker save -o ./tomcat.image ff
加载本地镜像:docker load -i 镜像文件
修改镜像名称:docker tag 镜像id 新镜像名称:版本

D.容器的操作

1.运行容器
简单操作:
docker run 镜像的标识|镜像的名称[:tag]

常用的参数:
docker run -d -p 宿主机端口:容器端口 –name 容器名称 镜像的标识|镜像的名称[:tag]
-d:代表后台运行容器
-p:宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口
–name:容器名称:指定容器的名称
docker run -d -p 8081:8080 –name tomcat b8

2.查看正在运行的容器
docker ps [-qa]
-q:只查看容器的标识
-a:查看全部的容器,包括没有运行

3.查看容器的日志
docker logs -f 容器id
-f:可以滚动查看日志的最后几行

4.进入到容器内部
不能在容器内部停止服务
docker exec -it 容器id bash

5.删除容器
删除容器之前,需要停止容器
停止指定容器
docker stop 容器id
停止全部容器
docker stop $(docker ps -qa)
删除指定容器id
docker rm 容器id
删除全部容器
docker rm $(docker ps -qa)

6.启动容器
docker start 容器id


Docker的应用

1.准备项目工程
将idea项目打包war
Linux:
停止Tomcat以及mysql
停止Tomcat:
cd /usr/local/apache-tomcat-8.5.53/bin
./shutdown.sh
停止mysql:
systemctl stop mysqld
systemctl disable mysqld

2.准备mysql容器
如果容器不存在则自动拉取镜像,然后运行
docker run -d -p 3306:3306 –name mysql -e MYSQL_ROOT_PASSWORD=root daocloud.io/library/mysql:5.7.4

3.准备Tomcat容器
将项目的war包部署到Tomcat容器内部即可
可通过命令将宿主主机的内容服务到容器内部
docker cp 文件名称 容器id:容器内部路径
docker cp ssm.war 容器id:/usr/local/tomcat/webapps/
查看日志:docker logs -f 容器id

4.数据卷

为了部署项目的工程,需要使用到cp的命令将宿主机内的ssm.war文件复制到容器内部
数据卷:将宿主机的一个目录映射到容器 的一个目录中
可以在宿主机中操作目录中的内容,那么容器内部映射的文件,也会跟着一起改变。

a.创建数据卷:docker volume create 数据卷名称
创建数据卷之后,默认会放在 /var/lib/docker/volumes/数据卷名称/_data

b.查看数据卷的详细信息
docker volume inspect 数据卷名称

c.查看全部数据卷:docker volume ls

d.删除数据卷:docker volume rm 数据卷名称

e.数据卷应用

当你映射数据卷时,如果数据卷不存在,docker会帮你自动创建,会将容器内部自带的文件,存储在默认的存放路径中。
docker run -v 数据卷名称:容器内部的路径 镜像id

直接指定一个路径作为数据卷的存放位置,这个路径下是空的
docker run -v 路径:容器内部的路径 镜像id

docker volume create 数据卷名称
docker run -d -p 8080:8080 –name ssm_tomcat -v 数据卷名称:/usr/local/tomcat/webapps 镜像标识
把war包复制到数据卷的_data目录下
cd ~
cp ssm.war /var/lib/docker/volumes/数据卷名称/_data
docker logs -f 镜像标识

效果图




自定义镜像

中央仓库上的镜像,也是Docker的用户自己上传过去的

1.创建一个Dockerfile文件,并且指定自定义镜像信息
Dockerfile文件中常见的内容:war包要跟文件放在同一级目录
from:指定当前自定义镜像依赖的环境
copy:将相对路径下的内容复制到自定义镜像中
workdir :声明镜像的默认工作目录
cmd :需要执行的命令(在workdir下执行的,cmd可以写多的,只以最后一个为准)

from daocloud.io/library/tomcat:8.5.15-jre8-alpine
copy ssm.war /usr/local/tomcat/webapps

2.将准备好的Dockerfile和相应的文件拖拽到Linux操作系统中,通过docker命令制作镜像
docker build -t 自定义镜像名:版本 路径.(“.” 为当前目录)
docker build -t ssm-tomcat:1.0.0 .



docker-compose

下载docker-compose

之前运行一个镜像,需要添加大量的参数,可以通过docker-compose编写这些参数。
docker-compose可以帮助我们批量的管理容器。只需要通过一个docker-compose.yml文件去维护即可

下载docker-compose,版本1.24.1

将下载好的文件拖拽到Linux操作系统中,然后移动到/usr/local
mv docker-compose-Linux-x86_64 /usr/local

需要将docker-compose文件的名称修改,基于docker-compose文件是一个可执行的权限
mv docker-compose-Linux-x86_64 docker-compose
chmod 777 docker-compose

方便后期操作,配置一个环境变量
将docker-compose文件移动到了/usr/local/bin,修改了/etc/profile文件,给usr/local/bin配置到了PATH中。
mv docker-compose /usr/local/bin
vi /etc/profile
export PATH=$JAVA_HOME/bin:/usr/local/bin:$PATH
source /etc/profile
测试:docker-compose

docker-compose管理mysql和Tomcat容器

yml文件以key: value方式来指定配置信息
多个配置信息以换行+缩进的方式来区分

version: '3.1'
services:
  mysql:  #服务的名称
    restart: always  #代表只要docker启动,那么这个容器就跟着一起启动
    image: daocloud.io/library/mysql:5.7.4  #指定镜像路径
    container_name: mysql  #指定容器名称
    ports:
      - 3306:3306  #指定端口号的映射
    environment:
      MYSQL_ROOT_PASSWORD: root  #指定mysql的root用户登录密码
      TZ: Asia/Shanghai  #指定时区
    volumes:
      - /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql  #映射数据卷
  tomcat:
    restart: always  #代表只要docker启动,那么这个容器就跟着一起启动
    image: daocloud.io/library/tomcat:8.5.15-jre8-alpine  #指定镜像路径
    container_name: tomcat  #指定容器名称
    ports:
      - 8080:8080  #指定端口号的映射
    environment:
      TZ: Asia/Shanghai  #指定时区
    volumes:
      - /opt/docker_mysql_tomcat/tomcat_webapps:/usr/local/tomcat/webapps  #映射数据卷
      - /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs
    

使用docker-compose命令管理容器

在使用docker-compose的命令时,默认会在当前目录下找docker-compose.yml文件


1.基于docker-compose.yml启动管理的容器
docker-compose run -d

2.关闭并删除容器
docker-compose down

3.开启|关闭|重启已经存在的有docker-compose维护的容器
docker-compose start|stop|restart

4.查看由docker-compose管理的容器
docker-compose ps

5.查看日志
docker-compose logs -f

使用docker-compose配置dockerfile使用

yml文件

version: '3.1'
services:
  ssm:  #服务的名称
    restart: always  #代表只要docker启动,那么这个容器就跟着一起启动
    build:
      context: ../  #指定dockerfile文件的所在路径
      dockerfile: Dockerfile  #指定dockerfile文件名称
    image: ssm:1.0.1  #指定镜像路径
    container_name: ssm  #指定容器名称
    ports:
      - 8081:8080  #指定端口号的映射
    environment:
      TZ: Asia/Shanghai  #指定时区

dockerfile:

from daocloud.io/library/tomcat:8.5.15-jre8-alpine
copy ssm.war /usr/local/tomcat/webapps

1.创建docker_ssm目录
2.创建dockerfile文件
3.粘贴war包
4.创建docker-compose目录
5.创建docker-compose.yml文件

可以直接启动基于docker-compose.yml文件以及dockerfile文件构建的自定义镜像
docker-compose up -d
如果自定义镜像不存在,会自动构建自定义镜像,如果自定义镜像已存在,会直接运行这个自定义镜像

重新构建的话:
重新构建自定义镜像:docker-compose build
运行前,重新构建:docker-compose up -d –build


Docker CI、CD

前言:
项目部署:
1.将项目通过maven进行编译打包
2.将文件上传到指定的服务器中
3.将war包放到tomcat的目录中
4.通过dockerfile将tomcat和war包转成一个镜像,由docker-compose去运行容器

问题:项目更新了又要将上述流程再次从头到尾执行一遍

CI介绍

CI(continuous Intergration)持续集成

持续集成:编写代码时,完成了一个功能后,立即提交代码到git仓库中,将项目重新的构建并且测试
快速发现错误、放置代码偏离主分支。

实现持续集成

1.搭建gitlab服务器
步骤:
1.创建一个全新的虚拟机,并且至少4G运行内存
2.安装docker以及docker-compose
3.docker-compose.yml文件去安装gitlab
4.
cd /opt
mkdir docker_gitlab
cd docker_gitlab
创建 docker-compose.yml文件

version: '3.1'
services:
 gitlab:
  image: 'twang2218/gitlab-ce-zh:11.1.4'
  container_name: "gitlab"
  restart: always
  privileged: true
  hostname: 'gitlab'
  environment:
   TZ: 'Asia/Shanghai'
   GITLAB_OMNIBUS_CONFIG: |
    external_url 'http://192.168.2.124'
    gitlab_rails['time_zone'] = 'Asia/Shanghai'
    gitlab_rails['smtp_enable'] = true
    gitlab_rails['gitlab_shell_ssh_port'] = 22
  ports:
   - '80:80'
   - '443:443'
   - '22:22'
  volumes:
   - /opt/docker_gitlab/config:/etc/gitlab
   - /opt/docker_gitlab/data:/var/opt/gitlab
   - /opt/docker_gitlab/logs:/var/log/gitlab



然后 docker-compose up -d
启动 docker-compose logs -f

修改Xterm的22端口:
vi /etc/ssh/sshd_config

gitlab-runner

安装步骤点击查看

发表评论

邮箱地址不会被公开。 必填项已用*标注