手机扫码查看
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
- 本页地址 https://www.9713job.com/?p=2927
- 上一篇 <<Docker里面新建容器出现错误的解决方法
- 下一篇 >>2020java微服务架构三之NGINX反向代理



发表回复