制作自己的镜像
1.Wsl2安装CentOS7
2.Docker 简介和安装
3.Docker 快速安装软件
4.制作自己的镜像
5.Docker-Compose发布与部署
示例项目代码:https://github.com/gzyunke/test-docker
示例项目代码: D:\projects\workspace_web\GuoguWebadmin
这是一个 Nodejs + express 写的 后端接口 项目软件依赖:nodejs项目依赖库:express …
编写 Dockerfile
FROM node:14 MAINTAINER easydoc.net # 复制代码 ADD . /app # 设置容器启动后的默认运行目录 WORKDIR /app # 运行命令,安装依赖 # RUN 命令可以有多个,但是可以用 && 连接多个命令来减少层级。 # 例如 RUN npm install && cd /app && mkdir logs RUN npm install --registry=https://registry.npm.taobao.org # CMD 指令只能一个,是容器启动后执行的命令,算是程序的入口。 # 如果还需要运行其他命令可以用 && 连接,也可以写成一个shell脚本去执行。 # 例如 CMD cd /app && ./start.sh CMD node app.js
实用技巧:如果你写 Dockerfile 时经常遇到一些运行错误,依赖错误等,你可以直接运行一个依赖的底,然后进入终端进行配置环境,成功后再把做过的步骤命令写道 Dockerfile 文件中,这样编写调试会快很多。例如上面的底是
node:11
,我们可以运行docker run -it -d node:11 bash
,跑起来后进入容器终端配置依赖的软件,然后尝试跑起来自己的软件,最后把所有做过的步骤写入到 Dockerfile 就好了。掌握好这个技巧,你的 Dockerfile 文件编写起来就非常的得心应手了。
Build 为镜像(安装包)和运行
编译 docker build -t test:v1 .
-t
设置镜像名字和版本号命令参考:https://docs.docker.com/engine/reference/commandline/build/
运行 docker run -p 8080:8080 --name test-hello test:v1
-p
映射容器内端口到宿主机--name
容器名字-d
后台运行命令参考文档:https://docs.docker.com/engine/reference/run/
目录挂载
现存问题
使用 Docker 运行后,我们改了项目代码不会立刻生效,需要重新
build
和run
,很是麻烦。容器里面产生的数据,例如 log 文件,数据库备份文件,容器删除后就丢失了。
几种挂载方式
-
bind mount
直接把宿主机目录映射到容器内,适合挂代码目录和配置文件。可挂到多个容器上 -
volume
由容器创建和管理,创建在宿主机,所以删除容器不会丢失,官方推荐,更高效,Linux 文件系统,适合存储数据库数据。可挂到多个容器上 -
tmpfs mount
适合存储临时文件,存宿主机内存中。不可多容器共享。
文档参考:https://docs.docker.com/storage/
挂载演示
bind mount
方式用绝对路径 -v D:/code:/app
volume
方式,只需要一个名字 -v db-data:/app
示例:docker run -p 8080:8080 --name test-hello -v D:/code:/app -d test:v1
注意! 因为挂载后,容器里的代码就会替换为你本机的代码了,如果你代码目录没有
node_modules
目录,你需要在代码目录执行下npm install --registry=https://registry.npm.taobao.org
确保依赖库都已经安装,否则可能会提示“Error: Cannot find module ‘koa’” 如果你的电脑没有安装 nodejs,你需要安装一下才能执行上面的命令。
多容器通信
学习目标
项目往往都不是独立运行的,需要数据库、缓存这些东西配合运作。这节我们把前面的 Web 项目增加一个 Redis 依赖,多跑一个 Redis 容器,演示如何多容器之间的通信。
创建虚拟网络
要想多容器之间互通,从 Web 容器访问 Redis 容器,我们只需要把他们放到同个网络中就可以了。
文档参考:https://docs.docker.com/engine/reference/commandline/network/
演示
创建一个名为test-net
的网络:
docker network create test-net
运行 Redis 在 test-net
网络中,别名redis
转载请注明来源:制作自己的镜像