关于docker部署项目

Posted 唯恐不及

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于docker部署项目相关的知识,希望对你有一定的参考价值。

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部署项目的主要内容,如果未能解决你的问题,请参考以下文章

Docker-项目部署相关命令

Docker-项目部署相关命令

关于Docker技术说明以及虚拟机技术说明对比

容器部署Spring Cloud项目

docker 部署 coredns(内部域名解析)

docker 部署 coredns(内部域名解析)