docker 基础命令

docker

安装

更新系统

bash 复制代码
sudo apt update
sudo apt -y dist-upgrade

安装docker

bash 复制代码
sudo apt-get -y install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin

开启远程访问api

bash 复制代码
sudo vim /lib/systemd/system/docker.service
# 找到ExecStart
将 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H 
# 修改为
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
# 保存退出。
bash 复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
bash 复制代码
curl http://ip:2375/version

Docker 架构

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

命令篇

查找镜像

bash 复制代码
sudo docker search ubuntu
bash 复制代码
sudo docker search centos
bash 复制代码
sudo docker search nginx

拉取镜像

sudo docker pull 镜像名称:版本

如果不写版本号 默认版本为 latest

bash 复制代码
sudo docker pull ubuntu:24.04
bash 复制代码
sudo docker pull centos:centos7
bash 复制代码
sudo docker pull nginx
bash 复制代码
sudo docker pull mysql
bash 复制代码
sudo docker pull registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c

查看本地镜像

bash 复制代码
sudo docker images
选项 说明
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像创建时间
SIZE 镜像的大小

同一个仓库源可以有多个TAG 代表这个仓库的不同个版本

系统镜像运行容器

参数说明

参数 说明
-i 交互式操作 即使没没有附加也会保持 STDIN 打开
-t 分配伪终端
-d 分离模式 在后台运行
/bin/bash 使用那个shell环境
sh 使用那个shell环境
--rm 容器停止后自动删除容器
bash 复制代码
sudo docker run -itd ubuntu:24.04

查看容器

sudo docker ps 查看运行中的容器

sudo docker ps -a 查看所有容器包括没有运行的容器

bash 复制代码
sudo docker ps
bash 复制代码
sudo docker ps -a

停止容器

bash 复制代码
sudo docker stop 容器ID 
bash 复制代码
sudo docker kill 容器ID 

启动容器

bash 复制代码
sudo docker start 容器ID 

进入正在运行的容器

bash 复制代码
sudo docker exec -it 容器ID /bin/bash

从正在运行的容器终端退出到宿主主机

bash 复制代码
exit

删除容器
删除未运行的容器

bash 复制代码
sudo docker rm 容器ID

删除运行中的容器

bash 复制代码
sudo docker rm -f 容器ID

删除镜像

如果不写版本号 默认版本为 latest

bash 复制代码
sudo docker rmi 镜像名称:版本

指定容器名

-p 端口映射 物理主机端口:容器主机端口

--name 容器名

bash 复制代码
sudo docker run -d -p 81:80 --name nginx01 nginx

容器退出时删除容器

--rm

bash 复制代码
sudo docker run -d -p 82:80 --rm --name nginx02 nginx

容器重启策略

--restart=always

--restart=always 表示容器退出时,docker会总是自动重启这个容器

--restart=on-failure:3 表示容器的退出状态码非0(非正常退出),自动重启容器,3是自动重启的次数。超过3此则不重启

--restart=no 默认值,容器退出时,docker不自动重启容器

--restart=unless-stopped 表示容器退出时总是重启,但是不考虑docker守护进程运行时就已经停止的容器

bash 复制代码
sudo docker run -d -p 83:80 --restart=always --name nginx03 nginx

环境变量

-e

bash 复制代码
sudo docker run --rm -p 3306:3306 -p 33060:33060 \
--name mysql-test -e MYSQL_ROOT_PASSWORD=lihaozhe -itd mysql

限制CPU和内存

--cpus CPU数量

--memory 内存大小 单位 b kb m g

bash 复制代码
sudo docker run -d -p 85:80 --rm --cpus 2 --memory 256m --name nginx05 nginx
bash 复制代码
sudo docker stats nginx05

查看容器日志

-f 追踪实时日志

-t 现实时间戳

bash 复制代码
sudo docker logs -ft nginx05

数据卷

bash 复制代码
sudo docker run -d -p 86:80 --rm --name nginx06 nginx
bash 复制代码
sudo docker inspect nginx06 | grep UpperDir
bash 复制代码
sudo ls -l /var/lib/docker/overlay2/52bce6808bd731967bf71f820f7a5127306a84bff80a96fda5fcbd4da59f0ae3/diff
bash 复制代码
sudo mkdir /var/lib/docker/overlay2/52bce6808bd731967bf71f820f7a5127306a84bff80a96fda5fcbd4da59f0ae3/diff/aa
sudo mkdir /var/lib/docker/overlay2/52bce6808bd731967bf71f820f7a5127306a84bff80a96fda5fcbd4da59f0ae3/diff/bb
sudo mkdir /var/lib/docker/overlay2/52bce6808bd731967bf71f820f7a5127306a84bff80a96fda5fcbd4da59f0ae3/diff/cc
bash 复制代码
sudo docker exec -it nginx06 /bin/bash
bash 复制代码
ls
bash 复制代码
mkdir /dd
bash 复制代码
exit
bash 复制代码
sudo ls -l /var/lib/docker/overlay2/52bce6808bd731967bf71f820f7a5127306a84bff80a96fda5fcbd4da59f0ae3/diff
bash 复制代码
sudo docker stop nginx06

当容器删除后 数据卷和容器一起被删除

匿名绑定

-v 就是 --volume

-v 容器中的路径 这就是匿名绑定

Source 物理主机路径

Destination 容器主机路径

