Docker概念
-
镜像(Image):只读模板。
容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。 -
容器(Container):容器是镜像创建的应用实例,容器间相互隔离。
-
仓库(Repository):镜像仓库,类似镜像界的github。
比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。
最大的公开仓库是dockerhub) -
注册服务器(Registry):存放仓库的地方
-
K8S :容器集群管理系统
用于容器编排(Container Orchestration)——启动容器,自动化部署、扩展和管理容器应用,还有回收容器。
与虚拟机区别
容器类似一个轻量级的虚拟机(但本质上不是虚拟机,虚拟机是操作系统级别的资源隔离,而容器是进程级的资源隔离)。
相比虚拟机,Docker启动更快,占用空间更小,对资源的利用率更高。
Docker的安装和卸载
Docker可以安装在Windows、Linux、Mac等各个平台上。
Windows
其中Windows上安装的Docker Desktop
基于WSL(Windows Subsystem for Linux) ,用于在windows上跑linux系统
安装完毕后cmd执行docker run hello-world
测试是否安装成功
Linux
- 通过
cat /proc/version
查看系统版本 - 通过命令行安装相应docker
查看docker版本
- docker version
镜像
查看镜像
- docker image ls
- docker images
注意CREATED为镜像的创建日期(不是获取该镜像的日期)
拉取镜像
标签通常是版本号,默认为latest
。
注意:该latest
是镜像管理者手动添加的tag,而非总是最新版本。
- 从docker hub上拉取镜像
docker pull【镜像名:标签】
docker image pull【镜像名:标签】
docker pull ubuntu
docker pull ubuntu:16.04
- 从个人仓库拉取镜像
docker pull 【仓库名】/【镜像名:标签】
docker pull xunmi/django
- 从第三方拉取镜像
docker pull 【第三方仓库地址】/【仓库名】/【镜像名:标签】
仓库名默认library,从官方获取镜像相当于docker pull library/【镜像名:标签】
docker pull hub.c.163.com/library/mysql:latest
删除镜像
若镜像已生成容器,需删除容器后再删除镜像
- docker image rm 【镜像名或镜像ID】
- docker rmi 【镜像名或镜像ID】
容器
查看容器
查看正在运行的容器
- docker ps 【可选参数】
- -a 查看所有容器 (否则只显示正常运行中的容器)
- -s 显示容器size
通过配置文件生成容器
-
vi Dockerfile
在当前目录下创建并编辑Dockerfile文件 - 输入
from python:3.7
,通过 Esc + :wq + 回车 保存 - docker build 【可选参数】 【镜像名:标签】 【向启动容器中传入的命令】
通过命令行生成容器
- docker run 【可选参数】 【镜像名:标签】 【向启动容器中传入的命令】
docker run -dp 8080:80 --name docker-test docker/getting-started
- 向启动容器中传入的命令
默认为/bin/sh
(=sh
=/bin/bash
=bash
) - 镜像名:标签
加载一个本地镜像生成容器,如不存在则自动从官方仓库下载
标签默认为latest
- 可选参数
- -it 两个参数通常一起使用,分配一个伪终端给容器,创建后可以进入容器命令行。否则非持续运行的容器会在start后自动stop。(
docker exec
同理) - -d 会创建一个守护式容器在后台运行
- –name 为创建的容器命名。(不支持中文字符,默认会随机给名字)
- -v 表示目录映射关系,即宿主机目录:容器中目录,建议均使用绝对路径。不存在的目录会自动创建。
- -p 表示端口映射,即宿主机端口:容器中端口。 比如:-p 8080:80 就是将容器中的80端口,映射到主机中的8080端口
- –network=host 表示将主机的网络环境映射到容器中,使容器的网络与主机相同。每个 Docker 容器都有自己的网络连接空间连接到虚拟 LAN。使用此命令则会让容器和主机共享一个网络空间。
- -it 两个参数通常一起使用,分配一个伪终端给容器,创建后可以进入容器命令行。否则非持续运行的容器会在start后自动stop。(
开启容器
- docker start【容器名或id】
- docker container start【容器名或id】
停止容器
- docker stop 【容器名或id】
- docker container stop 【容器名或id】
删除容器
- docker rm【容器名或id】
在运行的容器中执行命令
- docker exec 【可选参数】【容器名或id】【命令】
如下bash
即可唤起命令行工具
docker exec -it mynode12 bash
将容器制作成镜像
便于备份、复用
- docker commit 【容器名或id】 【镜像名或id】
将容器制作成镜像 - docker save -o 【保存的文件名】 【镜像名或id】
镜像打包备份(打包备份的文件会自动存放在当前命令行的路径下,如果想让保存的文件可以打开,可以加.tar后缀) - docker load -i 备份文件路径
导入备份
查看镜像、容器信息
- docker history --no-trunc 【镜像名称或id】
查看镜像的创建历史。其中--no-trunc
表示不折叠内容 - docker port 【容器名称或id】
查看容器端口号映射关系 - docker inspect 【镜像、容器名称或id】
查看镜像、容器配置信息,其中HostConfig项有初始化信息
容器内外文件复制
容器外执行指令
- 容器内复制到容器外
docker cp 【容器名或id:容器内文件路径】 【容器外文件路径】 - 容器外复制到容器内
docker cp 【容器外文件路径】 【容器名或id:容器内文件路径 】
查看docker容器日志
docker logs [OPTIONS] CONTAINER
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
- 如
docker logs -f --tail=100 b62a
实时查看b62a容器最近100行日志
简单的操作示例
-
docker images
查看所有镜像 -
docker pull python:3.10
拉取镜像 -
docker ps -a
查看所有容器 -
docker run -itd -p 49000:5000 --name pdf -v /data/QL_pdf:/data/QL_pdf python:3.10
创建容器 -
docker exec -it 容器 bash
进入容器 -
exit
退出容器 -
docker stop 容器
关闭容器 -
docker start 容器
启动/重启容器
常见问题
容器创建后不处于运行状态
docker容器运行必须有一个前台进程, 如果没有前台进程保持执行,容器认为空闲,就会自行退出。
- 有一个一直执行(top,tail、循环等)的前台(-d会变成后台进程)进程
docker run myempty:0.1 /bin/sh "while true; do ls;sleep 1;done"
- 直接使用
-i -t
,此时即使有-d
也不会退出
网友评论