百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Docker 必知必会的操作命令,真的很通俗易懂?

nanshan 2024-11-04 13:03 24 浏览 0 评论

一、基础概念

Docker是基于Go开发的应用容器引擎,属于 Linux 容器的一种封装,提供简单易用的容器使用接口。

解决难题:

  • 环境配置不一致
  • 虚拟机累赘(资源占用大、启动慢等)

主要用途:

  • 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
  • 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容,组建微服务架构。

当人们说 “Docker” 时,他们通常是指 Docker Engine,它是一个客户端-服务器应用程序, 由 Docker 守护进程、REST API、命令行接口(CLI)组成。

结构

  1. 客户端调用 Docker
  2. Docker 从 Registry 拉取镜像(image)
  3. 通过镜像生成容器(container)实例

镜像 image

Docker 把应用程序及其依赖,打包在 image 文件里面。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。

image 文件是通用的。一般来说,为了节省时间,我们应该尽量使用别人制作好的 image 文件。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。

容器container

容器是一个镜像的可运行的实例,可以使用 Docker REST API 或者 CLI 来操作容器,容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。

容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

注册表(仓库)registry

存放镜像的地方(公有/私有)

为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库 Docker Hub 是最重要、最常用的 image 仓库。

UnionFS 联合文件系统

联合文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。

联合文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来只能看到一个文件系统。联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

镜像加载原理

Docker的镜像是由多层文件系统组成:

  • bootfs(boot file system)主要包含 bootloader 和 kernel。bootloader 主要是引导加载kernel,完成后整个内核就都在内存中了。此时内存的使用权已由bootfs转交给内核,系统卸载 bootfs。可以被不同的 Linux 发行版共用。
  • rootfs(root file system),包含典型Linux系统标准目录和文件。相当于各种不同操作系统发行版(Ubuntu,Centos等)。因为底层直接用 Host 的kernel,rootfs 只包含最基本的命令,工具和程序就可以了。当进行修改或者更新时,会在当前镜像层上新建新的层级。

二、安装

Ubuntu

1.设置 Docker apt 仓库

# 添加 Docker 官方 GPG 秘钥:

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




# 添加 Apt 源到仓库:

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

2.安装 Docker 包

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

3.运行

sudo docker run hello-world

三、基本操作

基本信息

信息查看

# 显示docker的基本信息

$ docker version 

# 系统信息,镜像和容器的数量

$ docker info 




# 查看docker事件

$ docker events [OPTIONS]




# 全部帮助

$ docker --help 

# 个别命令帮助

$ docker [命令] --help

仓库 registry

docker search

# 搜索镜像

docker search [OPTIONS] 镜像名




# 相当于在 hub.docker.com 页面搜索




选项:

  -f,--filter filter 过滤输出

    --format string  格式化输出

    --limit int 最大搜索结果数(默认为25)

    --no-trunc 不截断输出




示例:

docker search mysql

docker login

# 登录到registry
docker login [OPTIONS] [SERVER]


常用选项:
 -p ,--password  密码
 -u ,--username  用户名


示例:
docker login
>输入账号
>输入密码


# 登录到私有registry
docker login localhost:8080
docker login -u username -p userpasswd 192.168.1.33:5000


# 注销
docker logout [SERVER]

镜像 image

docker images

docker images [OPTIONS] [REPOSITORY[:TAG]]

docker images = docker image ls




常用选项:

-a , --all   # 显示所有(默认隐藏中间图像)

--digests       # 显示摘要

-f , --filter filter # 过滤输出

--format string # 格式化输出

--no-trunc      # 不截断输出(ID缩写是12位,不截断输出就是64位)

-q , --quiet    # 只显示id




示例:




# 只显示ID

docker images -aq

docker pull

# 拉取镜像

docker pull [OPTIONS] NAME[:TAG|@DIGEST]




# 默认仓库为docker.io/library/

# 默认版本为:latest

# 所以docker pull mysql 等价于 docker pull docker.io/library/mysql:latest

docker rmi

# 删除镜像

docker rmi [OPTIONS] IMAGE [IMAGE...]




常用选项:

-f 强制删除图像




# 删除所有( linux 小技巧)

$ docker rmi -f $(docker images -aq)

# 或

$ docker images -qa | xargs docker rmi

docker import 与 export

# 导出镜像

docker export [OPTIONS] CONTAINER




常用选项:

-o,--output    写入文件,而不是STDOUT




例子:

