docker
基本概念
- image(镜像):相当于将应用程序、文件系统、可执行程序、运行库一起打包的压缩包;用于创建Docker容器的模板;
docker images
可以列出本地镜像; - container(容器):是独立运行的一个或者一组应用;一个镜像运行的实例就是容器,一个镜像可以启动多个容器;
docker run
用于从一个镜像创建一个容器;docker ps
列出所有正在运行的容器; - registry(镜像仓库):用来保存镜像;
安装
镜像使用
以本地实际测试为例
- 生成镜像: 使用
docker build
命令可以将Dockerfile生成镜像;Dockerfile是生成镜像的配置文件;进入项目所在目录,创建Dockerfile,内容如下
FROM node:8
# Create app directory
WORKDIR /home/zml/app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install
# If you are building your code for production
# RUN npm install --only=production
# Bundle app source
COPY . .
EXPOSE 9977
CMD [ "npm", "start" ]
执行docker build -t zml/koa-app .
生成镜像;
Dockerizing a Node.js web app
)
- 设置镜像标签:
docker tag zml/koa-app:latest localhost:8888/koa/koa-app:v1
localhost:8888为本地镜像仓库地址;进行本操作之前,需要先docker login
登录镜像仓库; - 镜像上传:
docker push localhost:8888/koa/koa-app:v1
将镜像上传到本地仓库;
需要注意的是,上述脚本基础镜像FROM node:8
基于ubuntu,生成的应用镜像比较大有几百M,可以换个基础镜像如FROM node:8-alpine
,其制作的镜像只有30M左右。只是Alpine Linux是基于musl libc和busybox的轻量级linux发行版,c库与标准c库不一样,可能会导致非预期行为。
使用非root权限运行
$ sudo groupadd docker
$ sudo gpasswd -a zml docker
$sudo service docker restart
$ cat /etc/group
docker:x:999:user,zml