Docker
不同环境 配置不同,本地开发的项目依赖于本地环境,如何能在不同环境任意执行?
Docker就是用来解决这一问题的。简而言之,Docker打包时打包了项目本身及其依赖。当这个项目运行时,会在Docker的虚拟容器中运行,无需担心不同的环境。
用途
- 提供运行环境
- 提供弹性云服务
- 组建微服务架构
下载安装
Win下载地址:https://docs.docker.com/desktop/install/windows-install/
MAC下载地址:https://docs.docker.com/desktop/install/mac-install/
安装直接无脑就行
- 检测安装是否成功
docker version
Docker是服务器-客户端架构,命令行运行Docker时,需要本地起服务。
Win需要以管理员身份打开cmd
- 启动服务命令
net start com.docker.service
- 停止服务命令
net stop com.docker.service
启动好了服务之后,可以继续进行操作
image文件是个啥?
image文件里面打包了 项目 及其 依赖 ,只有通过image文件我们才能生成一个Docker容器。
也就是说,image是Docker的模板,一个image文件可以生成多个同时运行的Docker实例
- 查看本机image文件
docker image ls
- 删除image文件
docker image rm [imageName]
这里备注一下:官方image文件仓库,在前人基础上再加工image文件。快捷高效。
hello-world
先从简单的helloworld学起
- 先将image文件从仓库pull到本地
docker image pull library/hello-world
ocker image pull
是抓取 image 文件的命令library/hello-world
是 image 文件在仓库里面的位置library
是 image 文件所在的组hello-world
是 image 文件的名字。
官方提供的 image 文件,都放在[library](https://hub.docker.com/r/library/)
组里面,所以是默认组,可以省略。简化写法:
docker image pull hello-world
- 本机能看到这个文件啦
-
运行这个文件
docker container run
命令会从 image 文件,生成一个正在运行的容器实例。这个命令也会自动从仓库中pull image文件。所以步骤1可有可无。
docker container run hello-world
一般容器会自动终止,不能自动的手动kill它
docker container kill [containID]
容器文件
image生成的容器实例,也叫容器文件。
一旦容器生成会有两个文件,image文件和容器文件。关闭容器不会删除容器文件,只是容器停止运行罢了
# 列出本机正在运行的容器
docker container ls
# 列出本机所有容器,包括终止运行的容器
docker container ls --all
# 删除容器文件
docker container rm [containerId]
尝试新建自己的image文件
项目根目录下新建Docker文件
-
dockerignore文件:打包忽略文件
# 排除这三个路径,不打包进image文件中 .git node_modules npm-debug.log
-
Dockerfile文件:一个文本文件,用来配置image。Docker根据该文件生成二进制的image文件。
FROM node:16.15.0
:该 image 文件继承官方的 node image,冒号表示标签,这里标签是16.15.0,即16.15.0版本的 node。COPY . /app
:将当前目录下的所有文件(除了.dockerignore
排除的路径),都拷贝进入 image 文件的/app
目录。WORKDIR /app
:指定接下来的工作路径为/app
。RUN npm install
:在/app
目录下,运行npm install
命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。EXPOSE 3000
:将容器 3000 端口暴露出来, 允许外部连接这个端口。
FROM node:16.15.0 COPY . /app WORKDIR /app RUN npm install --registry=https://registry.npm.taobao.org EXPOSE 3000
创建image文件
- -t表示指定image参数的名字
- 名字后面加:可以指定标签
- .表示Dockerfile文件所在路径(.代表当前路径)
docker image build -t react-commentlist:v0.1 **.**
查看本机所有image,就能看到我们新建的image啦!
docker image ls
生成容器
p
参数:容器的 3000 端口映射到本机的 8000 端口。it
参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。react-commentlist:v0.1
:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。/bin/bash
:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell
docker container run -p 8000:3000 -it react-commentlist:v0.1 /bin/bash
可以在后面输入 npm start
启动项目。
打开浏览器,输入http://127.0.0.1:8000 就可以访问项目了。
容器退出
Ctrl + c 停止 Node 进程
Ctrl + d (或 exit)退出容器