Skip to content
本页目录

实战:构建自己的镜像

构建镜像有两种,一种是在命令行中实现,一种通过 dockerfile 实现

这里,我们以 ubuntu 为例,构建自己的镜像

命令行中实现

思路:

第一步:进入容器

bash
docker run -it --name ubuntu_node_johanbo ubuntu:latest /bin/bash

解释:以 ubuntu:latest 为镜像构建名字为 ubuntu_node_johanbo 的容器,并进入容器中

第二步:在容器中安装 nodejs, npm 和 pm2

bash
apt-get update && apt-get install -y nodejs npm && npm install pm2 -g

第三步:退出容器

bash
按住 Ctrl + p + q

第四步: 将修改后的容器打包为镜像

bash
docker ps 查看正在运行的容器,找到刚刚启动的容器Id
docker commit <容器ID> <自定义的镜像>
docker images 查看镜像

此时,我们的镜像已经生成了。这个镜像中以 ubuntu 为底层,并安装了 node,npm 和 pm2 等包。如果你愿意,可以通过命令docker push <自定义镜像名> 推送至远端仓库

但这种方法,你需要在容器中做多次操作,一不小心也许就有出错。所以,大多数情况下,推荐第二种,使用 dockerfile 来规范你的镜像

dockerfile 构建镜像

第一步:编写 dockerfile

bash
# 基于Ubuntu image
FROM daocloud.io/library/ubuntu:latest

# MAINTAINER
LABEL version="1.0" by="johan"

# 设置时区
RUN sudo sh -c "echo 'Asia/Shanghai' > /etc/timezone" && \
    sudo dpkg-reconfigure -f noninteractive tzdata

# 更换 Ubuntu 镜像
RUN echo '\n\
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse\n\
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse\n\
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse\n\
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse\n\
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse\n\
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse\n\
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse\n\
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse\n\
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse\n\
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse\n'\
> /etc/apt/sources.list

# 安装Node.js与NPM
RUN apt-get update && apt-get -y install nodejs npm

第二步:构建镜像

bash
docker build . -t ubuntu_node_johan:v1.0

以上两种为构建镜像的两种方式