docker export exampleimage > exampleimage.tar

# 或

docker export --output="exampleimage.tar" exampleimage

# 导入镜像

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]




常用选项:

-c, --change  将Dockerfile指令应用于创建的映像(支持的Dockerfile指令:CMD| ENTRYPOINT| ENV| EXPOSE| ONBUILD| USER| VOLUME|WORKDIR)

-m,--message  设置导入图像的提交消息

--platform  API 1.32+ ;如果服务器支持多平台,则设置平台




示例:




# 远程

docker import http://example.com/exampleimage.tgz




# 本地

docker import /path/to/exampleimage.tgz

# 或

cat exampleimage.tgz | docker import - exampleimagelocal:new




# 本地目录

sudo tar -c . | docker import - exampleimagedir

容器 container

基础操作

# 启动容器

docker start

# 重启容器

docker restart

# 停止容器

docker stop

# 杀掉容器

docker kill 




# 查看容器元数据(详细信息)

docker inspect 

# 查看内容占用

docker stats 

# 查看容器中的进程信息

docker top

docker ps

# 查看容器列表

docker ps [OPTIONS]

docker ps  = docker container ls




常用选项:

-a,--all   显示所有容器(默认显示正在运行)

-f,--filter    过滤输出

  --format  使用Go模板格式化输出

-n,--last  显示n个最后创建的容器

-l ,--latest  显示最新创建的容器

  --no-trunc  不要截断输出

-q, --quiet  仅显示容器ID

-s, --size   显示文件总大小

docker run

# 运行容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]




# run的时候如果本地没有镜像的话,会自动执行拉取操作




常用选项:

-d,--detach 在后台运行容器并打印容器ID

-e,-env list 设置环境变量

-h,--hostname string 容器主机名

  --mount mount 绑定卷

  --name string 分配名称

  --network 连接到网络

  --rm  退出时自动删除容器

-v,-volume list 映射卷

-p 指定容器的端口 如-p 8080:8080

例子:

 -p ip:主机端口:容器端口

 -p 主机端口:容器端口

 -p 容器端口




-i 交互式操作。

-t --tty 分配一个伪TTY连接终端

-m --memory bytes  内存限制

  --privileged 赋予最高权限(危,无限制,有主机权限)

  --restart string 重启策略,参数示例:

  --restart=always   自启

  --restart=on-failure:3  非正常退出 重试3次

  --restart=unless-stopped 不尝试启动




示例:

# 容器停止后自动删除

docker run --rm hello-world




# 后台运行并给它命名

docker run -itd --name uuu ubuntu




# run并且以终端模式进入该容器

docker run -it ubuntu /bin/bash

# 输入 exit 回车 停止并退出容器

# 或快捷键 Ctrl + P + Q 不停止容器的退出




# 运行并映射卷到主机

docker run -p 3306:3306 --name mysql -v "$(pwd)"/docker_v/mysql/conf:/etc/mysql/conf.d mysql

docker rm

# 删除容器

docker rm [OPTIONS] CONTAINER [CONTAINER...]




常用选项:

 -f, --force  强制删除正在运行的容器(使用SIGKILL)

 -l ,--link  删除指定的链接

 -v,--volumes   删除与容器关联的匿名卷




示例:

# 删除指定容器 不能删除正在运行的容器,如果强制删除 rm -f

docker rm 容器id

# 删除所有容器

docker rm -f $(docker ps -aq)

# 删除所有容器

docker ps -a -q|xargs docker rm

docker logs

# 查看容器日志

docker logs [OPTIONS] CONTAINER




常用选项::

    --details 显示详细信息

  -f,--follow 跟随日志输出

    --since string 显示自时间戳

    --tail string 显示行数

  -t,--timestamps显示时间戳




例子:

docker logs

docker logs -f -t --tail 10 容器名或id

docker exec

# 连接容器终端(进入容器)

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]




# 也可以用 docker attach 进入容器终端




常用选项:

-d,--detach 在后台运行命令

-e,-env 环境变量

-i,--interactive 即使未连接STDIN仍保持打开状态(交互式操作)

-t,--tty分配伪TTY(终端)




# 同上面的run中操作一样,这一步可以在运行后进入到容器中,如:

docker exec -it uuu /bin/bash




# 区别

# docker exec 进入容器后开启一个新的终端,可以在里面操作(常用)

# docker attach 进入容器正在执行的终端,不会启动新的进程

docker cp

