【不废话系列】1.Docker快速入门1

Docker

Docker介绍 & 为什么要使用Docker
(略,有兴趣的小火鸡可以补充)

术语

  • image,镜像,类似面向对象中的一个类
  • container,容器,类似面向对象中一个类实例化的一个实例,镜像对容器可以是一对多,比如用mysql8.0.25镜像部署两个或多个mysql8.0.25容器,但是数据是隔离的,开发过程这种事挺常见
  • 其他:不重要啦

开始

  1. 安装:笔者Mac直接安装DockerWin操作也类似,官网下载安装,新手不建议依赖GUI操作,多用CLI执行
  2. 拉取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
复制代码
  1. 运行后打开:http://localhost:81/,映射到Docker的80端口,该服务不要停止或删除容器,后面Demo有用

Demo

Demo(前端项目)Docker化(制作成镜像,用于分享或发布)

  1. 下载Demo代码,解压
  2. 切换目录:cd 解压目录/app
  3. 创建Dockerfiletouch 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"]
复制代码
  1. 构建成一个新的镜像(.意思为当前目录):
docker build -t getting-started .
复制代码

该命令会自动下载并安装环境依赖,最后安装npm依赖并运行

  1. 运行:
docker run -dp 3001:3000 getting-started
复制代码
  1. 运行后打开:http://localhost:3001/

todo-list-empty.png

分享

首先登录Docker Hub(没注册的,注册一个账号),以下YOUR-USER-NAME为你的账号名称;登录后,点击Create Repository:

create.png

创建(需要设置为公开,方便测试):
111.png

  1. 登录:docker login -u YOUR-USER-NAME,输入密码
  2. 打tag:docker tag getting-started YOUR-USER-NAME/getting-started
  3. 推送:docker push YOUR-USER-NAME/getting-started
  4. 上传成功后,刷新页面:

suc.png

  1. 拉取刚发布的镜像:docker run -dp 3001:3000 YOUR-USER-NAME/getting-started
  2. 运行后打开:http://localhost:3001/

todo-list-empty.png
分享成功了

DB持久化

删除后重新部署容器,内部数据会清空,需要把数据库放在docker的vm里面来管理。

  1. 创建卷(存储空间):docker volume create todo-db
  2. 创建容器时指定卷:docker run -dp 3001:3000 -v todo-db:/etc/todos getting-started
  3. 查看卷(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是一个很好的工具,可以监视文件更改,然后重新启动应用程序。在大多数其他语言和框架中也有类似的工具。

  1. 确保您以前没有运行任何启动容器,切换到项目目录
  2. 运行:
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"
复制代码
  1. 使用docker logs-f < container-id >监视日志
  2. 变更代码即可热更

常用命令速查

查看镜像:docker image ls
查看容器:docker ps
监视日志:docker logs-f < container-id >

特别注意

  • 注意端口占用,如果占用启动命令将失败,停止/删除相应容器,本机其他服务占用的需要停掉或执行命令时改为其他端口

各个大帅哥,大漂亮,四连连鼓励下:点赞、留言、收藏、关注,答应我!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享