Docker入门级教程

Docker和虚拟机

之前面试有被问到docker和虚拟机都是容器,他们有什么区别呢,当时也是摸棱两可,年代过于久远也不记得当时怎么回答的了。

先上一张虚拟机和docker的架构图:
在这里插入图片描述

对比项 虚拟机 docker
启动速度 秒级别 分钟级别
隔离级别 彻底隔离整个运行环境 通常用于隔离不同的应用
使用内核 Guest OS 是虚拟机安装的操作系统,是一个完整的系统内核 直接使用宿主机的系统内核
硬件资源 需要Hypervisor实现硬件资源的虚拟化 直接使用的都是实际物理机的硬件资源

安装docker

查看yum中的docker版本

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

[root@localhost /]# yum list docker  --showduplicates | sort -r
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
已加载插件:fastestmirror, product-id, search-disabled-repos, subscription-manager
已安装的软件包
可安装的软件包
 * updates: mirrors.aliyun.com
This system is not registered with an entitlement server. You can use subscription-manager to register.
Loading mirror speeds from cached hostfile
 * extras: mirrors.aliyun.com
 * epel: mirrors.ustc.edu.cn
docker.x86_64             2:1.13.1-203.git0be3e21.el7.centos             extras 
docker.x86_64             2:1.13.1-162.git64e9980.el7.centos             extras 
docker.x86_64             2:1.13.1-161.git64e9980.el7_8                  extras 
docker.x86_64             2:1.13.1-161.git64e9980.el7_8                  @extras
docker.x86_64             2:1.13.1-109.gitcccb291.el7.centos             extras 
docker.x86_64             2:1.13.1-108.git4ef4b30.el7.centos             extras 
docker.x86_64             2:1.13.1-103.git7f2769b.el7.centos             extras 
docker.x86_64             2:1.13.1-102.git7f2769b.el7.centos             extras 
 * base: mirrors.aliyun.com

安装

yum install docker

验证安装


[root@localhost /]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-161.git64e9980.el7_8.x86_64
 Go version:      go1.10.3
 Git commit:      64e9980/1.13.1
 Built:           Tue Apr 28 14:43:01 2020
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-161.git64e9980.el7_8.x86_64
 Go version:      go1.10.3
 Git commit:      64e9980/1.13.1
 Built:           Tue Apr 28 14:43:01 2020
 OS/Arch:         linux/amd64
 Experimental:    false


开机启动

systemctl enable docker

镜像分层结构

一个docker镜像由多个可读的镜像层组成,然后运行的容器会在这个docker的镜像上面多加一层可写的容器层,任何的对文件的更改都只存在此容器层。因此任何对容器的操作均不会影响到镜像。原理图如下:
在这里插入图片描述
实现原理:

如果需要获取某个文件,容器会从上到下的一层一层的寻找文件,如果当前层不存在,则去下一层寻找,直到找到为止,如果找不到则去远端仓库去寻找。

镜像和容器的关系

我们在平时安装windows系统的时候,都会使用到系统镜像,通过进入引导页我们可以根据提示一步一步的安装我们的系统,同理,这里我们这里可以把docker的镜像想象成我们安装window或Linux系统的那个镜像,docker中的容器呢就是我们买的实体的笔记本或者台式机。

要运行容器,必须现有镜像,他提供了我们需要的程序,文件。

配置阿里云镜像源

因为官方地址在国外,访问起来比较慢,需要配置下国内地址,这个和Java中的Maven,php中的Composer类似。

参考csdn博客地址:

扫描二维码关注公众号,回复: 13582587 查看本文章

https://blog.csdn.net/abc8125/article/details/106858862

镜像命令

搜素镜像

docker search 镜像名称:版本号

