docker学习笔记

docker学习笔记

[TOC]

相关概念

需求

  • 环境配置麻烦的问题
  • 虚拟机:资源占用多、冗余步骤多、启动慢(虚拟机是完整的操作系统)

linux 容器

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

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

Docker

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。
Docker 通过将程序及程序依赖包or文件打包成一个文件,即为image文件。运行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 : 
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

参考文档

  • Docker 入门教程
  • 大白话Docker入门(二)

你可能感兴趣的:(docker学习笔记)