赞
踩
基础镜像先使用官方的openjdk:11镜像,之后看情况自制对应的镜像。
拉取镜像
docker pull openjdk:11
默认是Debian的大小为654MB,需要自制成Centos7的。
制作CentOs7镜像
拉取CentOs:7.9.2009镜像
docker pull centos:7.9.2009
Dockerfile文件
- # 基础镜像
- FROM centos:7.9.2009
- # 创建java文件所放目录
- RUN mkdir /usr/local/java
- # 将jdk压缩文件复制到镜像中,它将自动解压缩tar文件
- ADD jdk-11.tar.gz /usr/local/java/
- # 设置环境变量
- ENV JAVA_HOME /usr/local/java/jdk-11
- ENV PATH $JAVA_HOME/bin:$PATH
生成镜像
docker build -t openjdk-centos7:11 .
生成镜像大小为604MB
微服务镜像
整体目录结构如下:
- ├── .env
- ├── docker-compose.yml
- ├── Dockerfile
- └── service
- ├── aec-service-user-1.0.jar
- ├── config
- │ ├── application-mqtt.yml
- │ ├── application-rabbitmq.yml
- │ ├── application-service.yml
- │ ├── application-user.yml
- │ └── application.yml
- ├── service-name
- ├── start.sh
- └── stop.sh
制作微服务镜像
Dockerfile文件内容如下:
- # 基础镜像
- FROM openjdk-centos7:11
- # 创建工作目录
- RUN mkdir -p /home/data/service
- # 拷贝文件到指定目录下
- COPY service /home/data/service
- # 容器工作目录
- WORKDIR /home/data/service
- # 启动命令
- CMD ["sh", "start.sh"]
启动脚本start.sh
- ## 其中启动脚本内容如下:
- #!/bin/sh
-
- FOLDER_PATH=/home/data/service
-
- cd $FOLDER_PATH
-
- JAR_NAME=`cat service-name`
-
- ## ${PARAMS}为通过docker传入的环境变量
- /usr/local/java/jdk-11/bin/java -jar $FOLDER_PATH/$JAR_NAME ${PARAMS}
生成镜像
docker build -t aec-service-user:1.0.0.0 .
测试镜像
- # 创建并启动容器
- docker run -dit --name aec-service-user-1.0.0.0 aec-service-user:1.0.0.0
- # 进入容器查看
- docker exec -it aec-service-user-1.0.0.0 /bin/bash
- # 通过查看日志可以得知容器启动正常,那么可以将其先删除了
- docker stop 容器id/名字
- docker rm 容器id/名字
编写微服务Docker-Compose
docker-compose.yml文件内容如下
- services:
- aec-service-user:
- logging:
- driver: none
- container_name: aec-service-user-${SERVICE_VERSION}
- image: aec-service-user:${SERVICE_VERSION}
- restart: always
- ports:
- - "$SERVICE_EXPORT_PORT:29999"
- volumes:
- - $SERVICE_EXPORT_FOLDER:/home/data/logs
- - /etc/localtime:/etc/localtime:ro
- environment:
- TZ: Asia/Shanghai
- PARAMS: "
- --server.port=29999
- "
- version: '3.1'
环境变量文件.env内容如下:
- SERVICE_VERSION=1.0.0.0
- SERVICE_EXPORT_PORT=14000
- SERVICE_EXPORT_FOLDER=/home/xxx/dockerVolume/aec-service-user
以上文件解析如下:
1、docker-compose服务名为aec-service-user
2、创建容器名为aec-service-user-1.0.0.0
3、关闭docker日志
4、使用的镜像为aec-service-user:1.0.0.0
5、重启策略为:在容器退出时总是重启容器
6、映射端口有:将容器内部的29999映射为主机的14000
7、数据卷映射有:将主机的/home/xxx/dockerVolume/aec-service-user和容器的/home/data/logs做映射;将主机的/etc/localtime和容器的/etc/localtime做只读映射(容器中无法修改该文件)
8、设置容器的环境变量有TZ和PARAMS
启动服务
- docker-compose.yml up -d
-
- ## 这个命令需要在docker-compose.yml目录执行
- ## -d表示后台运行
启动之后将会有自动创建容器并将其启动。
其他常用docker-compose命令有:
# 在后台启动所有服务 docker-compose up -d # 列出项目中目前的所有容器 docker-compose ps # 停止正在运行的容器,可以通过docker-compose start 再次启动 docker-compose stop # 停止和删除容器、网络、卷、镜像 # --rmi all 删除删除compose文件中定义的所有镜像 docker-compose down # 查看服务容器的输出 docker-compose logs # 服务容器一旦构建后,将会带上一个标记名。可以随时在项目目录下运行docker-compose build来重新构建服务 docker-compose build # 拉取服务依赖的镜像 docker-compose pull # 重启项目中的服务 docker-compose restart # 删除所有(停止状态的)服务容器 # –f, –force,强制直接删除,包括非停止状态的容器 docker-compose rm # 启动已经存在的服务容器 docker-compose start # 在指定服务上执行一个命令 docker-compose run # 设置指定服务运行的容器个数。通过service=num的参数来设置数量 docker-compose scale # 暂停/恢复一个服务容器 docker-compose pause/unpause # 验证并查看compose文件配置 docker-compose config # 显示某个容器端口所映射的公共端口 docker-compose port
镜像导入导出
- # 导出
- docker save aec-service-user:1.0.0.0 > aec-service-user-1.0.0.0.tar.gz
-
- # 导入
- docker load < aec-service-user-1.0.0.0.tar.gz
通过容器导入导出
以下介绍通过容器进行导入导出,目前来说并不会用上就是。
- # 导出
- docker export -o aec-service-user-container-1.0.0.0.tar.gz aec-service-user-1.0.0.0
-
- # 导入(导入成镜像,然后通过镜像启动容器)
- docker import aec-service-user-container-1.0.0.0.tar.gz aec-service-user:1.0.0.0
-
- # 启动容器
- ## 此时直接去启动会报错
- ## docker: Error response from daemon: No command specified.
- ## 需要加上原本镜像的启动命令
- docker run -dit --name aec-service-user-1.0.0.0 aec-service-user:1.0.0.0 sh start.sh
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。