[root@localhost /]# docker search mysql
INDEX       NAME                                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/mysql                             MySQL is a widely used, open-source relati...   10600     [OK]       
docker.io   docker.io/mariadb                           MariaDB Server is a high performing open s...   3973      [OK]       
docker.io   docker.io/mysql/mysql-server                Optimized MySQL Server Docker images. Crea...   778                  [OK]
docker.io   docker.io/percona                           Percona Server is a fork of the MySQL rela...   528       [OK]       
docker.io   docker.io/centos/mysql-57-centos7           MySQL 5.7 SQL database server                   87                   
docker.io   docker.io/mysql/mysql-cluster               Experimental MySQL Cluster Docker images. ...   79                   
docker.io   docker.io/centurylink/mysql                 Image containing mysql. Optimized to be li...   59                   [OK]
docker.io   docker.io/bitnami/mysql                     Bitnami MySQL Docker Image                      49                   [OK]
docker.io   docker.io/deitch/mysql-backup               REPLACED! Please use http://hub.docker.com...   41                   [OK]
docker.io   docker.io/databack/mysql-backup             Back up mysql databases to... anywhere!         40                   
docker.io   docker.io/prom/mysqld-exporter                                                              37                   [OK]
docker.io   docker.io/tutum/mysql                       Base docker image to run a MySQL database ...   35                   
docker.io   docker.io/schickling/mysql-backup-s3        Backup MySQL to S3 (supports periodic back...   29                   [OK]
docker.io   docker.io/linuxserver/mysql                 A Mysql container, brought to you by Linux...   27                   
docker.io   docker.io/centos/mysql-56-centos7           MySQL 5.6 SQL database server                   20                   
docker.io   docker.io/circleci/mysql                    MySQL is a widely used, open-source relati...   20                   
docker.io   docker.io/mysql/mysql-router                MySQL Router provides transparent routing ...   18                   
docker.io   docker.io/arey/mysql-client                 Run a MySQL client from a docker container      17                   [OK]
docker.io   docker.io/fradelg/mysql-cron-backup         MySQL/MariaDB database backup using cron t...   12                   [OK]
docker.io   docker.io/yloeffler/mysql-backup            This image runs mysqldump to backup data u...   7                    [OK]
docker.io   docker.io/openshift/mysql-55-centos7        DEPRECATED: A Centos7 based MySQL v5.5 ima...   6                    
docker.io   docker.io/devilbox/mysql                    Retagged MySQL, MariaDB and PerconaDB offi...   3                    
docker.io   docker.io/ansibleplaybookbundle/mysql-apb   An APB which deploys RHSCL MySQL                2                    [OK]
docker.io   docker.io/jelastic/mysql                    An image of the MySQL database server main...   1                    
docker.io   docker.io/widdpim/mysql-client              Dockerized MySQL Client (5.7) including Cu...   1                    [OK]

#当然也可以加上版本号
docker search mysql:5.7

查看所有镜像

docker images #查看所有镜像

在这里插入图片描述

说明:

REPOSITORY:来源于哪个仓库

TAG:版本信息

IMAGE ID:镜像ID

下拉镜像

docker pull 镜像名称 

在这里插入图片描述
这里能看到镜像的加密校验,这个地址就是镜像的源下载地址

docker inspect # 查看镜像的详细信息

[
    {
    
    
        "Id": "sha256:c8562eaf9d81c779cbfc318d6e01b8e6f86907f1d41233268a2ed83b2f34e748",
        "RepoTags": [
            "docker.io/mysql:latest"
        ],
        "RepoDigests": [
            "docker.io/mysql@sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2021-01-18T23:25:55.311110441Z",
        "Container": "1b772a9e2045f2e123c3ff1d11cc67c9a5fe78b33af9f6a9213aa8cf91f58a6b",
        "ContainerConfig": {
    
    
            "Hostname": "1b772a9e2045",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
    
    
                "3306/tcp": {
    
    },
                "33060/tcp": {
    
    }
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOSU_VERSION=1.12",
                "MYSQL_MAJOR=8.0",
                "MYSQL_VERSION=8.0.23-1debian10"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"mysqld\"]"
            ],
            "Image": "sha256:ec58f145c941b51747ba729ab510ff01ca99fa797ec6f4bb8830f6e878e5c66e",
            "Volumes": {
    
    
                "/var/lib/mysql": {
    
    }
            },
            "WorkingDir": "",
            "Entrypoint": [
                "docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
    
    }
        },
        "DockerVersion": "19.03.12",
        "Author": "",
        "Config": {
    
    
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
    
    
                "3306/tcp": {
    
    },
                "33060/tcp": {
    
    }
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOSU_VERSION=1.12",
                "MYSQL_MAJOR=8.0",
                "MYSQL_VERSION=8.0.23-1debian10"
            ],
            "Cmd": [
                "mysqld"
            ],
            "Image": "sha256:ec58f145c941b51747ba729ab510ff01ca99fa797ec6f4bb8830f6e878e5c66e",
            "Volumes": {
    
    
                "/var/lib/mysql": {
    
    }
            },
            "WorkingDir": "",
            "Entrypoint": [
                "docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 546118644,
        "VirtualSize": 546118644,
        "GraphDriver": {
    
    
            "Name": "overlay2",
            "Data": {
    
    
                "LowerDir": "/var/lib/docker/overlay2/21e75f2653178360dbded589fd4c4b25767bf6e961a57cb139d4c8c5b013a4c4/diff:/var/lib/docker/overlay2/1b9437e9132a2f383ca74fa6d5909c9db83a8c2bb101c0acd5ae48e0e6c6019d/diff:/var/lib/docker/overlay2/b5b4e337a6a1c935eb50a04d1237c3e7c1fe812751e97aab35d3a30a6647adf9/diff:/var/lib/docker/overlay2/6ebf68814fe7f82cef2109a5f13086a2400be95e1a10252f11cf87d7eef49a85/diff:/var/lib/docker/overlay2/9930e0f82b9cff4ded81dd568a09f49910c2a76bf2b72773f2b56571e21ac32d/diff:/var/lib/docker/overlay2/4e7efadbbbeedae89db83a23eaafbb92a28edca708af20af37574b0a04c7e74a/diff:/var/lib/docker/overlay2/9f0f64f15b78fc6de71e01789fa09dc7a638c130bab0e92eb7df18aa1a47cc50/diff:/var/lib/docker/overlay2/3440fb790f6a92cdfef95a745e2d88377234a7b81d800f17759837a7227f6e33/diff:/var/lib/docker/overlay2/eb80053be47b77817e134af2d5e5cd4cdff52dc96556d7d21658fe4441945f7c/diff:/var/lib/docker/overlay2/672458b17f1cbbee646ac3a935eeffb266768b836f0ac7d383e3a2181a89d23d/diff:/var/lib/docker/overlay2/365d2d5c5be78a9bd464e25b74ae0a447db78596e4efcd42bec16adc26d95352/diff",
                "MergedDir": "/var/lib/docker/overlay2/5bb510e93d6165f3d858b3458e78189d3527654d1a2a3fab418bab8098ea52a0/merged",
                "UpperDir": "/var/lib/docker/overlay2/5bb510e93d6165f3d858b3458e78189d3527654d1a2a3fab418bab8098ea52a0/diff",
                "WorkDir": "/var/lib/docker/overlay2/5bb510e93d6165f3d858b3458e78189d3527654d1a2a3fab418bab8098ea52a0/work"
            }
        },
        "RootFS": {
    
    
            "Type": "layers",
            "Layers": [
                "sha256:cb42413394c4059335228c137fe884ff3ab8946a014014309676c25e3ac86864",
                "sha256:ef4a33cee7a02ffa3c1dd5d2618dcb95e37b899fb7e90d0bb2df32a37396e174",
                "sha256:74c86dffd46f095d4961730b731a33b19c1abd19f0a7ec1b81ddf09e6d3dfe85",
                "sha256:6d23902c2a54f36f80946d7225044b2681bac18570af3a58970e325b40ac0d60",
                "sha256:c484a3b6d84133f3618780f11216facc49f743cefc86e04409f28784a3a0a733",
                "sha256:0394a41efa739604258181808606eb47798a83383ff52241547583939ffb297c",
                "sha256:98d98806c8acefda16226c37045e3733a751c3cb165fde1182cbc324cde06f78",
                "sha256:d35a1217c926c4d5fc2e8a9f914e565d46a1da65f461e5cb9f09f7b34953bb97",
                "sha256:9577a2d5d759695f1b0e92efd95e7e46b1ac4c4c75350bac0045c94bd308732a",
                "sha256:d60ed0726e3751a08f8d1d1696f51bb3ac47276b2c4f271272f167f532b4285a",
                "sha256:ab82e085fd825c64ed10839fcae191d2169657b9585438676d1f54fb626162be",
                "sha256:c080af299e3f1cab9e0bbe183259aa64014e6c560fea1c0534ffe95b0180b2a3"
            ]
        }
    }
]

# 说明
Id:我们在镜像列表中看到的镜像id的完整版。

删除镜像

docker rmi imageId #删除镜像 rmove image 简称rmi

在这里插入图片描述

镜像历史

docker history imageID

##执行结果
[root@localhost ~]# docker history c8562eaf9d81
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
c8562eaf9d81        7 weeks ago         /bin/sh -c #(nop)  CMD ["mysqld"]               0 B                 
<missing>           7 weeks ago         /bin/sh -c #(nop)  EXPOSE 3306 33060            0 B                 
<missing>           7 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["docker-ent...   0 B                 
<missing>           7 weeks ago         /bin/sh -c ln -s usr/local/bin/docker-entr...   34 B                
<missing>           7 weeks ago         /bin/sh -c #(nop) COPY file:a209112a748b68...   13.1 kB             
<missing>           7 weeks ago         /bin/sh -c #(nop) COPY dir:2e040acc386ebd2...   1.12 kB             
<missing>           7 weeks ago         /bin/sh -c #(nop)  VOLUME [/var/lib/mysql]      0 B                 
<missing>           7 weeks ago         /bin/sh -c {
    
       echo mysql-community-server...   411 MB              
<missing>           7 weeks ago         /bin/sh -c echo 'deb http://repo.mysql.com...   55 B                
<missing>           7 weeks ago         /bin/sh -c #(nop)  ENV MYSQL_VERSION=8.0.2...   0 B                 
<missing>           8 weeks ago         /bin/sh -c #(nop)  ENV MYSQL_MAJOR=8.0          0 B                 
<missing>           8 weeks ago         /bin/sh -c set -ex;  key='A4A9406876FCBD3C...   2.61 kB             
<missing>           8 weeks ago         /bin/sh -c apt-get update && apt-get insta...   52.2 MB             
<missing>           8 weeks ago         /bin/sh -c mkdir /docker-entrypoint-initdb.d    0 B                 
<missing>           8 weeks ago         /bin/sh -c set -eux;  savedAptMark="$(apt-...   4.17 MB             
<missing>           8 weeks ago         /bin/sh -c #(nop)  ENV GOSU_VERSION=1.12        0 B                 
<missing>           8 weeks ago         /bin/sh -c apt-get update && apt-get insta...   9.34 MB             
<missing>           8 weeks ago         /bin/sh -c groupadd -r mysql && useradd -r...   329 kB              
<missing>           8 weeks ago         /bin/sh -c #(nop)  CMD ["bash"]                 0 B                 
<missing>           8 weeks ago         /bin/sh -c #(nop) ADD file:422aca8901ae3d8...   69.2 MB 

容器命令

容器列表

docker ps -a # 如果不加-a,能看到的当前正在运行的容器,-a查看所有的容器
docker ps -q # 只显示容器ID

在这里插入图片描述

运行容器


格式:
docker run [可选参数] image

常用参数:
--name="" #容器名称
-p        #指定容器的端口,三种用法: 
                       # -p ip:主机端口:容器端口
                       # -p 主机端口:容器端口
                       # -p 容器端口
-P         #随机指定端口
-d         #后台模式运行,这里有一个问题就是直接这样子运行,在使用docker ps 查看容器的时候时查不到刚刚运行的,因为docker发现你这个容器没有对外提供服务,所以会自动停止运行。
-it        #以交互模式运行


#运行容器并且执行一段shell脚本
docker run -d 容器名称 /bin/sh -c "shell脚本"

进入运行的容器

#两种方式
1.docker exec it 容器ID /bin/bash 
[root@localhost ~]# docker exec -it b2dd3493abaf /bin/bash
Error response from daemon: Container b2dd3493abaf29033299695ca3777c68846c1c6d0cf59833d73f6d9bb074a106 is not running
2.docker attach 容器ID 

两者的区别:exec时进入容器新打开新的终端,attach时进入当前正在运行的终端界面。

退出容器

exit #直接退出
ctrl +P +Q #退出,后台运行

删除容器

docker rm 容器ID  #如果容器正在运行,rm -f强制删除

常用命令

查看日志,进程

#日志
-tf  #显示日志
--tailf number #显示日志条数
docker logs [参数] 容器ID
#执行
# docker logs  -tf --tail 2 b2dd3493abaf
2021-03-10T10:25:40.490119000Z     2021-03-10T10:25:40.486Z [INFO]  agent: Endpoints down
2021-03-10T10:25:40.490752000Z     2021-03-10T10:25:40.486Z [INFO]  agent: Exit code: code=1
#进程
docker top 容器ID
[root@localhost ~]# docker top b2dd3493abaf
#容器没运行会报如下错误
Error response from daemon: Container b2dd3493abaf29033299695ca3777c68846c1c6d0cf59833d73f6d9bb074a106 is not running

容器和宿主机通信

拷贝文件

 docker cp 容器id:容器路径 宿主机目录

 #先运行一个,创建一个文件,发现root@后面的发生了变化,变成了容器ID。
 [root@localhost ~]# docker run -it centos /bin/bash
 
 #以下命令都是在容器中操作
 [root@5f911c5ddb49 /]# 
 [root@5f911c5ddb49 /]# pwd
 /
 [root@5f911c5ddb49 /]# mkdir test.php
 [root@5f911c5ddb49 /]# ls
 bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  test.php  tmp  usr  var
 
 #拷贝文件
 宿主机新开一个窗口,执行:
 [root@localhost /]# cd /
 [root@localhost /]# ll |grep test
 drwxr-xr-x    2 root root     6 3月  11 17:55 test.php

挂载目录

#使用 -v命令来挂载
docker run -it -v 主机目录:容器目录 容器名称

猜你喜欢

转载自blog.csdn.net/abc8125/article/details/115466780