基础知识

开始第一个docker命令行

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

你一定注意到有些参数被使用到,参数时什么意思呢?

  • -d - 在后台,以分离模式运行容器(container)
  • -p 80:80 - 将本地host的80端口映射到容器的80端口上
  • docker/getting-started - 使用的镜像

tips: 你也可以组合单个字符的参数以缩短命令
docker run -dp 80:80 docker/getting-started

(base) ~  docker run -d -p 80:80 docker/getting-started
3e15a6d10ba9216e756394da4cd8e1788a2fcb5260e6797633622b861a337bdd

docker面板

当你下载好 docker 会有一个面板,打开面板,你会在上面看到正在运行的容器,比如我们刚刚运行的容器

docker run bash 不退出_docker run bash 不退出

必须知道的两个概念

什么是容器呢?

现在我们已经运行过一个容器了,那什么是容器呢?简而言之,它只是你计算机中与其他在主机运行的进程隔离的另一个进程

什么是容器镜像呢?

当我们运行容器时,它使用与主机隔离的文件系统(filesystem)。这个自定义文件系统是由容器(container)镜像(image)提供的。因为镜像中包含容器的文件系统,它就必须运行一个应用(application)的所有东西 - 包含所有依赖(dependencies)、配置(configuration)、脚本(scripts)、二进制文件(binaries)等等。镜像也包含容器的其他配置,例如环境变量、默认运行命令和其他属性。

docker应用

获取应用

获取一下源码,以便于进行下一步

git clone https://github.com/YX-XiaoBai/application.git

构建应用的容器镜像

为了构建应用,我们需要用一个Dockerfile。一个Dockerfile是一个基于text的指令脚本用于创建容器镜像

  1. 创建一个Dockerfilepackage.json同目录下,主要不可加.txt等文件后缀
FROM node:12-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
  1. 现在来构建用docker build来构建容器镜像

docker build -t getting-started

这个Dockerfile主要做了几件事

  • 你可能注意到下载了很多layers,这是因为我们想要从node:12-alpine镜像中指示构建者,但是因为我们没有自己的机器,所以需要下载镜像
  • 在镜像下载完成后,我们复制我们的应用application并且用yarn下载我们的依赖。
  • CMD指定当镜像在容器中启动时的默认命令
  • 最后-t标识我们的镜像,由于我们命名镜像为getting-started,因此当我们运行一个容器会参考这个镜像
  • 命令行最后的.告诉Docker应该在当前目录下寻找Dockerfile

docker run bash 不退出_docker-compose_02

补充:构建时可能会遇到的报错

docker run bash 不退出_docker-compose_03


遇到这个报错只是简单的超时,只要重新执行命令

docker build -t getting-started .

即可

启动一个App容器

现在我们已经有了一个自己的镜像,让我们尝试运行它吧~ 还记的运行命令吗?

  1. 启动我们的容器通过docker run命令且标明我们刚刚镜像的名称

docker run -dp 3000:3000 getting-started

docker run bash 不退出_docker run bash 不退出_04

还记得-d-p参数吗?不记得就看下上面👆。我们正在运行的新容器是以隔离模式启动和创建一个映射在本地端口3000和容器端口3000之间,若没有端口映射,我们不可能获取到这个应用

  1. 等待几秒,打开http://localhost:3000你就可以看到我们刚刚创建的应用了

docker run bash 不退出_docker-compose_05

  1. 可以尝试在打开的页面上操作,如添加一个item、删除item、标记item

docker run bash 不退出_docker-compose_06

  1. 打开Docker Dashboard你可以看到有两个容器正在运行(即我们刚刚尝试的容器)

docker run bash 不退出_dockerfile_07