Docker
Docker介绍 & 为什么要使用Docker
(略,有兴趣的小火鸡可以补充)
术语
image
,镜像,类似面向对象中的一个类container
,容器,类似面向对象中一个类实例化的一个实例,镜像对容器可以是一对多,比如用mysql8.0.25
镜像部署两个或多个mysql8.0.25
容器,但是数据是隔离的,开发过程这种事挺常见- 其他:不重要啦
开始
- 安装:笔者Mac直接安装
Docker
,Win
操作也类似,官网下载安装,新手不建议依赖GUI操作,多用CLI执行 - 拉取docker官方文档docker镜像:
docker/getting-started
docker run -d -p 81:80 docker/getting-started
复制代码
- -d,detached mode,后台运行
- -p,port,端口,本机端口:Docker内部端口
- -d -p = -dp,即:
docker run -dp 81:80 docker/getting-started
复制代码
- 运行后打开:http://localhost:81/,映射到Docker的80端口,该服务不要停止或删除容器,后面Demo有用
Demo
Demo(前端项目)Docker化(制作成镜像,用于分享或发布)
- 下载Demo代码,解压
- 切换目录:
cd 解压目录/app
- 创建
Dockerfile
:touch Dockerfile
:
FROM node:12-alpine
RUN apk add --no-cache python g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
复制代码
- 构建成一个新的镜像(
.
意思为当前目录):
docker build -t getting-started .
复制代码
该命令会自动下载并安装环境依赖,最后安装npm依赖并运行
- 运行:
docker run -dp 3001:3000 getting-started
复制代码
- 运行后打开:http://localhost:3001/
分享
首先登录Docker Hub(没注册的,注册一个账号),以下YOUR-USER-NAME
为你的账号名称;登录后,点击Create Repository:
创建(需要设置为公开,方便测试):
- 登录:
docker login -u YOUR-USER-NAME
,输入密码 - 打tag:
docker tag getting-started YOUR-USER-NAME/getting-started
- 推送:
docker push YOUR-USER-NAME/getting-started
- 上传成功后,刷新页面:
- 拉取刚发布的镜像:
docker run -dp 3001:3000 YOUR-USER-NAME/getting-started
- 运行后打开:http://localhost:3001/
分享成功了
DB持久化
删除后重新部署容器,内部数据会清空,需要把数据库放在docker的vm里面来管理。
- 创建卷(存储空间):
docker volume create todo-db
- 创建容器时指定卷:
docker run -dp 3001:3000 -v todo-db:/etc/todos getting-started
- 查看卷(Mountpoint位置在docker vm里面,物理硬盘无法找到,要进入docker vm查看):
docker volume inspect todo-db
[
{
"CreatedAt": "2019-09-26T02:18:36Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/todo-db/_data",
"Name": "todo-db",
"Options": {},
"Scope": "local"
}
]
复制代码
Dev热更
使用bind mounts
,我们可以控制主机上的精确装载点。我们可以使用它来持久化数据,但通常用于向容器中提供额外的数据。在处理应用程序时,我们可以使用bind mount
将源代码挂载到容器中,让容器查看代码更改、响应,并让我们立即查看更改。
由于演示项目是node
项目,对于基于node
的应用程序,nodemon
是一个很好的工具,可以监视文件更改,然后重新启动应用程序。在大多数其他语言和框架中也有类似的工具。
- 确保您以前没有运行任何启动容器,
切换到项目目录
- 运行:
docker run -dp 3000:3000 \
-w /app -v "$(pwd):/app" \
node:12-alpine \
sh -c "yarn install && yarn run dev"
复制代码
PowerShell
docker run -dp 3000:3000 `
-w /app -v "$(pwd):/app" `
node:12-alpine `
sh -c "yarn install && yarn run dev"
复制代码
- 使用
docker logs-f < container-id >
监视日志 - 变更代码即可热更
常用命令速查
查看镜像:docker image ls
查看容器:docker ps
监视日志:docker logs-f < container-id >
特别注意
- 注意端口占用,如果占用启动命令将失败,停止/删除相应容器,本机其他服务占用的需要停掉或执行命令时改为其他端口
各个大帅哥,大漂亮,四连连鼓励下:点赞、留言、收藏、关注,答应我!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END