# 拷贝容器中的文件

docker cp 容器名/id:容器内路径 主机文件路径




示例:

#拷贝容器数据到主机

docker cp 容器名:/home/file /home

docker update

#更新基础设置

docker update [OPTIONS] CONTAINER [CONTAINER...]




常用选项:

-c cpu权重

-m 内存限额

--restart  重启策略




示例:

# 更新某个容器的重启策略,使其重启自动启动

docker update --restart=always <CONTAINER ID>

其他操作

docker volume create

# 创建卷

docker volume create [OPTIONS] [VOLUME]




选项:

-d , --driver 默认local   指定卷驱动程序名称

  --label  设置卷的元数据

  --name  指定卷名

-o , --opt  设置驱动程序特定选项




示例:

# 创建一个卷

docker volume create hello




# 使用这个卷

docker run -d -v hello:/world busybox ls /world

挂载卷说明

# 将容器内的目录,挂载到宿主机上或其他容器内,实现同步和共享,并且删除日期后挂载到本地的文件也不会消失




# 指定目录挂载:

dokcer run -it -v 主机内目录:容器内目录 镜像名/id




# 匿名挂载:

docker run -d -v 容器内目录 镜像名/id




# 具名挂载

docker run -d -v 卷名:容器内目录 镜像名/id




# 查看所有挂载的卷:

docker volume ls




# 查看卷信息

docker volume inspect 卷名




# 所有docker容器内的卷,在未指定主机内目录时,都会创建在:/var/lib/docker/volumes/卷名/_data 下




示例:

# minio文件服务器,指定目录挂载

docker run -p 9000:9000 --name minio -d \

-e "MINIO_ACCESS_KEY=admin" \

-e "MINIO_SECRET_KEY=admin123456" \

-v /home/cc/minio/data:/data \

-v /home/cc/minio/config:/root/.minio minio/minio server /data




# 数据卷容器(多个容器共享一个卷)

docker run -it --name 容器02 --volumes from 容器01 镜像名/id

docker network create

# 创建一个网络
docker network create [OPTIONS] NETWORK


常用选项:
-d , --driver  驱动程序,默认bridge,可选overlay或第三方或自定义
--config-from  从中复制配置的网络
--ipv6  启用IPv6网络
--label  在网络上设置元数据


network创建参数挺多的,这里不赘述,感兴趣可以看下官网文档


示例:
# 创建一个overlay 模式的网络
docker network create -d overlay my-network


# 容器连接至该网络
docker run -itd --network=my-network busybox

网络模式说明

# 查看IP
$ ip addr 
# 查看docker0
$ ip addr show docker0

bridge 模式

bridge 模式

# 当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥

# 这个docker0 也作为容器的默认网关,主机也可以ping通容器,但是容器之间是隔离的

# 不写–net参数,默认就是bridge模式。使用docker run -p时,docker 实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。




# 新建一个网络

$ docker network create -d bridge my-net




# 运行一个容器并连接到新建的 my-net 网络

$ docker run -it --rm --name busybox1 --network my-net busybox sh




# 加入系统网络的应用,可以互相ping通,如我可以在其他加入了my-net的容器里:

$ ping busybox

> PING busybox (172.19.0.2): 56 data bytes

> 64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.064 ms

> 64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.143 ms




# 如果你有多个容器之间需要互相连接,推荐使用Docker Compose。

Host 模式

# 如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个 Network Namespace




示例:

$ docker run -tid --net=host --name docker_host1 ubuntu-base:v3

Container 模式

# 这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享

# 示例,独立的 docker_bri1 网络:

$ docker run -tid --net=container:docker_bri1 \

       --name docker_con1 ubuntu-base:v3

None 模式

None 模式

# Docker 容器拥有自己的 Network Namespace,但是,并不为 Docker 容器进行任何网络配置(如有需要,自己手动配置)

链接:https://www.jianshu.com/p/ab701cebafa8

相关推荐

服务器数据恢复—Raid5数据灾难不用愁,Raid5数据恢复原理了解下

Raid5数据恢复算法原理:分布式奇偶校验的独立磁盘结构(被称之为raid5)的数据恢复有一个“奇偶校验”的概念。可以简单的理解为二进制运算中的“异或运算”,通常使用的标识是xor。运算规则:若二者值...

服务器数据恢复—多次异常断电导致服务器raid不可用的数据恢复

