Docker 部署流程手册
简单介绍:
服务器镜像版本: unbuntu20.04.1
部署方式: docker+ Dockerfile+docker-compose
docker
开源的应用容器引擎;1容器:每创建的一个容器相当于一套独立的环境,可以看作精简版本的linux,即可以在容器里面部署特定的服务;2镜像:创建容器的来源,相当于封装好的某种服务,docker在根据此镜像创建容器时候,可自定义端口,挂载等操作;
因此 docker 可以快速多服务的部署
dockerfile
是一个用来构建个性化镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
docker-compose
Docker Compose
是 Docker 官方编排项目之一,负责快速的部署分布式应用
使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务
准备工作
1 . Linux环境搭建
2.固定ip
3.设置root用户可以ssh登录
执行命令:
vi /etc/ssh/sshd_config
修改内容:
PermitEmptyPasswords yes
PermitRootLogin yes
执行命令重启ssh服务
service sshd restart
安装 docker和docker-compse
下载安装docker
参考文档: https://docker_practice.gitee.io/zh-cn/install/mirror.html
使用 APT 安装:
先切换root用户 依次执行下列名命令
1
apt-get update
2添加使用 HTTPS 传输的软件包以及 CA 证书
apt-get install apt-transport-https ca-certificates curl \
gnupg-agent \
software-properties-common
3使用国内源
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
4向 sources.list
中添加 Docker 软件源
add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
5
apt-get update
6
apt-get install docker-ce docker-ce-cli containerd.io
7 设置开机启动 docker
sudo systemctl
enabledocker
8 启动 docker
sudo systemctl start docker
输入下面命令检查是否启动
docker ps
没有错误提示就是启动成功
下载安装docker-compose
使用curl
将 Compose 文件下载到/usr/local/bin
目录:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
将该文件设置为可执行:
chmod +x /usr/local/bin/docker-compose
安装成功,运行下面的命令,打印 Compose 的版本:
docker-compose --version
docker-compose 基本命令
想要卸载 Docker Compose,只需要简单删除二进制文件即可,输入:
sudo rm /usr/local/bin/docker-compose
通过在 Compose 后面加上-d
选项,以后台模式启动 Compose:
docker-compose up -d
想要检查运行的服务,使用ps
选项:
docker-compose ps
当 Compose 运行在后台模式,想要停止服务,运行:
docker-compose stop
想要停止,并且移除应用容器,和网络,使用down
选项:
docker-compose down
创建工作目录
/* 以下目录名称和层级是较方便执行的建议,可以根据配置文件具体配置进行调整 */
主要目录结构
//蓝色框框是文件
Dockerfile目录:子文件夹用服务名称命名,服务文件夹下面放dockerfile
Volumes 目录:挂载目录(容器里面的数据存放到宿主机的位置)。子文件夹用服务名称命名, 服务文件夹下面按需创建目录,其创建的目录就是要挂载的目录
配置文件
Dockerfile
基本指令释意:
FROM:基础镜像名
ENV :环境变量,供下文使用
(可不用)MAINTAINER:构建的用户
(可不用)LABEL:其他描述
COPY:把宿主机文件复制到容器目录
RUN:执行命令
Mysql
//基础镜像,如果本地有自动选择本地
FROM mysql:5.7.15
//一些备注信息
MAINTAINER " username "
# mysql的工作位置
ENV WORK_PATH /usr/local/
# 定义会被容器自动执行的目录
ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
# 初始化数据库的SQL文件
ENV FILE_0 initSql.sql
# 执行SQL
ENV INSTALL_DATA_SHELL docker-entrypoint.sh
# 把要执行的sql文件赋值到到MySQL的工作目录下
COPY ./$FILE_0 $WORK_PATH/
# 把要执行的shell文件放到/docker-entrypoint-initdb.d/目录下,容器会自动执行这个shell
COPY ./$INSTALL_DATA_SHELL $AUTO_RUN_DIR/
# 给执行文件增加可执行权限
RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DATA_SHELL && \
rm /etc/mysql/conf.d/mysql.cnf
# 需要替换的配置文件
ENV MY_CNF conf/my.cnf
COPY ./$MY_CNF /etc/mysql/conf.d/
Tomcat
//基础镜像,如果本地有自动选择本地
from tomcat:8.5.4
//一些备注信息
MAINTAINER username
LABEL version="8.5.4" description="tomcat部署"
#容器的工作路径
ENV WORK_PATH /usr/local/tomcat
#定义要替换的文件名
ENV USER_CONF_FILE_NAME tomcat-users.xml
#定义要替换的server.xml文件名
ENV SERVER_CONF_FILE_NAME server.xml
#定义需要替换的context.xml文件名
ENV WEBAPP_CONTEXT_FILE_NAME context.xml
ENV CONF_MANAGER manager.xml
#删除原文件
RUN rm $WORK_PATH/conf/$USER_CONF_FILE_NAME && \
rm $WORK_PATH/conf/$SERVER_CONF_FILE_NAME
#替换为新的文件
COPY ./conf/$SERVER_CONF_FILE_NAME $WORK_PATH/conf/
COPY ./conf/$USER_CONF_FILE_NAME $WORK_PATH/conf/
COPY ./conf/$CONF_MANAGER $WORK_PATH/conf/Catalina/localhost/
# 拷贝war文件夹下所有war包和config文件夹
#copy ./war/*.war $WORK_PATH/webapps/
copy ./config $WORK_PATH/config
docker-compose
基本指令释意:
Version:docker-compose的版本
Build:dockerfile目录
image
version: "3.5"
services:
tomcat:
build: ./dockerfile/tomcat/
image: hlhz_tomcat:0.1 #镜像名称和版本,如果没有build,会从本地用本镜像构建,如果本地也没有就从中央仓库拉取这个镜像
container_name: ${tomcat_container} #容器名
# env_file: //变量文件路径 默认取当级目录
# - ./.env
restart: always # 启动策略 docker启动服务就会启动
depends_on: #依赖于mysql和redis,目的是为了在mysql和redis启动之后再启动本容器
- mysql
volumes: #挂载
- ${tomcat_logs}:${tomcat_work_path}/logback
- ${tomcat_config_path}:/usr/local/tomcat/config
- ${tomcat_webapps}:/usr/local/tomcat/webapps
ports: #映射端口
- ${tomcat_port}:8080
networks: #桥接的网络名称
- hlhz_bridge
environment:
TZ: Asia/Shanghai #时区
mysql:
restart: always
build: ./dockerfile/mysql/
image: hlhz_mysql:0.1
container_name: ${mysql_container}
ports:
- ${mysql_port}:3306
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: 123456
TZ: Asia/Shanghai
volumes:
- ${mysql_data}:/var/lib/mysql
networks:
- hlhz_bridge
redis:
image: redis:6.0.6
container_name: ${redis_container}_redis
restart: always
networks:
- hlhz_bridge
ports:
- ${redis_port}:6379
volumes:
- ${redis_data}:/data
command: redis-server --appendonly yes --requirepass ${redis_password}
networks:
hlhz_bridge:
external: true
.env
作用: docker-compose 环境变量 使用格式 ${value }
tomcat_container=tomcat8
tomcat_conf=./volumes/tomcat/conf
tomcat_logs=./volumes/tomcat/logback
tomcat_port=28080
tomcat_webapps=./volumes/tomcat/webapps
tomcat_config_path=./volumes/tomcat/config
#容器工作路径
tomcat_work_path=/usr/local/tomcat
mysql_container=mysql5.7
mysql_port=33066
mysql_data=./volumes/mysql/data
mysql_conf=./volumes/mysql/conf
nginx_name=hlhz
nginx_config=./dockerfile/nginx/config/nginx.conf
nginx_port=80
redis_password=xapp
redis_container=hlhz
redis_data=./volumes/redis/data
redis_port=63799
启动docker-compose部署
1:创建桥接网络
docker network create --driver bridge hlhz_bridge
2镜像加速
创建文件
mkdir -p /etc/docker sudo tee /etc/docker/daemon.json
写入内容
{ "registry-mirrors": ["https://l7tk0eqx.mirror.aliyuncs.com"] }
重启
systemctl daemon-reload
重启
systemctl restart docker
3进入work 目录下,执行命令
docker-compose up -d