目录
二、打开docker软件, 查看当前docker的状态和已有的镜像和容器。
一、基础知识。
镜像:代码和代码运行环境打包的成品。
容器:启动镜像的进程。一个镜像多次启动可获得多个容器。
1. 从远程仓库下载镜像到本地
拉取Ubuntu系统
docker pull Ubuntu
2. 查看镜像/容器/数据卷所占用空间
docker system df
3.删除镜像
docker rmi 镜像的ID
docker rmi (IMAGEID)
二、打开docker软件, 查看当前docker的状态和已有的镜像和容器。
1. 查看当前docker的镜像(images);
docker images
2. 查看正在运行的容器
docker ps
3. 查看所有容器,包括没运行的。
docker ps -a
此外,
-a
:列出当前所有正在运行的容器 + 历史上运行过得容器-l
:显示最近创建的容器-n
:显示最近n个创建的容器-q
:静默模式,只显示容器编号
三、创建镜像(带功能的创建镜像)。
1. 生成requirements.txt文件
A. 将需要打包的代码放在某文件夹下。
B.进入Anaconda,安装pipreqs库
pip install pipreqs
结果如下:
C.CD进代码目录,执行命令 pipreqs ./ --encoding=utf8
cd 路径
pipreqs ./ --encoding=utf8
结果如下:
在目录文件夹下生成了requirements.txt文件
2. 使用docker的命令编写Dockerfile
docker init
结果如下:
按照提示选中语言,此处选中python,结果如下:
按照提示输入python版本号3.7.6,此处版本号可自选,结果如下
按照提示输入需要封装的镜像的端口号8000,可自行选择,结果如下
选定端口号后,设定启动镜像的命令。
因为我们的代码为 MD.py,用python启动,命令如下。
python MD.PY
结果如下:
此时,代码文件夹下自动生成的dockerfile和相应的配置文件
3.打包镜像
打包命令如下:
Docker build -f “DockerFile文件” -t “镜像名” .
最后一定要加“.”
最后一定要加“.”
最后一定要加“.”
参数说明:
-f 指定dockerfile文件名
-t 镜像的名字及tag指定,例如:MD:1.0
其他打包方法
A.构建并推送镜像到Docker仓库
docker build -t imageName:tag .
docker push imageName:tag
B.指定路径通过dockerfile创建镜像
docker build -t my-image:tag /path/to/dockerfile/dir
C.--target:指定多阶段构建中的目标构建阶段。
这个方法我没用过,功能概括为:
首先在一个镜像中构建应用程序,然后将构建好的结果复制到另一个镜像中并运行应用程序。
打包完成后,结果如下:
也可以用doker images查看
删除镜像(Images),删除前需要停止镜像,如果有容器在运行会报错。
停止:
docker stop ID
删除:
docker rmi -f ID
docker rmi -f ID1 ID2
docker rmi -f $(docker images -pa)
4.本地启动容器
启动容器,使用docker run命令
docker run -itd --name 【容器名】 【image名】【路径】
docker run -itd --name ubuntu-test ubuntu /bin/bash ##命令启动一个容器实例
带条件的启动容器,
docker run --rm -itd --name testmd -p 8000:8000 md
--rm
: 这个选项表示在容器停止后自动删除容器。-itd
: 这三个选项组合在一起,表示以交互式模式(-i
)运行容器,并在后台(-t
)启动容器,同时分配一个伪终端(-d
)--name testmd
: 这个选项指定了容器的名称为"testmd
"。-p 8000:8000
: 这个选项将容器内部的端口8000映射到宿主机的端口8000上。这意味着通过访问宿主机的IP地址和端口8000,可以访问容器内部的应用程序。md
: 这是要运行的镜像名称。在这个例子中,启动名为"md"的Docker镜像。
添加物理地址-->虚拟地址的映射
docker run --rm -itv 物理地址:虚拟地址 --name 容器名 镜像名
docker run --rm -itv E:\Physicaladdress:/app --name c1 ftest
-
--rm
是一个选项,表示在容器退出后自动删除容器。这对于临时使用的容器很有用,可以避免手动清理。 -
-it
是一个选项,表示将容器的输入(i)和输出(t)连接到当前终端。这样你就可以在容器内进行交互操作。 -
v E:\Physicaladdress:/app
是一个卷挂载选项,表示将主机上的E:\Physicaladdress
目录挂载到容器内的/app
目录。这样在容器内对/app
目录的操作会反映到主机上的E:\Physicaladdress
目录,反之亦然。 -
--name c1
是一个选项,表示为新创建的容器指定一个名称,这里命名为 "c1"。 -
ftest
是要运行的 Docker 镜像的名称
5. 镜像打包和传输
镜像打包成文件
docker save -o 文件名.tar 镜像名
传输到另一台B
scp 压缩文件名.tar root@172.0.60.170:/目录
在B上解压
docker load -i 压缩文件名.tar
6.向容器传入输入参数的方法
1.修改py代码
from sys import argv
import os
if "__main__"==__name__:
print(argv[1])
print(type(argv[1]))
2.修改docker file
CMD python app.py $PARAMS
3.修改启动命令(注意:不能用&,识别不了)
docker run --rm -itd --name cyt -e PARAMS='A=1@B=2' my_image (注意:不能用&,识别不了)