docker部署服务
数据卷挂载
启动时进行挂载数据卷同步:对共享目录进行拷贝,每个容器都有数据
docker run -it --name 启动的容器名 --volumes-from 父容器名称 镜像名
dockerFile
dockerFile : 构建文件,源代码
-
每个保留关键字(指令)必须是大写
-
执行顺序从上到下
-
(#)表示注释
-
每一个指令都会创建提交一个新的镜像层
FROM 基础镜像,一切从这里开始构建
MAINTAINER 镜像作者
RUN 镜像构建的时候需要运行的命令
ADD 添加内容
WORKDIR 镜像的工作目录
VOLUME 挂载目录
EXPOST 暴露端口配置
CMD 指定容器启动的时候运行的命令,只有最后一个生效
ENTRYPOINT 指定容器启动的时候运行的命令,可以追加命令
ONBUILD 当构建一个被继承的dockerFile时会运行,出发指令
COPY 类似add,将文件拷贝到镜像中
ENV 构建时设置环境变量
构建镜像
docker build -f dockerFile文件路径 -t 镜像名:版本号 .(当前目录)
如果构建文件命名为 DockerFile -f 可以不用加
样例:
# 基础镜像
FROM openjdk:8
# 系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
# 设置时区
ENV TZ=RPC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENV PARAMS="-XX:+HeapDumpOnOutOfMemoryError -Xms512m -Xmx512m "
ENV SERVER_IP=""
ENV SERVER_PORT=""
ENV EN=""
# 声明一个挂载点,容器内此路径会对应宿主机的某个文件夹
VOLUME /tmp
# 应用构建成功后的jar文件被复制到镜像内,名字也改成了app.jar
COPY ./app.jar /tmp/app.jar
# 启动容器时的进程
ENTRYPOINT ["sh","-c","java -jar -Dspring.profiles.active=$EN /tmp/app.jar --eureka.instance.ip-address=$SERVER_IP -server.port=$SERVER_PORT $PARAMS"]
微服务部署是需要手动指定服务实例ip , 不然feign会调用失败,参考如上,或者docker 网络使用host模式,,与宿主机共享ip ,启动时添加参数 -net=host
运行容器时如果出现如下错误
重启doker service docker restart
docker 网络
查看所有的docker 网络
docker network ls
docker-compose
安装:
curl -L https://get.daocloud.io/docker/compose/releases/download/2.3.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin
安装得版本需要根据docker 版本来决定,使用docker-compose出现命令找不到是版本不对应 , 重新安装docker 对应的docker-compose版本即可
重新安装:
在 /usr/local/bin操作
1. 删除刚下载的:
rm -rf docker-compose
2. 安装扩展源:
yum -y install epel-release
3. 安装python-pip模块:
yum install python-pip
4. 手动下载 docker-compose 到本地,然后上传到 linux 服务器的 /usr/local/bin 路径下
下载地址:
https://github.com/docker/compose/releases
5. 重命名:
mv docker-compose-linux-x86_64 docker-compose
6. 授权:
chmod +x ./docker-compose
7. 查看版本:
docker-compose --version
docker-compose.yml 格式:
version: 指定当前文件所对应的compsoe版本,主要有1、2.x和3.x
service: 服务列表
<service-name>: 服务名
image: 指定运行的镜像,可直接拉取已有镜像进行处理
build: 设置Dockerfile所在的文件夹,可处理需要用Dockerfile构建的镜像
content: 存放Dockerfile的路径
dockerfile: 指定构建的Dockerfile文件名
args: 构建参数,只能在构建过程中访问
container_name: 设置容器名称
restart: 重启策略,有no、always、no-failure、unless-stoped
ports: 暴露容器的端口,格式为宿主机端口:容器端口
- 8080:8080
hostname: 设置容器的主机名
volumns: 设置容器的挂载点,可以挂载到宿主机上,主要格式为宿主机路径:容器路径[:访问模式]
- /opt/data:/opt/data
- /var/lib/mysql:/var/lib/mysql:rw
volumns_from: 挂载另一个服务或容器的所有数据卷
- service_name
- container_name
environment: 设置环境变量
- RACK_ENV=development
networks: 配置网络
app_netwotk:
官网地址:https://docs.docker.com/compose/compose-file/
使用样例:
version: "3"
services:
payment:
build: .
container_name: factor
ports:
- 8084:8084
environment:
SERVER_IP: *************
SERVER_PORT: 8084
EN: test