docker

官网地址:https://www.docker.com/

文档地址:https://docs.docker.com/  

仓库地址:https://hub.docker.com/

Docker基本组成

Docker 中有非常重要的三个基本概念,理解了这三个概念,就理解了 Docker 的整个生命周期。

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

 

docker安装

uname -r :查看内核版本

查看系统版本

[root@shuju ~]# cat  /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

卸载旧版本

旧版本的 Docker 被称为 或 .如果已安装这些项,请将其以及关联的依赖项一起卸载。dockerdocker-engine

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安装方法

您可以根据需要以不同的方式安装 Docker 引擎:

  • 大多数用户设置 Docker 存储库并从中进行安装,以便于安装和升级任务。这是推荐的方法。

  • 某些用户下载 RPM 包并手动安装,并完全手动管理升级。这在诸如在无法访问互联网的气隙系统上安装Docker之类的情况下非常有用。

  • 在测试和开发环境中,一些用户选择使用自动化的便利脚本来安装 Docker。

使用存储库安装

在新的主机上首次安装 Docker 引擎之前,您需要设置 Docker 存储库。之后,您可以从存储库安装和更新 Docker。

设置存储库

安装软件包(提供实用程序)并设置稳定存储库(镜像仓库默认是国外的)。yum-utilsyum-config-manager

$ sudo yum install -y yum-utils

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo(国外的很慢)

 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里云docker镜像)

安装 Docker 引擎

1、安装最新版本的 Docker 引擎、容器化和 Docker Compose,或转到下一步以安装特定版本:

 yum makecache fast :更新yum软件包索引

$ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

docker-ce 社区版 ee企业版
docker-compose-plugin 管理多个docker容器的工具,其中管理包括:下载镜像、创建容器和删除容器。

2、若要安装特定版本的 Docker 引擎,请在存储库中列出可用版本,然后选择并安装:

一个。列出存储库中可用的版本并对其进行排序。此示例按版本号(从最高到最低)对结果进行排序,并截断:

$ yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64  3:18.09.1-3.el7                     docker-ce-stable
docker-ce.x86_64  3:18.09.0-3.el7                     docker-ce-stable
docker-ce.x86_64  18.06.1.ce-3.el7                    docker-ce-stable
docker-ce.x86_64  18.06.0.ce-3.el7                    docker-ce-stable

返回的列表取决于启用了哪些储存库,并且特定于您的 CentOS 版本(由本示例中的后缀指示)。.el7

b.按特定版本的完全限定包名称安装特定版本,该名称是包名 () 加上版本字符串(第 2 列),从第一个冒号 () 开始,直到第一个连字符,用连字符 () 分隔。例如。docker-ce:-docker-ce-18.09.1

$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-compose-plugin

此命令安装 Docker,但不会启动 Docker。它还会创建一个组,但是,默认情况下,它不会向该组添加任何用户。

启动docker

systemctl start docker

查看docker

