Docker

Docker是一个开源的应用容器引擎,使用Go语言进行开发实现,基于Apache 2.0协议。

他可以将应用程序打包封装到一个容器中,该容器包含了应用程序的代码、运行环境、依赖库、配置文件等必需的资源,通过容器就可以实现方便快速并且与平台解耦的自动化部署方式,无论部署时的环境如何,容器中的应用程序都会运行在同一种环境下。

Docker包括镜像、容器、仓库,其目的是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的产品及其环境能够做到“一次封装,到处运行。

他的优势如下:

  • 更快速的交付和部署:Docker容器化的应用能以可靠的、一致的方式分发和消费,使得开发和运维团队可以专注于代码的构建和应用运行,而不是在应用环境、配置和工具中花费大量时间。

  • 更高效的虚拟化:Docker容器可跨平台运行,开发者只需一次编写,可在任意平台上部署应用,节省了大量时间。

  • 更轻松的迁移和扩展:Docker容器具有轻量级、可配置、自包含的特点,可以很方便地迁移到新的环境中。

  • 更简单的管理:Docker可以通过docker-compose轻松管理多个容器实例。

  • CPU/内存的低消耗:与虚拟机相比,Docker容器占用的资源更少,启动速度更快,对于CPU、内存等资源的消耗更低。

DockerFile

Dockerfile是Docker用来创建Docker镜像的文本文件,它包含一系列的命令和指令,这些命令用于构建Docker镜像,Docker通过读取Dockerfile中的指令自动生成映像。在Dockerfile中可以使用RUN、CMD、FROM、EXPOSE、ENV等指令。

举个例子,Right-House后台管理系统部署dockerFile:

# 打包
FROM node:16.17.1 as build-stage

RUN mkdir /opt/RH-admin
WORKDIR /opt/RH-admin

COPY /RH-admin/package.json /opt/RH-admin/package.json

RUN yarn install

COPY /RH-admin /opt/RH-admin

RUN npm run build

# 部署nginx
FROM nginx:1.25.2 as production-stage

COPY --from=build-stage /opt/RH-admin/dist /opt/dist
# 替换配置文件
RUN rm /etc/nginx/conf.d/default.conf
RUN rm /etc/nginx/nginx.conf
COPY /docker/nginx.conf /etc/nginx/

CMD ["nginx", "-g", "daemon off;"]

DockerCompose

DockerCompose是一种编排服务,基于Python语言实现,是一个用于在Docker上定义并运行复杂应用的工具。可以将多个Docker容器编排到一个容器中,并且可以通过一个配置文件进行定义,解决了容器之间的依赖关系,使容器的操作能够批量的、可视的执行。

举个例子,Right-House整站部署Yml文件:

version: '3'
services:
 
  right_house_server:
    build:
        context: ../
        dockerfile: docker/RH-server-Dockerfile
    container_name: right-house-server
    expose:
        - "7001"
    restart: 'on-failure'
    depends_on:
            - mysql
            - redis
            - minio
    network_mode: "host"


  right_house_admin:
    build:
        context: ../
        dockerfile: docker/RH-admin-Dockerfile
    container_name: right-house-admin
    expose:
        - "8088"
    restart: 'on-failure'
    network_mode: "host"

  mysql:
    image: mysql:8.0.33
    command:
            - --default-authentication-plugin=mysql_native_password
    network_mode: "host"
    restart: 'on-failure'
    container_name: right-house-mysql
    expose:
        - "3306"
    volumes:
            - './init-sql:/docker-entrypoint-initdb.d'
           # - '../docker/data/mysql/conf/my.cnf:/etc/my.cnf'
           # - '../docker/data/mysql/log:/var/log/mysql'
            - '/etc/timezone:/etc/timezone:ro'
            - '/etc/localtime:/etc/localtime:ro'
            - '../docker/data/mysql/data:/var/lib/mysql'

    environment:
             - MYSQL_ROOT_PASSWORD=right_house_sql_980128

  redis:
    image: redis:7.0.12
    network_mode: "host"
    restart: 'on-failure'
    expose:
        - "6379"
    container_name: right-house-redis
    volumes:
            - '../docker/data/redis/data:/data'
            - '../docker/data/redis/conf/redis.conf:/etc/redis/redis.conf'
            - '../docker/data/redis/logs:/logs'
    command: redis-server  /etc/redis/redis.conf --requirepass right_house_redis_980128


  minio:
    image: minio/minio:RELEASE.2023-05-04T21-44-30Z
    network_mode: "host"
    restart: 'on-failure'
    container_name: right-house-minio
    expose:
        - "9000"
        - "9001"
    command: server /data --console-address :9000 --address :9001
    volumes:
            - '../docker/data/redis/data:/data'
    environment:
                - MINIO_ROOT_USER=right_house_minio
                - MINIO_ROOT_PASSWORD=right_house_minio_980128
      

图形化Docker

高效运维中提到过1panel软件,1panel几乎所有都是建立在Docker之上的,同时也给Docker提供了图形化操作界面,用来操作Docker镜像、容器、编排、网络、存储卷、仓库、配置。

2.png