常用命令笔记
# Docker安装命令
官方文档地址:https://docs.docker.com/engine/
# CentOS
可选:卸载已安装的 Docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装 yum 工具包,添加 Docker 源地址
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
下载安装 Docker
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Ubuntu
可选-卸载已安装的 Docekr
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
更新并下载工具包
sudo apt update
sudo apt -y install ca-certificates curl gnupg
添加 Docker 的官方 GPG 密钥
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
设置存储库
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
再次更新索引后安装 Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Debian
可选-卸载已安装的 Docekr
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
更新并下载工具包
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
添加 Docker 的官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
设置存储库
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
再次更新索引后安装 Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动关闭命令
新版的 docker 变成了两个服务,需要分别启动和停止
systemctl start docker.socket
systemctl start docker.service
systemctl stop docker.service
systemctl stop docker.socket
systemctl enable docker.socket
systemctl enable docker.service
systemctl disable docker.socket
systemctl disable docker.service
旧版直接操作docker服务即可实现启动和停止
systemctl start docker
systemctl stop docker
systemctl enable docker
systemctl disable docker
# 镜像加速地址
编辑 Docker 配置文件/etc/docker/daemon.json,没有就新建,添加如下内容
{
"registry-mirrors": [
"https://docker.1panel.live",
"https://docker.1ms.run",
"https://dytt.online",
"https://docker-0.unsee.tech",
"https://lispy.org",
"https://docker.xiaogenban1993.com",
"https://666860.xyz",
"https://hub.rat.dev",
"https://docker.m.daocloud.io",
"https://demo.52013120.xyz",
"https://proxy.vvvv.ee",
"https://registry.cyou",
"https://mirror.ccs.tencentyun.com"
]
}
# 配置代理
镜像加速无效的情况下,可以考虑为 docker 配置代理下载镜像
# 移动到docker服务目录,如果目录不存在则创建通过mkdir -p创建它
mkdir -p /etc/systemd/system/docker.service.d
# 新建/编辑http代理配置文件,填写如下内容
vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7897"
Environment="HTTPS_PROXY=http://127.0.0.1:7897"
Environment="NO_PROXY=localhost,127.0.0.1"
# 重载配置文件,重启docker服务
systemctl daemon-reload
systemctl restart docker
# 辅助命令
# Docker版本信息查看
docker version
# Docker详细信息查看
docker info
# 查看Docker硬盘占用信息
docker system df
# 删除Docker缓存
docker [command] prune
[command]
image:删除所有中间层镜像,例如<none>,可以在结尾添加-a,无论是否有名称标签只要未使用都删除
container:删除所有未运行的容器
volume:删除所有未使用的容器卷
network:删除所有未使用网桥
system:谨慎使用,清理所有未使用的资源
# Docker帮助命令,可以在任何指令结尾使用--help查看帮助
docker [command] --help
# 查看Docker中某一项的详细信息
docker [command] inspect [id | name]
[command]
image:查看镜像详情
container:查看容器详情,在command中优先级最高
network:查看网桥详情
# 镜像命令
# 查看本机中所有镜像
docker images [options]
[options]
-a:列出所有镜像(包含中间映像层)
-q:只显示镜像id
# 搜索镜像
docker search [options] [image]
[options]
-s:列出收藏数不少于指定值的镜像
--no-trunc:显示完整的镜像信息
# 从仓库下载镜像,tag不填默认下载最新版
docker pull [image:tag]
# 删除镜像
docker rmi [options] [id | image:tag]
[options]
-f:无视容器启动状态,强制删除镜像
# 打包镜像,这里建议使用image:tag进行保存,可直接保存为tar,也可以保存并压缩
docker save [id | image:tag] -o 名称.tar
docker save [id|image:tag] | gzip > 名称.tar.gz
# 载入镜像,可直接导入tar文件,也可以解压后导入
docker load -i 名称.tar
gunzip -c 名称.tar.gz | docker load
# 如果镜像载入后image:tag均为none,可以使用docker tag命令分配
docker tag [id] [image:tag]
# 容器命令
当遇到容器与宿主机使用:关联时,除非明确指定哪一侧所在位置,其他默认使用 [ 宿主机:容器 ] 顺序
# 运行容器,最常用的命令参数很多这里优先记录,本地没有镜像会自动下载,未指定tag默认使用最新版
docker run [options] [image:tag]
[options]
--restart:容器重启策略
no:不启动容器
always:容器退出时启动容器
unless-stopped:非手动停止容器后启动容器
on-failure:指定退出n次后重启容器,例如 --restart on-failure:3
--network:指定容器的网桥
--name:容器别名
-d:启动守护式容器(在后台启动容器)
-p:端口映射
-P:随机指定宿主机端口映射
-v:文件映射,也就是volume
-e:用作向容器内传递初始化参数
--privileged:赋予容器高级权限,可以访问宿主机设备文件,可以执行一些特权操作,可以绕过一些安全性措施
--env-file:以文件的方式向容器内传入初始化参数
# 创建容器,启动容器、重启容器
docker create [options] [image:tag]
docker start [id | container]
docker restart [id | container]
# 停止容器、删除容器
docker stop [id | container]
docker rm [options] [id | container]
[options]
-f:无视运行状态,强制删除容器
# 查看容器列表,默认只查看运行中的容器
docker ps [options]
[options]
-a:显示所有容器
-q:只显示容器ID
-a -f "status=exited":查看停止的容器
# 查看Docker容器的占用情况,例如CPU,内存,网络资源等
docker stats [container]
# 查看所有进程、暂停所有进程、恢复所有进程
docker top [id | container]
docker pause [id | container]
docker unpause [id | container]
# 在容器中执行命令,command是执行的目标
docker exec [options] [id | container] [command]
[options]
-i:以交互模式运行容器
-t:分配一个伪终端
[command]
/bin/bash:最常用组合 -it /bin/bash,分配伪终端,以交互式运行bash,就可以执行容器内的命令了
# 修改容器配置信息
docker update [options]
[options]
--restart:修改自启动规则,默认为no表示没有自启动规则
--blkio-weight:设置IO权重,默认为0表示不限制
--cpu-shares:设置CPU限制,默认为0表示不限制
--memory:设置内存限制,默认为0表示不限制
# 查看容器的运行日志
docker logs [options] [id | container]
[options]
-t:加入时间戳
-f:跟随最新的日志打印
--tail:显示最后的几条日志
--since:显示某个开始时间的所有日志,时间格式支持[RFC3339]、[年月日时分秒]、秒级时间戳
# 容器和宿主机之间复制文件,如果container在左侧就代表复制容器内的文件到宿主机
docker cp [container]:[path] [path]
docker cp [path] [container]:[path]
# 容器重命名
docker rename [container] [新容器名]
# 容器打包成新的镜像
docker commit [options] [container:tag]
[options]
-a:镜像作者
-c:使用Dockerfile指令来创建镜像
-m:提交时的说明文字
-p:在commit时,将容器暂停
# 网桥命令
# 查看网桥列表
docker network ls
# 创建网桥
docker network create [options] [network]
[options]
-d:驱动程序,就是ls中的driver列,默认使用bridge
# 删除网桥
docker network rm [network]
# 查看网桥详细信息以及使用网桥的容器
docker inspect network [network]
# Dockerfile
新建一个目录,目录内创建名为Dockerfile的文件,将与镜像相关的文件都放在该目录下
构建镜像的命令
# 正常构建镜像执行该命令即可
docker build -t image:tag .
# 构建镜像
docker build [options] [container:tag]
[options]
-t:指定构建的镜像名称及标签,参照上面的[container:tag]
-f:可以使用该选项指定Dockerfile的路径,而不是默认的当前目录下的Dockerfile
-q:静默模式,可以使用该选项关闭构建过程中的输出信息,只输出构建结果
--force-rm:在构建时强制删除同名镜像
--build-arg:设置构建时的参数通过${}使用,例如 --build-arg NGINX_VERSION=1.19.5
Dockerfile的常用参数笔记
FROM 源镜像
MAINTAINER 作者信息
RUN 构建镜像时运行的指令
CMD 运行容器时执行的shell环境
VOLUME 如果在启动容器时忘记挂载数据卷,该属性会自动挂载到匿名卷
WORKDIR 设置工作目录,后续的相对路径就是基于工作目录,进入容器后默认就是该位置
ENV 构建参数,例如MySQL的root密码
ARG 构建参数,与ENV作用一致,不过作用域不一样,仅在docker build的过程中有效
EXPOSE 声明容器的服务端口(仅仅是声明)
COPY 拷贝文件或目录到容器中
ADD 拷贝文件或目录到容器中,如果是URL会自动下载,压缩包会自动解压
ENTRYPOINT 运行容器时执行的shell命令
# docker-compose
官方文档:https://docs.docker.com/compose
开源地址:https://github.com/docker/compose
# 安装Compose
新版免安装 docker-compose
新版 Docker 在安装时提供了docker-compose-plugin插件,安装 Docker 时顺便就安装了 compose,可以回顾上面的安装命令
# docker-compose 已安装
docker compose version
Docker Compose version v2.21.0
旧版安装 docker-compose
旧版的 Docker 需要在Github上下载docker-compose文件并赋予执行权限
# 访问Github将文件下载到/usr/local/bin/目录下重命名为docker-compose
curl -SL https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
# 赋予docker-compose可执行权限
chmod +x /usr/local/bin/docker-compose
# 检查安装情况
docker-compose version
Docker Compose version v2.20.3
# 使用Compose
在当前目录下创建docker-compose.yml文件后就可以使用compose了
docker-compose 常用命令及参数
# 拉取镜像
docker compose pull
# 创建容器但不启动,没有镜像会下载
docker compose create
# 停止所有容器
docker compose stop
# 删除所有容器
docker compose rm
# 启动所有服务,没有服务会创建,没有镜像会下载,最常用的命令,在这里介绍参数,-d 参数在后台执行
docker compose up [options] [name]
[options]
-d:后台启动docker-compose
--no-deps:无视依赖情况
--scale service=2:启动服务集群
--remove-orphans:自动清理孤儿容器
[name]:结尾的name为可选项,默认compose处理所有容器,使用name后就处理指定名称的容器
# 停止并删除所有服务, -v 同时删除容器卷和网桥
docker compose down
# 列出所有服务的状态
docker compose ps
# 显示所有服务的日志, -f 可实时查看
docker compose logs
# 重启所有服务
docker compose restart
# 构建镜像
docker compose build
docker-compose.yml 参考文件
version: "3.9"
networks:
channel:
name: mynet
driver: bridge
services:
minio:
hostname: minio
container_name: minio
image: minio/minio:latest
restart: always
networks:
- mynet
ports:
- "9000:9000"
- "9001:9001"
environment:
- "TZ=Asia/Shanghai"
- "MINIO_ACCESS_KEY=minio"
- "MINIO_SECRET_KEY=1234567890"
volumes:
- "/opt/docker/minio/data:/data"
- "/opt/docker/minio/conf:/root/.minio"
command: server /data --console-address ":9000" --address ":9001"
nginx:
hostname: nginx
container_name: nginx
image: nginx:1.22.0
restart: always
networks:
- mynet
ports:
- "80:80"
- "443:443"
environment:
- "TZ=Asia/Shanghai"
volumes:
- "/opt/docker/nginx/conf/:/etc/nginx"
- "/opt/docker/nginx/webs/:/usr/share/nginx"
- "/opt/docker/nginx/logs/:/var/log/nginx"
depends_on:
- minio