[root@shuju ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.15
 API version:       1.41
 Go version:        go1.17.9
 Git commit:        fd82621
 Built:             Thu May  5 13:16:58 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.15
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.17.9
  Git commit:       4433bf6
  Built:            Thu May  5 13:15:18 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.4
  GitCommit:        212e8b6fa2f44b9c21b2798135fc6fb7c53efc16
 runc:
  Version:          1.1.1
  GitCommit:        v1.1.1-0-g52de29d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

运行测试

 

[root@shuju ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally     #在image没有找到hello-world:latest
latest: Pulling from library/hello-world    #去仓库里下载镜像
2db29710123e: Pull complete
Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
Status: Downloaded newer image for hello-world:latest

Hello from Docker!   #出项这个则表示docker安装成功

查看一下下载的hello-world 镜像

[root@shuju ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   7 months ago   13.3kB

 IMAGE ID  镜像id

TAG  版本

卸载docker

yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

阿里云镜像加速

https://cr.console.aliyun.com/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dikPDByc-1628378213410)(Docker学习笔记.assets/image-20210803135001995.png)]

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://axvfsf7e.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

docker启动流程

在这里插入图片描述

运行原理

在这里插入图片描述

基本命令
命令的帮助文档地址:https://docs.docker.com/engine/reference/commandline/docker/

帮助命令:

docker version          #查看docker的版本信息
docker info             #查看docker的系统信息,包括镜像和容器的数量
docker 命令 --help       #帮助命令(可查看可选的参数)
docker COMMAND --help

镜像命令:

docker images 查看本地主机的所有镜像

列表参数介绍:

# 解释:
1.REPOSITORY  镜像的仓库源
2.TAG  镜像的标签
3.IMAGE ID 镜像的id
4.CREATED 镜像的创建时间
5.SIZE 镜像的大小
# 可选参数
-a/--all 列出所有镜像
-q/--quiet 只显示镜像的id

 docker search 搜索镜像

#可选参数
Search the Docker Hub for images
Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output
            
#搜索收藏数大于3000的镜像
[root@shuju ~]# docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   12527     [OK]
mariadb   MariaDB Server is a high performing open sou…   4819      [OK]

docker pull 镜像名[:tag] 下载镜像 # :后为版本 不加:默认laster 最新版

[root@shuju ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
4be315f6562f: Pull complete    #分层下载 若下载过其他版本 可能有的已经下载就不用再下载了
96e2eb237a1b: Pull complete
8aa3ac85066b: Pull complete
ac7e524f6c89: Pull complete
f6a88631064f: Pull complete
15bb3ec3ff50: Pull complete
ae65dc337dcb: Pull complete
a4c4c43adf52: Pull complete
c6cab33e8f91: Pull complete
2e1c4f2c43f6: Pull complete
2e5ee322af48: Pull complete
Digest: sha256:e767595ba3408fbb2dda493be3594b9a148178df58325fafe8b0363662935624 #签名
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7  #真实地址

 

[root@shuju ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
4be315f6562f: Already exists
96e2eb237a1b: Already exists
8aa3ac85066b: Already exists
ac7e524f6c89: Already exists
f6a88631064f: Already exists
15bb3ec3ff50: Already exists
ae65dc337dcb: Already exists
573c3c7fa18d: Pull complete
9d10771b98b8: Pull complete
3d8ef442614b: Pull complete
7dc17a6cea26: Pull complete
752752efdaea: Pull complete
Digest: sha256:2dafe3f044f140ec6c07716d34f0b317b98f8e251435abd347951699f7aa3904
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

docker rmi 删除镜像

docker rmi -f  镜像id( docker images 的 IMAGE ID)

docker rmi -f 镜像id 镜像id 镜像id

docker rmi -f $(docker images -aq)  #删除全部镜像 -aq 查出所有的IMAGE ID

容器命令

有了镜像才可以创建容器

新建容器并启动

 docker run [可选参数] image 运行容器

docker run [可选参数] image

#参数说明
--name="名字"           指定容器名字 mysql1 mysql2 用与区分
-d                     后台方式运行
-it                    使用交互方式运行,进入容器查看内容
-p                     指定容器的端口
( -p ip:主机端口:容器端口  配置主机端口映射到容器端口
  -p 主机端口:容器端口
  -p 容器端口)
-P                     随机指定端口(大写的P)

测试 it 交互运行进入容器  主机名为镜像id 974ea1790952

[root@shuju ~]# docker run -it centos /bin/bash
[root@974ea1790952 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

exit 退出容器  停止并退出容器(后台方式运行则仅退出)
[root@974ea1790952 /]# exit 
exit

#Ctrl+P+Q 不停止容器退出

docker ps列出运行的容器

#docker ps

      # 列出当前正在运行的容器

-a  # 列出所有容器的运行记录和列出当前正在运行的容器

-n=? # 显示最近创建的n个容器

-q # 只显示容器的编号

 删除容器

docker rm 容器id                 #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
docker rm -f $(docker ps -aq)   #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器

启动和重启容器命令

docker start 容器id #启动容器

docker restart 容器id #重启容器

docker stop 容器id #停止当前运行的容器

docker kill 容器id #强制停止当前容器

docker ps -查询存在的容器

 

后台启动容器  容器后台运行必须要有一个前台进程

docker 发现没有应用 就会自动停止

docker run -d nginx或者centos等 没有前台程序会直接退出

查看日志

docker logs 

常用:

docker logs -tf 容器id  (全部日志)(-t :显示日志时间 -f :动态显示日志)

docker logs --tail number 容器id #num为要显示的日志条数 只显示十条的内容 加上-tf 显示时间和内容(先显示设的条数)之后动态显示日志

[root@shuju ~]# docker run -d centos /bin/sh -c "while true;do echo hi;sleep 1;done"
40d8008a2f197f8b31b0cff69eb6eb136627fcd61f74e9f92b9e89c2cebf9d69
[root@shuju ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
40d8008a2f19   centos    "/bin/sh -c 'while t…"   4 seconds ago   Up 4 seconds             tender_montalcini

显示日志

docker logs -tf -tail 10 40d8008a2f19

查看容器中的进程信息

 docker top 40d8008a2f19(容器id)

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                81879               81858               0                   04:05               ?                   00:00:00            /bin/sh -c while true;do echo hi;sleep 1;done
root                85437               81879               0                   04:13               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1

查看容器元数据

docker inspect 容器id

[
    {
        "Id": "40d8008a2f197f8b31b0cff69eb6eb136627fcd61f74e9f92b9e89c2cebf9d69",  
        "Created": "2022-05-09T20:05:38.00490326Z",
        "Path": "/bin/sh",   #控制台
        "Args": [        #传递的参数
            "-c",
            "while true;do echo hi;sleep 1;done"
        ],
        "State": {             #状态
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 81879,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-05-09T20:05:38.853427147Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",  #镜像来源
        "ResolvConfPath": "/var/lib/docker/containers/40d8008a2f197f8b31b0cff69eb6eb136627fcd61f74e9f92b9e89c2cebf9d69/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/40d8008a2f197f8b31b0cff69eb6eb136627fcd61f74e9f92b9e89c2cebf9d69/hostname",
        "HostsPath": "/var/lib/docker/containers/40d8008a2f197f8b31b0cff69eb6eb136627fcd61f74e9f92b9e89c2cebf9d69/hosts",
        "LogPath": "/var/lib/docker/containers/40d8008a2f197f8b31b0cff69eb6eb136627fcd61f74e9f92b9e89c2cebf9d69/40d8008a2f197f8b31b0cff69eb6eb136627fcd61f74e9f92b9e89c2cebf9d69-json.log",
        "Name": "/tender_montalcini",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/d9a9b8fa87db953e7c4c116b201c10feaf6d8fd38a25ed6ee68545278281cbaf-init/diff:/var/lib/docker/overlay2/c7b2f533f01c967e329036d492707cc48a71b788869d61c5098bce0b3f355d7f/diff",
                "MergedDir": "/var/lib/docker/overlay2/d9a9b8fa87db953e7c4c116b201c10feaf6d8fd38a25ed6ee68545278281cbaf/merged",
                "UpperDir": "/var/lib/docker/overlay2/d9a9b8fa87db953e7c4c116b201c10feaf6d8fd38a25ed6ee68545278281cbaf/diff",
                "WorkDir": "/var/lib/docker/overlay2/d9a9b8fa87db953e7c4c116b201c10feaf6d8fd38a25ed6ee68545278281cbaf/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "40d8008a2f19",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [       #运行内容
                "/bin/sh",
                "-c",
                "while true;do echo hi;sleep 1;done"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20210915",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "NetworkSettings": {       #网络相关设置
            "Bridge": "",
            "SandboxID": "519dd207ba998b9099c5cf33d7ce9a2dff1742441a9bcb9f6284cfe8ef0fbdc7",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/519dd207ba99",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "b38c9e8efc8a1572e1b0859f5dff520f46a13f8ebc59a984f469430ef267c7d5",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "d3b2966f1caa628888dbcbb026af64f1efc9961ba26c9ac629c97fd885409581",
                    "EndpointID": "b38c9e8efc8a1572e1b0859f5dff520f46a13f8ebc59a984f469430ef267c7d5",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

进入当前正在运行的容器

1、docker exec -it 容器id  bashshell

[root@shuju ~]# docker exec -it 40d8008a2f19 /bin/bash
[root@40d8008a2f19 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

2、docker attach 容器id

[root@shuju ~]# docker attach 40d8008a2f19     #进入正在运行的终端
hi
hi
hi
hi
hi
hi

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

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

拷贝容器文件到主机

docker cp 容器id:容器内路径 目的主机路径

[root@shuju ~]# docker attach c877896a9023
[root@c877896a9023 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@c877896a9023 /]# cd /home
[root@c877896a9023 home]# ls
[root@c877896a9023 home]# touch feng1
[root@c877896a9023 home]# exit
exit
[root@shuju ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@shuju ~]# docker cp c877896a9023:/home/feng1 /root
[root@shuju ~]# ls
anaconda-ks.cfg  feng1  feng100
[root@shuju ~]#

posted @   忆笙歌  阅读(124)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示