构建 Docker 镜像
有些时候,pull 下来的镜像只能作为基础镜像,我们需要在这个基础镜像上再自定义一个 Docker 镜像,将应用程序及其所需要的配置和环境放进这个镜像,后续还可以进行更新和管理。
构建 Docker 镜像有两种方法
- 使用 docker commit 命令
- 编写 Dockerfile 文件之后使用 docker build 命令
个人推荐更加强大和方便灵活的第二种方法。下面只针对 用 Dockerfile 构建镜像
展开。
用 Dockerfile 构建 django
镜像
事先准备一个 django 项目
项目结构如下:
$ tree
.
├── db.sqlite3
├── demo
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-37.pyc
│ │ ├── settings.cpython-37.pyc
│ │ ├── urls.cpython-37.pyc
│ │ └── wsgi.cpython-37.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── Dockerfile
├── hello
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ └── __init__.cpython-37.pyc
│ ├── models.py
│ ├── __pycache__
│ │ ├── admin.cpython-37.pyc
│ │ ├── __init__.cpython-37.pyc
│ │ ├── models.cpython-37.pyc
│ │ ├── urls.cpython-37.pyc
│ │ └── views.cpython-37.pyc
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── manage.py
└── requirements.txt
6 directories, 25 files
编写 Dockerfile 文件
# 基础镜像选择 python3.7
FROM python:3.7
# 镜像所有者信息
LABEL maintainer="shiqi"
# 设置时区
ENV TZ "Asia/Shanghai"
# 创建应用目录
# RUN mkdir /demo
# 指定工作目录,WORKDIR 会自己创建目录
WORKDIR /demo
# 将应用文件复制到镜像中,推荐使用 COPY, ADD 只适合拷贝压缩包文件
# ADD ./ /demo/
COPY ./ /demo/
# pip 安装依赖包,切换下载的源
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# 暴露端口
EXPOSE 8000
其中,
-
FROM
指定要用的基础镜像 -
LABEL
为镜像添加元数据 -
ENV
设置环境变量 -
RUN
后面可接shell
命令,或者["executable", "param1", "param2"]
-
WORKDIR
指定工作目录,类似于cd
命令 -
ADD
将构建镜像所需的文件和目录复制到镜像中,注意:目录中必须包含Dockerfile
文件,不然会报错找不到文件 -
EXPORSE
声明容器运行时暴露的端口
注意:Dockerfile 文件的存放位置在项目的根目录下
使用 docker-compose
编排镜像
编写 docker-compose.yml
version: "3"
services:
web:
container_name: "web"
build:
./demo
ports:
- "8000:8000"
volumes:
- web:/demo
command: python manage.py runserver 0.0.0.0:8000
restart: always
volumes:
web:
driver: local
其中,
-
version
的"3"
对应的 docker 版本在 v1.13 以上 -
services
下包含了需要编排的 容器,我这里只有一个 web 容器 -
container_name
给容器命名 -
build
指定了 Dockerfile 文件所在路径 -
ports
是宿主机和容器的端口映射 -
volumes
将当前目录挂载到容器内的/demo
目录下,并给卷命名为web
-
command
为应用启动的命令 -
restart
指定为always
,容器退出时会重启容器
pip 安装 docker-compose
$ pip install docker-compose
docker-compose 创建镜像并启动容器
# 创建镜像
$ sudo docker-compose build
# 启动容器
$ docker-compose up -d
将构建好的镜像推送到 Docker Hub
Docker Hub 离我们比较远,国内一般会使用阿里云的镜像仓库服务。这里只是作为演示,用的Docker Hub.首先需要在 Docker Hub 网址注册一个账户,然后进入正题。
# 登录 Docker Hub, 根据提示输入用户名和密码
$ sudo docker login
# 给要 push 的镜像打一个 tag
$ sudo docker tag csq_web:latest shiqichang/csq_web:1.0
# 将本地镜像 push 到远程镜像仓库
$ sudo docker push shiqichang/web:1.0
本章小结
- 本章主要通过构建一个 django 服务的镜像,讲述了镜像创建的过程,和一些参数的含义以及用法,除此之外,还简单演示了如何将自己构建的镜像推送到远程镜像仓库,以供在其他机器上 pull 下来使用。
该文章转载于我的个人博客:https://s7.zzs7.top/docker-2.html
原创作品,转载须注明来源!