从阿里镜像点下载安装包.
本文所用的是 Mac 操作系统, 当前 Docker Desktop 最新的版本是 2.3.0.2(45183)
阿里也提供了其他操作系统下的 Docker 安装版本镜像环境
为了快速拉取 Docker Image 需要指定国内镜像源
"registry-mirrors": [
"https://g0tuh4k5.mirror.aliyuncs.com",
"http://registry.docker-cn.com",
"http://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
]
PS: 上面阿里的镜像源
https://g0tuh4k5.mirror.aliyuncs.com
需要注册成为阿里的开发者, 并开通 “容器服务” 后由阿里自动分配的镜像源地址.
使用 docker 创建一个基于 Node.js 的开发环境, 以下内容是对 Use Docker to Create a Node Development Enviroment 文章的理解整理而成.
docker run
command执行如下命令
docker run --rm -it --name node-docker \
-v $PWD:/home/app -w /home/app \
-e "PORT=3000" -p 8080:3000 \
-u node node:latest /bin/bash
docker run
创建一个新的容器实例(container instance)--rm
一旦退出容器将自动停止和删除容器实例-i
和 -t
运行可交互式进程, 比如一个 shell--name
设定容器实例的名称-v
mounts 一个本地目录到容器目录-w
指定工作目录-e
设置环境变量-p
映射本地端口到容器端口u
指定登录的用户名. 这里使用 node 用户登录容器实例的 shell, 因为 node 容器封装 linux 操作系统, node 用户是其自带的一个用户node:latest
image 的名称和标签, 这里指的是 node image 的最新版本如果 image 不存在(如上述命令中的 node:latest), Docker 会在后台进程中自动执行
docker pull
命令从 docker hub 下载该 image
Dockerfile
使用 Dockerfile
创建一个自定义的 image.
创建一个名为 Dockerfile 的文件, 并写入如下内容
FROM node:latest
WORKDIR /home/app
USER node
ENV PORT 3000
EXPOSE 3000
ENTRYPOINT /bin/bash
From
指定该自定义 image 基于 image: node:latest
WORKDIR
定义 -w
USER
定义 -u
ENV
定义 -e
EXPOSE
定义输出端口号ENTRYPOINT
指定当容器运行后执行 /bin/bash
命令自定义的 image 需要 使用 docker build
去创建
docker build -t node-docker .
-t
指定 image 的名称.
指定 Dockfile
文件所在的路径创建完自定义 image 后, 使用如下命令创建容器
docker run --rm -it --name node-docker \
-v $PWD:/home/app -p 8080:3000 \
node-docker
Docker Compose 可以定义 Node development environment 作为一个服务.
在上面的 docker run
命令中还需要指定 continer name, volume mouting, port mapping
下面我们使用 docker-compose
命令来简化运行容器的命令
创建 docker-compose.yml 文件, 并写入如下内容
version: "3"
services:
nod_dev_env:
build: .
container_name: node-docker
ports:
- 8080:3000
volumes:
- ./:/home/app
nod_dev_env
设定服务的名称build
指定 Dockfile
的路径container_name
设定容器的名称ports
配置端口映射volumes
卷标映射执行下列命令来执行服务
docker-compose run --rm --service-ports nod_dev_env
run
命令就像 docker run -it
命令--service-ports
使用 docker-compose.yml
文件中配置的 ports
指定主机和容器的端口映射可以通过如下命令将本机的 image 生成一个文件, 从而可以将其 copy 到其他机器中, 省的必须使用 docker hub 去下载
保存 Docker image 为一个 tar 文件
docker save -o <path for generated tar file> <image name>
copy 这个文件到目的主机的文件系统中, 然后 load 该 image tar 文件到 Docker 中
docker load -i <path to image tar file>
上面的内容参考了 stackoverflow 中的帖子
docker run
方法直接从 docker hub 中下载 image (如果本地不存在), 命令比较冗长Dockerfile
方法会基于指定的 image 创建一个新的自定义的 image, 命令相对 docker run
简洁一些docker compose
方法以服务的方式提供容器的运行环境, 命令是最为简洁的一种以下使用如下 Dockerfile 和 docker-compose.yml 来创建容器
FROM node:latest
WORKDIR /home/app
USER node
ENV PORT 3000
EXPOSE 3000
version: "3.4"
services:
nod_dev_env:
build: .
image: docker-node
container_name: node-docker
ports:
- 8080:3000
volumes:
- ./:/home/app
执行 docker image ls
命令可以看到有两个 image, 其中 docker-node
image 的名称是在 docker-compose.yml 中通过 image 参数指定的, 同时必须指定 build 参数.
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-node latest 37e7ed057eae 56 seconds ago 942MB
node latest 91a3cf793116 5 days ago 942MB
在 VSCode 中, 采用基于 Node.js 的容器开发环境部署.
在 ~/workspace/git-repositories/node/ 目录下增加如下文件
FROM node:latest
WORKDIR /home/app
USER node
RUN yarn config set registry "https://registry.npm.taobao.org/"
RUN npm config set registry "https://registry.npm.taobao.org/"
ENV PORT 3000
EXPOSE 3000
EXPOSE 4000
version: '3.4'
services:
docker-node:
image: docker-node
build: .
ports:
- 3000:3000
- 4000:4000
volumes:
- ./:/home/app
"RegistryMirror": [
"https://g0tuh4k5.mirror.aliyuncs.com",
"http://registry.docker-cn.com",
"http://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
]