docker 安装及构建流程
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker的使用极大地简化了开发部署流程,编写一次代码,便可以在不同的机器上完美运行。
0. 基本概念
- 镜像(image)
如果把docker比喻为虚拟机,那么镜像即为虚拟机中的iso文件。Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
- 容器(container)
如果把镜像比为面向对象语言中的一个类,那么容器即为类的一个实例。镜像只是一堆可读的系统文件,容器是在其上层添加了可写层的读写文件,只有镜像实例化成容器才是可运行的。
- 仓库(repository)
镜像仓库的概念与github是类似的,是存放各种镜像的地方。当我们执行docker pull image的时候,docker默认是从dockerhub上去查找我们所需要的镜像文件,然后执行下载操作。这类的镜像仓库就是docker默认的公共仓库,所有人都可以直接查看或下载、使用。有时为了内部分享使用,通常在本地搭建离线的私有化镜像仓库。
1. 下载安装docker
- 脚本安装
docker官方提供了十分便利的脚本,在有网环境下,只需运行以下代码便可以安装,使用aliyun国内源以加快下载速度。
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun
systemctl start docker
systemctl enable docker
- apt/yum源下载
也可配置软件源进行安装:
deb:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
yum:
curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo > /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
- 离线二进制安装
无网环境下使用二进制包方式进行安装,从网址https://download.docker.com/linux/
找到对应系统版本以及系统架构下载对应包即可。
启动docker后,查看docker版本以确认是否安装成功:
(base) wildkid1024@debian:~$ docker version
Client: Docker Engine - Community
Version: 20.10.14
API version: 1.41
Go version: go1.16.15
Git commit: a224086
Built: Thu Mar 24 01:48:21 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.14
API version: 1.41 (minimum version 1.12)
Go version: go1.16.15
Git commit: 87a90dc
Built: Thu Mar 24 01:46:14 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.5.11
GitCommit: 3df54a852345ae127d1fa3092b95168e4a88e2f8
runc:
Version: 1.0.3
GitCommit: v1.0.3-0-gf46b6ba
docker-init:
Version: 0.19.0
GitCommit: de40ad0
2.拉取远程基础镜像
开发项目之前需先拉取对应基础镜像环境,可从dockhub下载任意开发使用的必要环境,比如python:3.6:
(base) wildkid1024@debian:~$ docker pull python:3.6
3.6: Pulling from library/python
Digest: sha256:f8652afaf88c25f0d22354d547d892591067aa4026a7fa9a6819df9f300af6fc
Status: Image is up to date for python:3.6
docker.io/library/python:3.6
拉取完成可以测试下环境是否成功:
(base) wildkid1024@debian:~$ docker run -it python:3.6 python
Python 3.6.15 (default, Dec 21 2021, 12:03:22)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
3. 构建本地项目
以一个flask项目为例,演示如何构建本地项目:
首先拉取Python镜像,并移动到项目目录下,在项目根目录下添加Dockerfile镜像,内容如下:
FROM python:3.6
WORKDIR ./
COPY requirements.txt ./
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY . .
CMD ["python", "start.py"]
其中FROM声明要使用的镜像名称及版本,WORKDIR声明工作目录,requirements中声明flask版本和对应的python依赖。
然后构建镜像,便会生成一个用于生产环境的docker镜像:
docker build -t flask_app .
4. 镜像的导入导出
如果上述构建未出错的话,那么将在docker本地镜像中找到两个镜像,通过运行docker images来找到他们。
通过以下导入导出镜像命令可将生产镜像导出:
docker save image_id > image_export.tar
docker load < image_export.tar
-------- 完结 -----------