
Docker、DockerCompose 相关
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镜像、容器、编排、网络、存储卷、仓库、配置。