全新小白学习docker,表示很晕。记录我的学习步骤。
1. 搜索:docker 菜鸟教程。
先不了解docker的原理,没用过这个东西,看原理也是晕晕的,先按照教程一步步来运行,感受下这个到底可以做什么。
2.理解docker常用命令原理图
Docker常用命令原理图
之后了解docker 命令的主要含义
3.尝试打包镜像
docker搭建python环境并打包镜像然后使用镜像启动python程序和flask程序
主要参考上述链接进行搭建。但是博主的步骤对于小白的我来说,产生了问题,所以我这里重新写一下步骤。
3.1 下载ubuntu镜像
docker pull ubuntu
这个ubuntu镜像是最新的,使用 docker images ,可以查看新建的镜像。
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 93fd78260bd1 4 weeks ago 86.2MB
这个镜像是第一层,我是这样理解的。是你项目运行环境的最开始的一个层。相当于,你现在有了一台安装了ubantu系统的电脑。
3.2 进入ubuntu容器交互系统
docker run -i -t ubuntu /bin/bash
参数说明:
-t 是启动终端
-i 是允许进行交互
进入交互系统,表明你打开了ubuntu系统的终端,可以用命令行进行操作。可以看到终端变成了这样:
root@69dd17b70d12:/#
输入python,是不存在的。
root@b4312b72a091:/# python3
bash: python3: command not found
安装Python3等一系列包
root@b4312b72a091:/# apt-get update
root@b4312b72a091:/# apt-get install python3
root@b4312b72a091:/# apt-get install python3-pip
root@b4312b72a091:/# apt-get install python3-dev
root@b4312b72a091:/# apt-get install openssl
root@b4312b72a091:/# apt-get install libssl-dev
root@b4312b72a091:/# apt-get install libffi-dev
输入 python3,pip3,可以看见已经有这些环境了。
3.3 打包容器成为镜像
之后输入exit,退出交互系统。输入docker images,我们可以看看现在是什么情况。
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 93fd78260bd1 4 weeks ago 86.2MB
还是只有一个镜像。输入docker ps -a ,把所有的容器都打印出来
zldeAir-5:~ zl$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b4312b72a091 ubuntu "/bin/bash" 12 minutes ago Exited (0) About a minute ago heuristic_swanson
可以看到这里有个静态容器,之后打包装了python的容器,把它变成一个镜像
命令:docker commit <容器id> 新的镜像名
zldeAir-5:~ zl$ docker commit b4312b72a091 python3env
sha256:581bb80e1e5733f39154dbe13c7b15c571e4f79365f3630167b17d588c64fa27
再次输入 docker images,我们可以看到已经添加了一个新的镜像。
zldeAir-5:~ zl$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python3env latest 581bb80e1e57 11 seconds ago 499MB
ubuntu latest 93fd78260bd1 4 weeks ago 86.2MB
python3env这个镜像有两个镜像层,第一层是Ubuntu,第二层是python3,pip3等上述一系列安装的包,环境。
3.4 测试新建镜像
用该镜像,来运行宿主机里面的Python脚本
docker run -v /Users/zl/project/celery_test:/celery_test -w /celery_test python3env python3 add.py
参数说明:
-v:冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径
-w:是指定为当前镜像工作目录
/Users/zl/project/celery_test 是我项目的路径。
运行成功会打出运行结果,终端输出7,运行成功。
3.5 pip安装库,再次进行打包
批量安装库:docker -v 宿主机目录:容器目录 -w 容器当前工作目录 镜像名 命令
之后跟上述一样,需要再次打包一次容器,保存安装对应库之后的python环境。
zldeAir-5:~ zl$ docker run -v /Users/zl/project/celery_test:/celery_test -w /celery_test python3env pip3 install -r requirements.txt
zldeAir-5:~ zl$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
143456e73cb8 python3env "pip3 install -r req…" 3 minutes ago Exited (0) 46 seconds ago serene_poincare
zldeAir-5:~ zl$ docker commit 143456e73cb8 python3env
sha256:0fe972bd9dac852e216abb18de9895862cbafe5a4a36e58fef596d160b460394
zldeAir-5:~ zl$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python3env latest 0fe972bd9dac 6 seconds ago 607MB
测试该环境是否是我们想要的。进入容器互动:
zldeAir-5:~ zl$ docker run -i -t python3env /bin/bash
root@1d8cb40a913a:/celery_test# python3
>>> import 导入的包名
没有报错就说明ok了。
python3env 有三个镜像层了,除了前面两个,再次增加了,各种库下载的第三个镜像层。
4.使用Dockerfile定制镜像
使用docker commit命令可以比较直观的帮助理解镜像分层存储的概念,但是实际环境中并不会这样使用。使用docker commit意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。
这个时候就要用到Dockerfile。把每一层修改、安装构建、操作的命令都写入Dockerfile,用这个脚本来构建、定制镜像。
4.1 创建Dockerfile文件 Dockerfile使用说明
# 第一种写法,按照上面说的流程,可以这样写。但是并不建议
FROM ubuntu
RUN apt-get install -y python3
RUN apt-get install -y python3-pip
COPY . .
RUN pip install -r requirements.txt
# 第二种写法,推荐使用该写法
FROM python:3.6
COPY . .
RUN pip install -r requirements.txt
4.2 测试该镜像
在Dockerfile根目录下,输入以下代码
zldeAir-5:celery_test zl$ docker build -t vivi/python36 .
zldeAir-5:celery_test zl$ docker images
结果
REPOSITORY TAG IMAGE ID CREATED SIZE
vivi/python36 latest c87219b7e326 3 minutes ago
注意第一行代码最后的点。可以看见创建了该镜像。
zldeAir-5:celery_test zl$ docker run vivi/python36 python3 add.py
7
创建镜像成功。