Docker是一个开源的应用容器引擎。
Docker简介
Docker采用C/S架构模式,使用远程API来管理和创建Docker容器。
镜像
docker镜像可理解为包含了OS文件系统和应用的对象,等价于未运行的容器。
使用WSL2版本docker时,会创建两个镜像(wsl -l -v):
PS C:\WINDOWS\system32> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
docker-desktop Running 2
docker-desktop-data Running 2
docker-desktop是存放程序的,docker-desktop-data是存放镜像的。
相关命令
镜像操作命令(image-id为镜像ID,类似UUID):
docker images :查看本机上的镜像;docker pull <image>[:tag] :拉取镜像;docker rmi <image-id> :移除镜像;移除所有镜像docker tag <image-id> <image>:<new-tag> :重命名镜像docker rmi $(docker images -q) docker save <image-id> > file.tar :保存镜像;docker load < file.tar :加载镜像;
拉取镜像
使用docker pull <image>[:tag] 拉取镜像(忽略tag时为d最新的,即latest);如要拉取最新的mysql镜像:
docker pull mysql
修改镜像位置
修改镜像存放位置需要:
-
备份原来的镜像; wsl --export docker-desktop D:\Programme\docker\docker-desktop.tar
wsl --export docker-desktop-data D:\Programme\docker\docker-desktop-data.tar
-
删除镜像; wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
-
重新创建镜像; wsl --import docker-desktop D:\Programme\docker\desktop D:\Programme\docker\docker-desktop.tar --version 2
wsl --import docker-desktop-data D:\Programme\docker\desktop-data D:\Programme\docker\docker-desktop-data.tar --version 2
修改镜像存放位置后需要重启docker服务。
容器
镜像拉到本地后,通过即可运行以启动容器:
docker run -it <image> <cmd>
cmd为运行的命令:
- linux下一般为
/bin/bash - windows下一般为
pwsh.exe
启动后会自动切换进入到容器中(执行bash时)。
相关命令
容器操作相关命令:
- 查看容器:
docker ps 查看运行容器,docker ps -a 查看所有容器; - 运行容器:
docker run -it <image> <cmd> ; - 连接已运行容器:
docker exec -it <container-id> <cmd> - 启动容器:
docker start <image> ; - 停止容器:
docker stop <container-id> ,停止所有容器docker stop $(docker ps -a -q) ; - 删除容器:
docker rm <container-id> ,删除所有容器docker rm $(docker ps -a -q) ;
docker run
docker run创建一个新的容器并运行一个命令:
docker run [options] <image> [command] [arg...]
options:
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -P: 随机端口映射,容器内部端口随机映射到主机的端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- –name=“nginx-lb”: 为容器指定一个名称;
- –dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
- –dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
- -h “mars”: 指定容器的hostname;
- -e username=“ritchie”: 设置环境变量;
- –env-file=[]: 从指定文件读入环境变量;
- –cpuset=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定CPU运行;
- -m :设置容器使用内存最大值;
- –net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
- –link=[]: 添加链接到另一个容器;
- –expose=[]: 开放一个端口或一组端口;
- –volume , -v: 绑定一个卷
docker exec
docker exec在已运行的容器中执行命令:
docker exec [options] <container-id> [command] [arg...]
options(常使用-it来连接已运行容器,用于执行命令):
- -d :分离模式: 在后台运行
- -i :即使没有附加也保持STDIN 打开
- -t :分配一个伪终端
docker ps
docker ps用于列出容器:
docker ps [options]
options:
- -a :显示所有的容器,包括未运行的。
- -f :根据条件过滤显示的内容,条件以key=value形式。
- –format :指定返回值的模板文件。
- -l :显示最近创建的容器。
- -n :列出最近创建的n个容器(如
ps -n 3 列出3个容器)。 - –no-trunc :不截断输出。
- -q :静默模式,只显示容器编号。
- -s :显示总的文件大小
获取名称包含‘develop’,且状态为exited或dead的容器ID:
docker ps -q --filter name=.*develop.* --filter status=exited --filter status=dead
docker cp
在容器与主机间复制文件(文件夹时自动复制子文件):
docker cp [OPTIONS] container:src_path dest_path
docker cp [OPTIONS] dest_path container:src_path
容器中的路径是相对于容器的根目录(/)的;主机路径是相对于当前目录的。
options:
- -a: 存档模式(复制所有uid/gid信息)
- -L: 保持源目标中的链接
docker命令
所有docker命令都是docker + <cmd> (cmd用于区分不同类型命令),基本命令:
- docker version:显示docker信息(Client与Server的版本、系统架构等);
- docker info:显示docker相关系统信息(运行、暂停、停止的容器数量、镜像数量,存储驱动类型,硬件信息等);
容器生命周期管理
容器生命周期相关命令:
- run:运行一个容器;
- start/stop/restart:启动、停止、重启容器;
- kill:杀掉容器;
- rm:删除容器;
- pause/unpause:暂停、恢复容器;
- create:创建新的容器;
- exec:在运行容器中执行命令;
容器操作
容器相关操作:
- ps:列出容器;
- inspect:获取容器/镜像的元数据;
- top:查看容器中运行的进程信息;
- attach:连接到正在运行的容器;
- events:从服务器获取实时事件;
- logs:获取容器日志;
- wait:阻塞运行直到容器停止,然后打印出其退出码;
- export:导出文件系统为一个tar文件;
- port:累出指定容器得到端口映射;
容器rootfs命令
- commit:从容器中创建一个新的镜像
- cp:容器与主机间的数据拷贝;
- diff:检查容器里文件结构的更改;
镜像仓库
镜像仓库相关操作:
- login/logout:登录、登出镜像仓库;
- pull:从江西仓库中拉取或更新指定镜像;
- push:将本地镜像上传到镜像仓库;
- search:从docker hub查找镜像;
本地镜像管理
本地镜像相关操作:
- images:列出本地镜像;
- rmi:删除本地镜像;
- tag:标记本地镜像;
- build:使用dockerfile创建镜像;
- history:查看镜像创建历史;
- save:将制定镜像保存为tar文件;
- load:导入save保存的tar镜像文件;
- import:从归档文件中创建镜像;
|