bash 复制代码
"Mounts": [
            {
                "Type": "volume",
                "Name": "a6c2be4750a24e2384e87a60c55961f0f2ffe4f0def0bc084ee2c77f79071e6a",
                "Source": "/var/lib/docker/volumes/a6c2be4750a24e2384e87a60c55961f0f2ffe4f0def0bc084ee2c77f79071e6a/_data",
                "Destination": "/usr/share/nginx/html",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
bash 复制代码
sudo docker run -d -p 10007:80 -v nginx-volume:/usr/share/nginx/html --name nginx-volume nginx
bash 复制代码
sudo docker inspect nginx-volume
bash 复制代码
su root
bash 复制代码
cd /var/lib/docker/volumes/49114e1e1a6f6c9b57ca4c3aa380dd4b40807e389f089f0b0ed64581b27089a9/_data
bash 复制代码
sudo docker volume prune
bash 复制代码
ls /var/lib/docker/volumes
选项 说明
create 创建数据卷
inspect 显示数据卷详情
ls 列表方式显示数据卷
prune 删除不使用的数据卷
rm 删除数据卷

具名绑定

-v 就是 --volume

-v 数据卷名:容器中的路径 这就是具名绑定

Source 物理主机路径

Destination 容器主机路径Bind Mount

bash 复制代码
"Mounts": [
            {
                "Type": "volume",
                "Name": "nginx-volume",
                "Source": "/var/lib/docker/volumes/nginx-volume/_data",
                "Destination": "/usr/share/nginx/html",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ]
bash. 复制代码
sudo docker volume create nginx-volume
bash 复制代码
sudo docker volume ls 
bash 复制代码
sudo docker run -d -p 10008:80 -v nginx-volume:/usr/share/nginx/html --name nginx-volume nginx
bash 复制代码
sudo docker inspect nginx-volume
bash 复制代码
sudo docker stop nginx-volume
bash 复制代码
sudo docker rm nginx-volume
bash3 复制代码
sudo docker volume rm nginx-volume
bash 复制代码
ls /var/lib/docker/volumes

Bind Mount

-v 就是 --volume

-v 物理机路径:容器中的路径 Bind Mount

Source 物理主机路径

Destination 容器主机路径

bash 复制代码
sudo docker run --name nginx-test --rm -d -p 80:80 nginx
# 准备 nginx 容器与本地文件映射文件目录
# /home/lhz/nginx/html 存放网页文件
# /home/lhz/nginx/conf.d 存放配置文件
mkdir -p /home/lhz/nginx/html /home/lhz/nginx/conf.d
# docker cp:用于容器与主机之间的数据拷贝
# 从容器中拷贝文件到本地
sudo docker cp nginx-test:/usr/share/nginx/html /home/lhz/nginx
sudo docker cp nginx-test:/etc/nginx/conf.d/default.conf /home/lhz/nginx/conf.d
sudo docker cp nginx-test:/etc/nginx/nginx.conf /home/lhz/nginx
# 删除现有nginx容器
sudo docker stop nginx-test
bash 复制代码
sudo docker run -d -p 80:80 \
-v /home/lhz/nginx/html:/usr/share/nginx/html \
-v /home/lhz/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-v /home/lhz/nginx/nginx.conf:/etc/nginx/nginx.conf \
--name nginx-test --restart=always nginx
bash 复制代码
sudo docker run -d -p 81:80 \
-v /home/lhz/nginx/html:/usr/share/nginx/html \
-v /home/lhz/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-v /home/lhz/nginx/nginx.conf:/etc/nginx/nginx.conf \
--name nginx-test01 --restart=always nginx
bash 复制代码
sudo docker run -d -p 82:80 \
-v /home/lhz/nginx/html:/usr/share/nginx/html \
-v /home/lhz/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-v /home/lhz/nginx/nginx.conf:/etc/nginx/nginx.conf \
--name nginx-test02 --restart=always nginx

html:/usr/share/nginx/html

-v /home/lhz/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf

-v /home/lhz/nginx/nginx.conf:/etc/nginx/nginx.conf

--name nginx-test01 --restart=always nginx

复制代码
```bash
sudo docker run -d -p 82:80 \
-v /home/lhz/nginx/html:/usr/share/nginx/html \
-v /home/lhz/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-v /home/lhz/nginx/nginx.conf:/etc/nginx/nginx.conf \
--name nginx-test02 --restart=always nginx
相关推荐
python算法(魔法师版)2 分钟前
Docker容器启动失败?无法启动?
linux·运维·nginx·docker·容器
中科岩创4 小时前
某公园楼栋自由曲面薄壳结构自动化监测
大数据·网络·物联网·自动化
caihuayuan55 小时前
升级element-ui步骤
java·大数据·spring boot·后端·课程设计
不学无术の码农6 小时前
Ubuntu 22.04 (WSL2) 上使用 Docker 安装 Nacos 3.0.0
ubuntu·docker
AnnyYoung7 小时前
从Dockerfile 构建docker镜像——保姆级教程
docker·容器·eureka
慧一居士7 小时前
Docker Compose 的详细使用总结、常用命令及配置示例
容器·架构
何怀逸7 小时前
安装 Docker
运维·docker·容器
码码哈哈0.07 小时前
2025最新:3分钟使用Docker快速部署单节点Redis
redis·docker·eureka
云攀登者-望正茂7 小时前
通过Kubernetes 外部 DNS控制器来自动管理Azure DNS 和 AKS
容器·kubernetes·azure
zskj_zhyl8 小时前
数字康养新范式:七彩喜平台重构智慧养老生态的深度实践
大数据·人工智能·物联网