关于docker部署项目
Posted 唯恐不及
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于docker部署项目相关的知识,希望对你有一定的参考价值。
-
docker环境准备
下载docker离线包
#找一台外网下载
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz.tgr
#或者win10访问网址直接下载(此处我已下载好相关软件只需要拷贝到服务器上)
利用Xshell执行指令: rz #上传文件
若rz指令不存在: yum install -y lrzsz #管理员账号登录
拓展:sz指令----下载(sz 指定下载文件名)#解压
tar -xvf docker-20.10.6.tgz.tar
#将解压出来的docker目录下的文件移动到 /usr/bin/ 目录下
cp docker/* /usr/bin/将docker注册为系统service
若vim指令不存在:yum -y install vim
vim /usr/lib/systemd/system/docker.service
编写内容如下:(此处要注意复制可能会不全字数太多了,所以最好检查一遍)
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=onfailure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target启动docker并加入开机启动项
#启动docker
chmod +x /usr/lib/systemd/system/docker.service #添加文件权限并启动docker
systemctl daemon-reload #重载unit配置文件
systemctl start docker #启动Docker
#加入开机启动项
ln -s /usr/lib/systemd/system/docker.service /etc/systemd/system/multi-user.target.wants/docker.service
#检查是否加入开机启动项
systemctl list-unit-files|grep docker
-
docker-compose环境准备
下载docker-compose安装包并赋予权限
#到相应网址去访问下载相应的程序包(此处我下载的是最新的docker-compose-Linux-x86_64,已有)
https://github.com/docker/compose/releases
#或者win10访问网址直接下载(此处我已下载好相关软件只需要拷贝到服务器上)
利用Xshell执行指令: rz #上传文件
#并移动到相应的文件中 (/usr/local/bin/ 为系统默认检测环境变量路径),
注: 当修改环境变量时:需要对etc/profile 文件进行环境变量路径修改添加
例如:将A放在了/usr/local/bin目录下:需要在profile文件里添加以下代码:
export PATH=$PATH:/usr/local/bin
添加完以后要重新加载profile文件配置
source /etc/profile #重新加载配置文件
cp ./docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
#赋予权限
chmod +x /usr/local/bin/docker-compose
#执行以下命令
docker-compose -v
-
unzip解压环境准备(主要用于解压war包)
#访问网址去下载对应的文件
http://www.rpmfind.net/linux/rpm2html/search.php?query=&submit=Search+=安装unzip和zip
#查看 unzip 是否被安装
rpm -qa | grep unzip
#安装(解压包)unzip:
rpm -ivh unzip-6.0-19.el7.x86_64.rpm
#安装(压缩包)zip:
rpm -ivh zip-3.0-11.el7.x86_64.rpm
注意:当rz执行 .env上传时,会发生上传报错(上传失败),原因Xshell在上传时,当在home必须进行赋权限,指令执行: sudo rz
还有.env文件一般都是隐藏,查看详情 : ls -a (因为当文件夹里已包含该类型文件时,上传时重复也会出现报错)
将目录文件依次放入对应的文件夹内,对war包进行解压:
unzip -d 指定目录
unzip -oq demo.war -d 存放解压包目录
-
镜像目录如下
docker
│ mysql57.tar
│ nginx.tar
│ openjdk8.tar
│ redis32.tar
│ tomcat9.tar
│ oracle11g-xe.tar
└ ubuntu.tar -
将导入的或打包好的镜像进行导入docker容器
docker load --input mysql57.tar
docker load --input nginx.tar
docker load --input openjdk8.tar
docker load --input redis32.tar
docker load --input tomcat9.tar
docker load --input ubuntu.tar
docker load --input oracle11g-xe.tar
- 修改docker-compose.yml文件(注意yml文件格式对齐)
version: "3"
services:
demo-mysql:
image: mysql:5.7
restart: always
env_file: ./demo-mysql/.env
privileged: true
command:
[
"--character-set-server=utf8mb4",
"--collation-server=utf8mb4_unicode_ci",
"--default-time-zone=+8:00",
"--lower_case_table_names=1"
]
volumes:
- ./logs/bc_mysql_data:/var/lib/mysql
- ./demob-mysql/conf.d/:/etc/mysql/conf.d/:ro
- ./demo-mysql/init/:/docker-entrypoint-initdb.d/:ro
ports:
- 3306:3306
demo-oracle:
image: sath89/oracle-xe-11g
restart: always
env_file: ./demo-oraclellg-xe/.env
volumes:
- ./logs/demo-oraclellg-xe:/u01/app/oracle
- ./demo-oraclellg-xe/init/:/docker-entrypoint-initdb.d/:ro
ports:
- 1521:1521
demo-service:
build:
context: ./demo-service/.
args:
JAR_FILE: \'*.jar\'
image: demo/service:1.0.1
restart: always
env_file: ./demo-service/.env
volumes:
- ./logs/demo-service:/logs
depends_on: # depend_on: 表示服务的启动需要在 下面服务启动后 才能正常启动
- demo-oracle
demo-web:
build:
context: ./demo-web/.
image: tomcat
restart: always
volumes:
- ./demo-web/demo-main-web:/usr/local/tomcat/webapps/demo-main-web:ro
- ./logs/demo-main-web/:/usr/local/tomcat/logs/
demo-redis:
image: redis:3.2
restart: always
ports:
- 6379:6379
demo-nginx:
image: nginx
restart: always
ports:
- 18081:8081
# privileged: true
links: #注意 links:表示 服务正常启动需要涉及关联服务的启动
- demo-web
- demo-service
- demo-web
- demo-service
volumes:
- ./demo-nginx/nginx.conf:/etc/nginx/nginx.conf
- ./logs/demo-nginx/:/var/log/nginx/
部署服务
查看镜像并启动docker-compose.yml文件
docker images
#服务执行顺序:
docker-compose up -d 服务名
docker ps -a //查看启动的服务 编码
注意:当重启时注意清除 logs文件夹下对应服务的日志文件夹
docker-compose up --build --force-recreate -d {服务名}
按照前面服务启动顺序启动
#更新
docker-compose restart 服务名
#日志查看
docker-compose logs -f 服务名
#可以本地进行访问比如本例如下(如果出现nginx等字样,则启动成功,接下来就是测试其他服务是否启动成功)
curl 127.0.0.1:8081
#如果web访问是tomcat字样出现,说明war没有解压,需要解压war包到目标目录中,不需要重启容器
curl 127.0.0.1:8081/登录页面路径
#以上如果没有curl命令的程序就要通过局域网访问网页
ip:端口号/web端登录路径
以上是关于关于docker部署项目的主要内容,如果未能解决你的问题,请参考以下文章