docker学习笔记

2019-07-07  本文已影响0人  右左君

docker学习笔记

[TOC]

相关概念

需求

linux 容器

Linux 容器(Linux Containers,缩写为 LXC)不是模拟一个完整的操作系统,而是对进程进行隔离。

优势:进程级别,资源占用低,体积小,启动快,多个容器可以共享资源。

Docker

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。
Docker 通过将程序及程序依赖包or文件打包成一个文件,即为image文件。运行image文件,生成一个容器(底层系统的一个进程)。

每个容器之间相互隔离(内存空间、硬盘空间、线程、网络地址等等),共用部分系统资源。

image 文件

container 文件

image 文件生成的容器实例,本身也是一个文件,称为容器文件。

一旦容器生成,会生成容器文件,且容器文件不会随容器停止而删除。

Dockerfile 文件

Dockerfile文件,用来配置image,docker根据Dockerfile创建image文件。

编写Dockerfile文件

以python web项目为例

1.根目录创建 .dockerignore文件

表示打包成image时忽略的文件或者文件夹

.git
*.log

2.生成python依赖包文件requirements.txt

pipenv lock --requirements > requirements.txt

bottle==0.12.16
urllib3==1.23

3.编写Dockerfile文件


# python 环境 alpine版本为体积最小版本
FROM python:3.7-alpine 

# 将工作目录设置为 /web
WORKDIR /web

# 将当前目录内容复制到位于 /web 中的容器中
ADD . /web

# 按照 依赖环境到临时的虚拟包
# 安装 requirements.txt 中指定的任何所需软件包
# 删除缓存文件和虚拟包
RUN apk add --no-cache --virtual .pynacl_deps build-base python3-dev libffi-dev \
     && pip install -r requirements.txt \
     && rm -rf .cache/pip \
     && apk del .pynacl_deps

# 定义环境变量
ENV  profile=test
# 定义语言环境
ENV LANG=en_US.UTF-8

#将容器 8080 端口暴露出来, 允许外部连接这个端口。
EXPOSE 8080

# 在容器启动时运行 web.py
CMD ["python3", "web.py"]

4.生成docker image文件

# docker image build -t <image_name>:<image_version> <Dockerfile 所在文件夹名称>
docker image build -t web .

5.运行container

# test 环境
docker container run --env profile=test --rm -p 8080:8080 -it web

# prod 环境
docker container run --env profile=prod --rm -p 8080:8080 -it web

6.发布image 文件

# 先登录
docker login

# 为本地image 标注用户名和版本。
docker image tag [imageName] [username]/[repository]:[tag]
# 实例
docker image tag web:latest xxx/web:latest

docker image push xxx/web:latest



6. 获取image

# 先登录
docker login

# 后pull
docker pull xxx/web:latest

参考文档

上一篇下一篇

猜你喜欢

热点阅读