docker学习笔记(一):基础

229 阅读7分钟

一、安装与卸载

安装

系统:ubuntu(windows虚拟环境)

// 卸载旧版
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

// 安装
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") 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-buildx-plugin docker-compose-plugin

# 安装特定版本
# 列出存储库可用版本
sudo apt-cache madison docker-ce | awk '{ print $3}'
# 选择需要的版本并安装
VERSION_STRING=5:25.0.3-1~ubuntu.22.04~jammy
sudo apt-get install docker-ce=$VERSION_STRING ......

sudo docker run hello-world

// 

Ubuntu安装(官方)

ps: 以下命令是在windows的虚拟环境中运行的,需要使用sudo命令,与正常环境没有什么不同,

卸载

// 卸载 Docker Engine、CLI、containerd 和 Docker Compose 软件包:
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

// 主机上的映像、容器、卷或自定义配置文件不会自动删除。要删除所有映像、容器和卷:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

二、镜像

镜像列表

sudo docker images [options];
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d2c94e258dcb 9 months ago 13.3kB

options:

  • -a : 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
  • --digests : 显示镜像的摘要信息;
  • -f : 显示满足条件的镜像;
  • --format : 指定返回值的模板文件;
  • --no-trunc : 显示完整的镜像信息;
  • -q : 只显示镜像ID。

删除镜像

sudo docker rmi [options] IMAGE_ID [... ...]
sudo docker rmi d2c94e258dcb;

sudo docker images;
REPOSITORY TAG IMAGE ID CREATED SIZE
暂无数据

options:

  • -f: 强制删除
  • --no-prune: 不移除该镜像的过程镜像,默认移除

镜像查找

sudo docker search [options ]imageName

sudo docker search nginx

options:

  • --automated : 只列出 automated build类型的镜像;
  • --no-trunc : 显示完整的镜像描述;
  • -f <过滤条件>: 列出收藏数不小于指定值的镜像。

镜像拉取

sudo docker pull imageName

sudo docker pull nginx:lat

创建容器并运行

sudo docker run [options] imageName

// 运行nginx
sudo docker run --name nginx_one -p 10000:80 nginx

// 浏览器地址栏输入127.0.0.1:10000,默认是127.0.0.1

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: 绑定一个卷

标签

标记本地镜像,将其归入某一个仓库

sudo docker tag [options] IMAGE[:tag] [registryhost/][username/]name[:tag]

构建

sudo docker build [options]
  • --build-arg=[] : 设置镜像创建时的变量;
  • --cpu-shares : 设置 cpu 使用权重;
  • --cpu-period : 限制 CPU CFS周期;
  • --cpu-quota : 限制 CPU CFS配额;
  • --cpuset-cpus : 指定使用的CPU id;
  • --cpuset-mems : 指定使用的内存 id;
  • --disable-content-trust : 忽略校验,默认开启;
  • -f : 指定要使用的Dockerfile路径;
  • --force-rm : 设置镜像过程中删除中间容器;
  • --isolation : 使用容器隔离技术;
  • --label=[] : 设置镜像使用的元数据;
  • -m : 设置内存最大值;
  • --memory-swap : 设置Swap的最大值为内存+swap,"-1"表示不限swap;
  • --no-cache : 创建镜像的过程不使用缓存;
  • --pull : 尝试去更新镜像的新版本;
  • --quiet, -q : 安静模式,成功后只输出镜像 ID;
  • --rm : 设置镜像成功后删除中间容器;
  • --shm-size : 设置/dev/shm的大小,默认值是64M;
  • --ulimit : Ulimit配置。
  • --squash : 将 Dockerfile 中所有的操作压缩为一层。
  • --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
  • --network: 默认 default。在构建期间设置RUN指令的网络模式

历史

查看指定镜像的创建历史

sudo docker history [options] image
  • -H : 以可读的格式打印镜像大小和日期,默认为true;
  • --no-trunc : 显示完整的提交记录;
  • -q : 仅列出提交记录ID。

镜像归档

将指定镜像保存成 tar 归档文件。

sudo docker save [options] image [... ...]

options:
-o : 输出到的文件。

load导入使用

导入使用 docker save 命令导出的镜像。

