Docker镜像相关


本地镜像相关操作

将镜像打包到本地

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 --from=builder /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

特别提醒:扫码关注微信订阅号'起岸星辰',实时掌握IT业界技术资讯! 转载请保留原文中的链接!
  目录