Docker 安装和常用指令

名词概念

  • 镜像:Docker 的镜像,就好比我们 Java 中的类一样,通过类我们可以创建多个对象。也可以想,重装系统的时候,我们往往需要一个 Windows 镜像或 Linux 系统镜像,这时候镜像像一个文件系统,利用这些即可在我们电脑上安装一个系统。
  • 容器
    • 镜像和容器的关系,就像类和实例对象一样,镜像是静态的,容器是通过镜像运行时的实体,并且容器可以创建、启动、停止、删除、暂停等。
  • 仓库
    • 可以看出代码控制中心,比如 GitHub,Maven 等,简单的理解为存放镜像的地方

Docker 安装

Centos 安装

版本:

  • CentOS 7 或更高

步骤:

卸载旧版本:

如果你之前用过,可能需要卸载旧的版本的相关依赖,旧的 Docker 版本称为 docker 或 docker-engine。

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

安装:

首次安装的,在安装 Docker 前,需要设置 Docker 仓库。之后,您需要设置仓库,后面就可以通过仓库安装和更新 Docker

设置仓库:

首先需要安装所需的软件包,yum-config-manager 需要 yum-utils,device mapper 存储驱动需要 device-mapper-persisten-data 和 lvm2

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

设置仓库地址,我这里选择了阿里云的地址快一些

$ sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装 Docker 的社区版

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

如果提示您接受 GPG 密钥,请选是。

我们安装完后,Docker 是默认没有被启动的,并且还创建了 Docker 用户组,但是该组下面没有用户。

其他:

如果您需要安装指定的 Docker 社区版,可以列出可用版本,在选择安装。

$ yum list docker-ce --showduplicates | sort -r
[root@localhost ~]# yum list docker-ce --showduplicates | sort -r
已加载插件:fastestmirror
已安装的软件包
可安装的软件包
 * updates: mirrors.aliyun.com
Loading mirror speeds from cached hostfile
 * extras: mirrors.aliyun.com
docker-ce.x86_64            3:19.03.9-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.8-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.7-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.6-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.5-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.4-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.3-3.el7                    docker-ce-stable 

然后通过其完整的软件包名称,安装特定版本,该软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-19.03.9。

$ sudo yum install docker-ce-19.03.9 docker-ce-cli-19.03.9 containerd.io

配置阿里云镜像加速:

阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址和操作文档了。

启动 Docker :

$ sudo systemctl start docker

可以查看 Docker 版本看是否安装成功

[root@localhost ~]# docker version
[root@localhost ~]# docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:03:45 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:02:21 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.7
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

测试 Hello World

$ docker run hello-world	

Hello from Docker!
This message shows that your installation appears to be working correctly.

卸载 Docker :

# 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 删除资源
rm -rf /var/lib/docker
# /var/lib/docker 是docker的默认工作路径!

常用命令

帮助命令

帮助文档

显示版本信息

docker version

显示 docker 的系统信息、镜像、容器数量

docker info

帮助命令

docker run --help

镜像命令

如果本地中,没有要运行的镜像,那么 docker 就会自动从 docker 镜像仓库中下载

命令描述
docker images查看所有本地主机上的镜像
docker search搜索镜像
docker pull下拉镜像
docker rmi删除镜像

列出镜像列表

docker images

命令格式:

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

Options:
  -a, --all             Show all images (default hides intermediate images) #列出所有镜像
  -q, --quiet           Only show numeric IDs # 只显示镜像的id

例子:

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        9 months ago        13.3kB
  • **REPOSITORY:**表示镜像的仓库源
  • **TAG:**镜像的标签,一个仓库源有多个 TAG,因为代表这个仓库源的不同版本(latest 是最新的版本)
  • **IMAGE ID:**镜像ID
  • **CREATED:**镜像创建时间
  • **SIZE:**镜像大小

搜索镜像

使用 docker search 命令搜索镜像,比如搜索 MySQL

