PHP开发PHP经验分享docker

【Docker】快速入门之Docker基本概念、Dockerfi

2022-02-27  本文已影响0人  Bryanz

docker是方便项目环境部署的虚拟化技术,每个docker容器有自己的文件系统和网络接口。本文将参考官网文档,主要介绍docker的基本概念通过Dockerfile构建镜像镜像共享volume mountdocker networkdocker-composelayer caching,方便快速入门docker。

1.docker基本概念

2.基于Dockerfile构建镜像
创建镜像容器的第一种方式是:docker run image,如果本地image不存在,则会自动从docker hub上拉取镜像。第二种方式就是通过Dockerfile文件构建镜像。
Dockerfile示例

# syntax=docker/dockerfile:1
FROM node:12-alpine
WORKDIR /app
RUN yarn install --production
COPY . .
CMD ["node", "src/index.js"]

Dockerfile是关于指令的文件,可查阅官方文档了解每个指令的作用。
上述指令分别为:
FROM:当前要构建的镜像的,来源image,相当于父镜像。
WORKDIE: 工作目录。
RUN:镜像执行的语句。
COPY:拷贝宿主机的文件至镜像。
CMD:给正在运行的容器提供初始值。

3.镜像共享repository
类似Github,不同主机可以通过pull/push镜像至Docker Hub的repository来共享image。

4.named volume与volume mount
volume是实现容器和宿主机数据同步的一种方式,有两种类型:named value和volume mount

[
    {
        "CreatedAt": "2022-02-26T07:50:45Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/todolist/_data",
        "Name": "todolist",
        "Options": {},
        "Scope": "local"
    }
]

其中,Mountpoint挂载点即宿主机存储volume数据的位置。

5.docker network
由于docker容器彼此独立,容器间无法直接通信。但不同容器需要通信完成服务,比如Nginx-Php应用容器需要与Mysql容器通信,因此需要通过docker network进行容器通信,同一网络下的容器可进行通信,不同网络下的容器无法通信。

6.docker-compose运行容器服务
是不是觉得一个个开启容器的方式优点麻烦,docker-compose工具就是用来解决该问题,可以理解它是管理容器运行的工具。该工具可以根据yml配置文件,一行简单的命令即可开启多个相关容器,实现应用服务部署(比如LNMP服务搭建)。
安装docker-compose很简单就不介绍了。

version: "3.7"
services:
  app:
    image: node:12-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos

  mysql:
    image: mysql:5.7
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos

volumes:
  todo-mysql-data:

进入docker-compose.yml所在目录。
运行应用服务:
docker-compose up
配置文件解析:创建volume用于持久化Mysql数据,并开启app容器和Mysql容器。

关于network:


2.compose-network

需要注意的是,compose文件中并没有指定network,但docker-compose会自动创建network,并给每个容器分配

可以打开localhost:3000运行下该项目(测试的是官网todolist示例应用),如下图所示。


3.todoList-app

7.layer caching镜像层缓存依赖
关于第二点Dockerfile构建镜像的补充优化,其中有一层指令是下载依赖,意味着每一次build镜像时都会去下载依赖,即使只是修改了一行无关依赖的业务代码,显然这很低效不合理。优化方式即layer caching,进行指定层的缓存,实现方式,利用copy指令复制依赖文件实现layer caching。
示例:COPY package.json yarn.lock ./
同时需要注意增加.dockerignore文件,根据具体情况指定忽略的copy文件

以上是docker的基础知识以及基本使用方法,想要深入了解更多特性可以参考官网文档。

上一篇 下一篇

猜你喜欢

热点阅读