本地镜像相关操作
将镜像打包到本地
docker save mysql:5.6 > /home/mysql5.6.tar.gz
加载本地镜像包
docker load < /home/mysql5.6.tar.gz
构建docker镜像
这种方式需要配置dockerfile文件
docker build -t 镜像名称:版本号 .
构建镜像的Dockerfile说明
我们直接通过示例来说明。
示例1: 简单的Java的jar包进行镜像制作
# 基础镜像
FROM java:8-jdk-alpine
#拷贝文件target目的下的文件到镜像容器的/usr/app/下面
COPY ./target/message-server-1.0.0.jar /usr/app/
#设置工作目录
WORKDIR /usr/app
# 运行命令
RUN sh -c 'touch message-server-1.0.0.jar'
# 启动参数
ENTRYPOINT ["java", "-jar", "message-server-1.0.0.jar"]
示例2:多次编译打包(前端node项目)
将项目的代码拷贝到镜像中,然后设置node环境进行编译;之后设置nginx环境,将编译后的文件放到nginx的目录下去。
# 设置基础镜像node
FROM node:alpine as builder
# 设置工作目录,没有会创建的
WORKDIR '/build'
# 拷贝相关的项目资源文件
COPY app ./app
COPY resources ./resources
COPY third_party ./third_party
# 设置工作目录,没有会创建的
WORKDIR '/build/app'
# 执行编译构建命令
RUN npm install
RUN npm rebuild node-sass
RUN npm run build
RUN ls /build/app/dist
# 第二次镜像设置为nginx
FROM nginx
EXPOSE 80
# 将刚刚打包编译的文件拷贝到nginx的目录下去
COPY /build/app/dist /usr/share/nginx/html
使用DockerCompose来构建镜像
docker-compose.yml文件示例
version: '3.7'
services:
account-service:
# 构建镜像的dockerfile路径
build: ./account-svc
# 镜像的名称
image: boboweike/account-svc
# 环境变量
environment:
- SPRING_PROFILES_ACTIVE
- SERVER_PORT
- SIGNING_SECRET
- SENTRY_DSN
- EMAIL_SERVICE_ENDPOINT
- COMPANY_SERVICE_ENDPOINT
- BOT_SERVICE_ENDPOINT
- INTERCOM_ACCESS_TOKEN
- ACCOUNT_DATASOURCE_URL
- ACCOUNT_DATASOURCE_USERNAME
- ACCOUNT_DATASOURCE_PASSWORD
# 镜像依赖,这样会在依赖镜像启动后才会启动
depends_on:
- email-service
# 网络配置
networks:
# 内网配置
- internal_access
# 外网配置
- external_access # db access
faraday-service:
build: ./faraday
image: boboweike/faraday-svc
ports:
- 80:80
environment:
- SPRING_PROFILES_ACTIVE
- SERVER_PORT
- SENTRY_DSN
- SIGNING_SECRET
depends_on:
- account-service
- app-service
networks:
- internal_access
- external_access
app-service:
build:
context: ./frontend
dockerfile: app/Dockerfile
image: boboweike/app-spa
networks:
- internal_access
# 网络配置
networks:
internal_access:
internal: true
external_access:
同时为了区分方便,我们通常会有一个.evn的文件,在里面可以配置一些公共的参数,然后在docker-compose.yml文件就可以直接使用了。
SPRING_PROFILES_ACTIVE=test
SERVER_PORT=80
EMAIL_SERVICE_ENDPOINT=http://email-service
COMPANY_SERVICE_ENDPOINT=http://company-service
ACCOUNT_SERVICE_ENDPOINT=http://account-service
BOT_SERVICE_ENDPOINT=http://bot-service
SMS_SERVICE_ENDPOINT=http://sms-service
SENTRY_DSN=https://80aaf4ae889b414f9fe72e3904cd5246@sentry.io/1380198
SIGNING_SECRET=your_signing_secret
INTERCOM_ACCESS_TOKEN=YOUR_INTERCOM_ACCESS_TOKEN
INTERCOM_APP_ID=TBD
INTERCOM_SIGNING_SECRET=TBD
ALIYUN_ACCESS_KEY=YOUR_ALIYUN_ACCESS_KEY
ALIYUN_ACCESS_SECRET=YOUR_ALIYUN_ACCESS_SECRET
RECAPTCHA_PUBLIC=test-recaptcha-public
RECAPTCHA_PRIVATE=test-recaptcha-private
ACCOUNT_DATASOURCE_URL=jdbc:mysql://host.docker.internal:3306/staffjoy_account?useUnicode=true&characterEncoding=utf-8
ACCOUNT_DATASOURCE_USERNAME=root
ACCOUNT_DATASOURCE_PASSWORD=root
COMPANY_DATASOURCE_URL=jdbc:mysql://host.docker.internal:3306/staffjoy_company?useUnicode=true&characterEncoding=utf-8
COMPANY_DATASOURCE_USERNAME=root
COMPANY_DATASOURCE_PASSWORD=root
相关命令
# 构建
docker-compose build
# 一键启动
docker-compose up
# 查看状态
docker-compose ps
# 下线所有的
docker-compose down