[root@localhost ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10075               [OK]                
mariadb                           MariaDB is a community-developed fork of MyS…   3694                [OK]                
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   736                                     [OK]

  • NAME: 镜像仓库源的名称

  • DESCRIPTION: 镜像的描述

  • OFFICIAL: 是否 docker 官方发布

  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

  • AUTOMATED: 自动构建。

下载镜像

使用 docker pull 镜像 命令下载,例如下载 centos 镜像

[root@localhost ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
3c72a8ed6814: Pull complete 
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

删除镜像

Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]

比如删除 hello-world 镜像

docker rmi hello-world # 删除 hello-world 镜像
docker rmi -f 镜像id 镜像id 镜像id...# 删除多个镜像
docker rmi -f $(docker images -aq) # 显示所有镜像,然后当成参数传入并且删除

Options:
  -f, --force      强制删除镜像

创建镜像

  1. 可以从已经创建的容器中更新镜像,并且提交这个镜像
  2. 使用 Dockerfile 指令来创建一个新的镜像

容器命令

命令描述
docker run -itd centos /bin/bash创建容器并且启动,并以命令行模式进入容器,后台模式启动
docker ps列出所有运行中的容器
docker stop 容器id停止当前正在运行的容器
docker restart 容器id重启容器
docker rm 容器id删除容器
docker attach 容器ID进入容器
docker exec 容器ID进入容器
docker top 容器id查看容器中进程信息
docker logs 容器id查看日志

启动容器

使用 docker run 命令创建容器并且启动

docker run [options] image [command][ang...]

以 centos 镜像为例,参数以命令行的模式进入容器

[root@localhost ~]# docker run -it --name centos01 centos /bin/bash
[root@c6de240f0c94 /]# 

参数说明:

  • -i:交互式操作
  • -t:终端
  • --name:指定容器名
  • centos:centos 镜像
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

退出当前容器到宿主机器,使用 exit 命令

[root@c6de240f0c94 /]# exit
exit
[root@localhost ~]# 

列出所有运行中的容器

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
c6de240f0c94        centos              "/bin/bash"         4 minutes ago       Exited (0) About a minute ago                       elated_cray
e267483ae3fc        hello-world         "/hello"            2 days ago          Exited (0) 2 days ago                               amazing_allen
96558d441131        hello-world         "/hello"            2 days ago          Exited (0) 2 days ago                               reverent_ganguly

参数说明:

  • -a:all ,显示所有容器

  • -n:last int,显示最后创建的n个容器(包括所有状态)(默认为-1)

  • -q:quiet,只显示 id

启动已经停止的容器

可以先通过docker start 查看停止的容器 id,在通过该 id 启动

[root@localhost ~]# docker start c6de240f0c94
c6de240f0c94

后台运行一个容器

我们大部分时候还是喜欢容器后台运行的,可以通过 -d 指定容器的运行模式

[root@localhost ~]# docker run -itd --name centos-test centos /bin/bash
632b8174cb58e8d957171192e4c461752e7dd9e27ff657608b4ddb760363bbe9
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                  PORTS               NAMES
632b8174cb58        centos              "/bin/bash"         9 seconds ago       Up 8 seconds                                centos-test
c6de240f0c94        centos              "/bin/bash"         20 minutes ago      Up 4 minutes                                elated_cray
e267483ae3fc        hello-world         "/hello"            2 days ago          Exited (0) 2 days ago                       amazing_allen
96558d441131        hello-world         "/hello"            2 days ago          Exited (0) 2 days ago                       reverent_ganguly

**注:**加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec

停止一个容器

命令如下:

# docker stop 容器ID
$ docker stop 632b8174cb58
632b8174cb58

重启容器

停止的容器,可以通过 docker restart 容器ID 重启,命令如下:

$ docker restart 632b8174cb58

进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach 容器ID
    • $ docker attach 632b8174cb58
    • 使用该命令,如果从容器退出,则会直接导致容器停止
    • 进入当前容器后开启一个新的终端,可以在里面操作。
  • docker exec 容器ID
    • docker exec -it 632b8174cb58 /bin/bash
    • 使用该命令,如果从容器退出,则会直接导致容器停止
    • 进入容器正在执行的终端

注:ctrl +P +Q 也可以容器不停止退出

删除容器

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

查看日志

使用命令 docker logs 查看日志

docker logs -t --tail n 容器id #查看n行日志
docker logs -ft 容器id #跟着日志

查看容器中进程信息

使用命令 docker top 容器id

[root@localhost ~]# docker top 632b8174cb58
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                7657                7640                0                   21:52               pts/0               00:00:00            /bin/bash

查看镜像的元数据

使用命令 ``docker inspect 容器id`

[root@localhost ~]# docker inspect 632b8174cb58
[
    {
        "Id": "632b8174cb58e8d957171192e4c461752e7dd9e27ff657608b4ddb760363bbe9",
        "Created": "2020-10-20T15:06:52.579572805Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 7657,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-10-21T13:52:57.417445702Z",
            "FinishedAt": "2020-10-21T13:50:12.958002365Z"
        },
        "Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
        "ResolvConfPath": "/var/lib/docker/containers/632b8174cb58e8d957171192e4c461752e7dd9e27ff657608b4ddb760363bbe9/resolv.conf",
..................................
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值