服务器数据恢复环境&故障:由于机房多次断电导致一台服务器中raid阵列信息丢失。该阵列中存放的是文档,上层安装的是Windowsserver操作系统,没有配置ups。因为服务器异常断电重启后,rai...

服务器数据恢复-V7000存储更换磁盘数据同步失败的数据恢复案例

服务器数据恢复环境:P740+AIX+Sybase+V7000存储,存储阵列柜上共12块SAS机械硬盘(其中一块为热备盘)。服务器故障:存储阵列柜中有磁盘出现故障,工作人员发现后更换磁盘,新更换的磁盘...

「服务器数据恢复」重装系统导致XFS文件系统分区丢失的数据恢复

服务器数据恢复环境:DellPowerVault系列磁盘柜;用RAID卡创建的一组RAID5;分配一个LUN。服务器故障:在Linux系统层面对LUN进行分区,划分sdc1和sdc2两个分区。将sd...

服务器数据恢复-ESXi虚拟机被误删的数据恢复案例

服务器数据恢复环境:一台服务器安装的ESXi虚拟化系统,该虚拟化系统连接了多个LUN,其中一个LUN上运行了数台虚拟机,虚拟机安装WindowsServer操作系统。服务器故障&分析:管理员因误操作...

「服务器数据恢复」Raid5阵列两块硬盘亮黄灯掉线的数据恢复案例

服务器数据恢复环境:HPStorageWorks某型号存储;虚拟化平台为vmwareexsi;10块磁盘组成raid5(有1块热备盘)。服务器故障:raid5阵列中两块硬盘指示灯变黄掉线,无法读取...

服务器数据恢复—基于oracle数据库的SAP数据恢复案例

服务器存储数据恢复环境:某品牌服务器存储中有一组由6块SAS硬盘组建的RAID5阵列,其中有1块硬盘作为热备盘使用。上层划分若干lun,存放Oracle数据库数据。服务器存储故障&分析:该RAID5阵...

「服务器虚拟化数据恢复」Xen Server环境下数据库数据恢复案例

服务器虚拟化数据恢复环境:Dell某型号服务器;数块STAT硬盘通过raid卡组建的RAID10;XenServer服务器虚拟化系统;故障虚拟机操作系统:WindowsServer,部署Web服务...

服务器数据恢复—RAID故障导致oracle无法启动的数据恢复案例

服务器数据恢复环境:某品牌服务器中有一组由4块SAS磁盘做的RAID5磁盘阵列。该服务器操作系统为windowsserver,运行了一个单节点Oracle,数据存储为文件系统,无归档。该oracle...

服务器数据恢复—服务器磁盘阵列常见故障表现&amp;解决方案

RAID(磁盘阵列)是一种将多块物理硬盘整合成一个虚拟存储的技术,raid模块相当于一个存储管理的中间层,上层接收并执行操作系统及文件系统的数据读写指令,下层管理数据在各个物理硬盘上的存储及读写。相对...

「服务器数据恢复」IBM某型号服务器RAID5磁盘阵列数据恢复案例

服务器数据恢复环境:IBM某型号服务器;5块SAS硬盘组成RAID5磁盘阵列;存储划分为1个LUN和3个分区:第一个分区存放windowsserver系统,第二个分区存放SQLServer数据库,...

服务器数据恢复—Zfs文件系统下误删除文件如何恢复数据?

服务器故障:一台zfs文件系统服务器,管理员误操作删除服务器上的数据。服务器数据恢复过程:1、将故障服务器所有磁盘编号后取出,硬件工程师检测所有硬盘后没有发现有磁盘存在硬件故障。以只读方式将全部磁盘做...

服务器数据恢复—Linux+raid5服务器数据恢复案例

服务器数据恢复环境:某品牌linux操作系统服务器,服务器中有4块SAS接口硬盘组建一组raid5阵列。服务器中存放的数据有数据库、办公文档、代码文件等。服务器故障&检测:服务器在运行过程中突然瘫痪,...

服务器数据恢复—Sql Server数据库数据恢复案例

服务器数据恢复环境:一台安装windowsserver操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。在windows服务器内装有SqlServer数据库。存储空间LU...

服务器数据恢复—阿里云ECS网站服务器数据恢复案例

云服务器数据恢复环境:阿里云ECS网站服务器,linux操作系统+mysql数据库。云服务器故障:在执行数据库版本更新测试时,在生产库误执行了本来应该在测试库执行的sql脚本,导致生产库部分表被tru...

取消回复欢迎 发表评论: