美文网首页docker
初次使用Docker

初次使用Docker

作者: Yo_5529 | 来源:发表于2020-09-19 21:31 被阅读0次

本文档通过对该官方案例进行实践,并对内容总结。

01 Docker运行

运行容器的命令

docker run -d -p 80:80 docker/getting-started

参数介绍

  • -d (detached mode)容器在后台运行
  • -p 80:80 (port)映射本机端口到容器的端口
  • docker/getting-started 需要运行的镜像

上面的命令可以进行缩写

docker run -dp 80:80 docker/getting-started

Docker控制面板

安装了Docker软件后可以看到此页面,该面板管理所有的容器,也可以使用命令行查看 docker ps

什么是容器

容器是一个独立的进程。

什么是镜像

镜像为容器提供运行环境。

02 第一个应用程序

Dockerfile

Dockerfile是一个脚本,用来创建一个容器镜像。

Dockerfile应用

创建一个dockerfile在项目的根目录下。本项目运行在node.js下,因此在package.json的同级目录下创建Dockerfile(注意,此文件没有后缀)

FROM node:12-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]

在项目的根目录下,使用下面命令创建一个Docker镜像

docker build -t getting-started .

该命令会使用Dockerfile来创建镜像。
接下来来分析Dockerfile文件的步骤

  1. From 从node镜像开始构建项目,若没有下载node镜像,则自动下载
  2. 镜像下载完成后,复制项目到镜像中WORKDIR是指镜像中的位置,COPY . .将当前项目的文件,复制到镜像中的WORKDIR下。并且安装依赖.
  3. CMD命令则是第一次运行容器的时候,默认运行的命令.
  4. 最后,-t对我们对镜像进行命名,命令最后一个.是指在当前目录下寻找Dockerfile文件
FROM node:12-alpine // 从node镜像中构建我们的项目,如果没有node镜像,则系统会自动下载node镜像
WORKDIR /app  // 镜像中的目录
COPY . . // 将当前位置下的文件复制到 WORKDIR目录下去
RUN yarn install --production // 安装依赖
CMD ["node", "src/index.js"] // 初次运行Docker默认运行的命令

03 更新项目

更新项目需要

  1. 重新build项目
  2. 使用run运行项目

更新项目之前,需要先暂停之前运行的项目(使用命令行或者Docker客户端,这里使用命令行)

  1. 获取id镜像
docker ps
  1. 暂停镜像
docker stop <the-container-id>
  1. 删除镜像
docker rm <the-container-id>

可以使用一个命令实现 暂停和删除镜像

docker rm -f <the-container-id>

04 分享你的镜像

分享你的镜像,首先需要在DockerHub创建一个仓库。

发布你的镜像

  1. 在发布镜像之前,需要在你的主机上登陆DockerHub账号。
docker login -u Your-User-Name
  1. 然后使用-t给你的镜像一个新的名字

使用方法

docker tag old-container-name new-container-name

案例

docker tag getting-started YOUR-USER-NAME/getting-started
  1. 最后使用下面命令推送
docker push YOUR-USER-NAME/getting-started

05 数据持久化

不同容器之前的数据不互通,即使在同一个镜像里面。

练习

docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"

使用exec执行容器里面命令

docker exec <container-id> cat /data.txt

在同一个镜像中启动另一个容器

docker run -it ubuntu ls 
  • -i 暂时不知道作用
  • -t (terminal)分配终端
  • -it 容器可以在终端运行,不会立即停止。即我们可以在终端中访问容器环境。

Container Volumes

Volumes提供了将容器的特定文件系统路径连接回主机的能力.如果容器中挂载了该目录,容器中进行修改,主机中也会进行修改。

有两种类型的Volumes。

  • Bind mounts
  • named volumes

named volumes

首先是命名一个Volume。命名Volume相当于创建一桶数据。Docker保存到物理位置,我们只需要知道该Volume的名字即可。

创建一个Volume

docker volume create todo-db

使用-v将Volume绑定并挂载到App中

docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started

这里将todo-db挂载到/etc/todos中。

查看Volume存储在本地的位置,使用下面命令

docker volume --help
➜  app docker volume inspect todo-db
[
    {
        "CreatedAt": "2020-09-18T09:10:57Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/todo-db/_data",
        "Name": "todo-db",
        "Options": {},
        "Scope": "local"
    }
]
➜  app

06 实时在容器里面更新项目

volumes有两种类型

  • Bind mounts
  • named volumes

这两种方式比较

UMPMi9

开始开发者模式容器

开发流程

  • 挂载我们的源代码到容器中
  • 安装所有依赖,包括开发依赖
  • 使用nodemon模式观察文件变化

进行开发

docker run -dp 3000:3000 \
    -w /app -v "$(pwd):/app" \
    node:12-alpine \
    sh -c "yarn install && yarn run dev"
  • -dp 3000:3000 在后台运行并且创建映射
  • -w /app 设置工作目录,容器一启动就自动进入到该目录
  • -v "$(pwd):/app" (==bind mode==)挂载当前代码到容器的/app目录下
  • node:12-alpine 使用的镜像。
  • sh -c "yarn install && yarn run dev"启动shell使用命令安装依赖然后运行该项目

使用docker logs -f <container-id>查看当前的日志

当开发完成后,使用docker build -t xxxx构建新的镜像。

其他

  1. nodemon是什么

Nodemon是一个实用程序,它将监视源中的任何更改并自动重新启动服务器。 Nodemon不会对你的代码产生额外的更改,它只是node命令的替代品。 因为当你修改源文件后,如果你用的是原来的node 则必须手动重启你的更改才会有效

相关文章

网友评论

    本文标题:初次使用Docker

    本文链接:https://www.haomeiwen.com/subject/eruyyktx.html