基础知识
开始第一个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
会有一个面板,打开面板,你会在上面看到正在运行的容器,比如我们刚刚运行的容器
必须知道的两个概念
什么是容器呢?
现在我们已经运行过一个容器了,那什么是容器呢?简而言之,它只是你计算机中与其他在主机运行的进程
隔离的另一个进程
什么是容器镜像呢?
当我们运行容器时,它使用与主机隔离的文件系统(filesystem
)。这个自定义文件系统是由容器(container
)镜像(image
)提供的。因为镜像中包含容器的文件系统,它就必须运行一个应用(application
)的所有东西 - 包含所有依赖(dependencies
)、配置(configuration
)、脚本(scripts
)、二进制文件(binaries
)等等。镜像也包含容器的其他配置,例如环境变量、默认运行命令和其他属性。
docker应用
获取应用
获取一下源码,以便于进行下一步
git clone https://github.com/YX-XiaoBai/application.git
构建应用的容器镜像
为了构建应用,我们需要用一个Dockerfile
。一个Dockerfile
是一个基于text
的指令脚本用于创建容器镜像
- 创建一个
Dockerfile
在package.json
同目录下,主要不可加.txt
等文件后缀
FROM node:12-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
- 现在来构建用
docker build
来构建容器镜像
docker build -t getting-started
这个Dockerfile
主要做了几件事
- 你可能注意到下载了很多
layers
,这是因为我们想要从node:12-alpine镜像
中指示构建者,但是因为我们没有自己的机器,所以需要下载镜像 - 在镜像下载完成后,我们复制我们的应用
application
并且用yarn
下载我们的依赖。 -
CMD
指定当镜像在容器中启动时的默认命令 - 最后
-t
标识我们的镜像,由于我们命名镜像为getting-started
,因此当我们运行一个容器会参考这个镜像 - 命令行最后的
.
告诉Docker
应该在当前目录下寻找Dockerfile
补充:构建时可能会遇到的报错遇到这个报错只是简单的超时,只要重新执行命令
docker build -t getting-started .
即可
启动一个App容器
现在我们已经有了一个自己的镜像,让我们尝试运行它吧~ 还记的运行命令吗?
- 启动我们的容器通过
docker run
命令且标明我们刚刚镜像的名称
docker run -dp 3000:3000 getting-started
还记得-d
和-p
参数吗?不记得就看下上面👆。我们正在运行的新容器是以隔离模式启动和创建一个映射在本地端口3000
和容器端口3000
之间,若没有端口映射,我们不可能获取到这个应用
- 等待几秒,打开
http://localhost:3000
你就可以看到我们刚刚创建的应用了
- 可以尝试在打开的页面上操作,如添加一个item、删除item、标记item
- 打开
Docker Dashboard
你可以看到有两个容器正在运行(即我们刚刚尝试的容器)