sudo docker [options]

options:

  • --input , -i : 指定导入的文件,代替 STDIN。

  • --quiet , -q : 精简输出信息。

import创建镜像

从归档文件中创建镜像。

sudo docker [options] { file | url | - } [repository[:tag]]

options:

  • -c : 应用docker 指令创建镜像;
  • -m : 提交时的说明文字;

三、镜像仓库

登录

sudo docker login [options] [server]

options:

  • -u : 登陆的用户名
  • -p : 登陆的密码

退出

sudo docker logout [options] [server]

options: 同登录

拉取或更新

sudo docker pull [options] name[:tag|@digest]

options:

  • -a : 拉取所有 tagged 镜像
  • --disable-content-trust : 忽略镜像的校验,默认开启

推送远程

sudo docker [options] name[:tag]

options:

  • --disable-content-trust : 忽略镜像的校验,默认开启

四、容器

容器列表

sudo docker ps [options]

sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a65dc316bc5f hello-world "/hello" 2 minutes ago Exited (0) 2 minutes ago boring_einstein

options:

  • -a : 显示所有的容器,包括未运行的。
  • -f : 根据条件过滤显示的内容。
  • --format : 指定返回值的模板文件。
  • -l : 显示最近创建的容器。
  • -n : 列出最近创建的n个容器。
  • --no-trunc : 不截断输出。
  • -q : 静默模式,只显示容器编号。
  • -s : 显示总的文件大小。

删除容器

sudo docker [options] container_id [ ... ... ]
sudo docker rm a65dc316bc5f
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
暂无数据

创建容器

sudo docker create [options] image {name[:tag]}

运行容器

sudo docker start { container_id | name }

停止容器

sudo docker stop { container_id | name }

重启容器

sudo docker restart { container_id | name }

杀掉进程

sudo docker [options] kill { container_id | name }

options:

  • -s : 向容器发送一个信号

暂停容器进程

sudo docker pause { container_id | name }

查看已暂停的容器

sudo docker ps -a | grep Paused

恢复已暂停的容器

sudo docker unpause { container_id | name }

进入容器-attach

// attach链接容器,退出后终止容器
sudo docker attach [options] { container_id | name }

// --sig-proxy=false可以在退出后保持容器运行
sudo docker attach --sig-proxy=false { container_id | name }

进入容器-exec

sudo docker exec [options] { container_id | name }

options:

  • -d: 分离模式,在后台运行
  • -i: 即使没有附加也保持STDIN(标准输出)打开
  • -t: 分配一个伪终端

获取容器/镜像的元数据

sudo docker inspect [options] { ID | name } [{ ID | name }]

options:

  • -f: 指定返回值的模板文件
  • -s: 显示总的文件大小
  • --type: 为指定类型返回的JSON

日志

sudo docker logs { container_id | name }

阻塞

sudo docker wait [options] { container_id | name }

导出

sudo docker [options] { container_id | name }

options:

  • -o: 将输入内容写到文件里

查端口映射

sudo docker port { container_id | name }

显示容器状态

sudo docker stats [options] { container_id | name }

options:

  • --all , -a : 显示所有的容器,包括未运行的。
  • --format : 指定返回值的模板文件。
  • --no-stream : 展示当前状态就直接退出了,不再实时更新。
  • --no-trunc : 不截断输出。

查看容器进程

sudo docker top [options] { container_id | name }

检查容器中文件结构的变更

sudo docker diff [options] { container_id | name }

创建镜像

sudo docker commit [options] { container_id | name }[repository[:tag]]

options:

  • -a : 提交的镜像作者;
  • -c : 使用Dockerfile指令来创建镜像;
  • -m : 提交时的说明文字;
  • -p : 在commit时,将容器暂停。

五、其他

拷贝

容器和主机之间的数据拷贝

// 从容器移动到主机
sudo docker cp [options] container:src_path dest_path|-

// 从主机拷贝到容器
sudo docker cp [options] src_path|- container:src_pathc

// desc_path参数中,尾部字符串带有"/"是拷贝到目录中,没有则是重命名

options:

  • -L : 保持源目标中的链接

查看系统信息

sudo docker info [options]

查看docker版本

sudo docker version