Docker项目实战

简介

今年五月份疫情严重居家办公,项目交付遇到阻力。这个时候开始调研使用docker部署系统,之前了解过docker,只是用来搭建环境,这次开始全面使用docker。经过项目实战可以编写DockerFile,使用docker-composer部署项目。本文主要记录使用docker的过程。

初始Docker

前面几篇文章提到过搭建docker环境,体验到docker与传统搭建项目的方便性。使用docker搭建nginx负载均衡,搭建php环境等等

docker镜像制作

项目使用GoLang语言开发,数据库使用MySQL,下载ubuntu基础镜像, 运行ubuntu容器,之后进入容器部署go后端和前端文件,安装MySQL。项目正常启动之后打包容器生成一个镜像。这个时候会发现一个严重的问题,使用这种方式生成的镜像会特别大。

Dockerfile 制作镜像

# Base image
FROM ubuntu:18.04

# Labels and Credits

RUN apt update -y \
&& apt install -y  nginx \
&& apt  install  -y mysql-server\
&& export DEBIAN_FRONTEND=noninteractive\
&& apt install -y tzdata \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& rm -rf /var/lib/apt/lists/*
##复制nginx配置文件
COPY  ./default   /etc/nginx/sites-available/

COPY  ./vhost.conf  /etc/nginx/conf.d/

##复制前端文件

COPY dist  /usr/share/nginx/dist/

COPY ./admin/dist  /usr/share/nginx/admin/dist/



COPY ./entrypoint.sh  /opt/

## 复制go文件
COPY ./es  /opt/es/

COPY  ./nginx.conf  /etc/nginx/

ENTRYPOINT ["/opt/entrypoint.sh"]

docker-composer

第一种方式使用一个Dockerfile文件把所有服务都安装再一个镜像中。这样可能会存在数据库文件的丢失,最后采用docker-composer的方式进行部署。

version: '3.8'

services:
  web:
    image: "es-composer:web"
    container_name: web-test
    entrypoint: /opt/entrypoint.sh
    command: /bin/bash -c bash
    tty: true
    ports:
      - 80:80
      - 8080:8080
    depends_on:
      - mysql
    networks:
      - es_network

  mysql:
    restart: always
    image: "es-composer:mysql"
    container_name: mysql-test
    expose:
      - 3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: @fdsgrr
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    volumes:
      - /usr/local/docker/mysql/conf:/etc/mysql
      - /usr/local/docker/mysql/logs:/var/log/mysql
      - /usr/local/docker/mysql/data:/var/lib/mysql
    networks:
      - es_network

networks:
  es_network:

你可能感兴趣的:(docker,容器,运维)