Docker指令集

Author Avatar
Akun 11月 14,2021

Docker指令集

本文以CentOS 8.0为例,进行安装实验

声明:本文大部分指令依据菜鸟教程-Docker教程为蓝本进行操作

CentOS Docker 安装

安装命令

root@onlyuu:~$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

卸载旧版本

root@onlyuu:~$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

安装 Docker Engine-Community

安装需要的软件包

root@onlyuu:~$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

设置较为稳定的仓库

  • 官方源地址

    root@onlyuu:~$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    
  • 阿里源

    root@onlyuu:~$ sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  • 清华源

    root@onlyuu:~$ sudo yum-config-manager \
    --add-repo \
    https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
    

安装 Docker Engine-Community

  • 下载 Docker Engine-Community

    root@onlyuu:~$ sudo yum install docker-ce docker-ce-cli containerd.io
    
  • 列出并排序存储库中可用的版本

    root@onlyuu:~$ 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
    
  • 通过其完整的软件包安装特定版本,其中,版本号()为第二排数字中第一个冒号(:)一直到第一个连字符(-)中间的数字

    root@onlyuu:~$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
    

启动Docker

root@onlyuu:~$ sudo systemctl start docker

验证Docker

运行hello-world镜像来验证是否正确安装了 Docker Engine-Community

root@onlyuu:~$ sudo docker run hello-world

卸载Docker

删除安装包

root@onlyuu:~$ yum remove docker-ce

卸载镜像、容器、配置文件等内容

root@onlyuu:~$ rm -rf /var/lib/docker

Docker 指令集

Hello World

  • 使用docker run命令来在容器内运行一个应用程序,并输出“Hello World”

    root@onlyuu:~$ docker run ubuntu:15.10 /bin/echo "Hello World"
    
    Hello World
    
  • 通过-i -t参数,使得运行的容器实现交互功能

    root@onlyuu:~$ docker run -i -t ubuntu:15.10 /bin/bash
    root@9d1d7d9e6f4b:/#
    
    • -t: 在一个新容器内指定一个伪终端或终端
    • -i: 允许你对容器内的标准输出(STDIN)进行交互
    • 在第二行中,我们已经进入了一个Ubuntu 15.0系统的容器
  • 我们可以在容器中尝试允许命令cat /proc/versionls来分别查看当前系统的版本信息和当前目录下的文件列表

    root@9d1d7d9e6f4b:/#  cat /proc/version
    Linux version 4.18.0-193.28.1.el8_2.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC)) #1 SMP Thu Oct 22 00:20:22 UTC 2020
    root@9d1d7d9e6f4b:/# ls
    bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@9d1d7d9e6f4b:/# 
    
  • 我们可以使用Exit命令或者使用Ctrl+D来退出容器

    root@9d1d7d9e6f4b:/#  exit
    exit
    root@runoob:~# 
    
  • 以后台模式启动容器(无交互),使用以下命令创建一个以进程方式运行的容器

    root@onlyuu:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
    <ContainerId:容器Id>
    
  • 查看后台是否有容器在运行

    root@onlyuu:~$ docker ps
    CONTAINER ID        IMAGE                  COMMAND              ...  
    9d1d7d9e6f4b        ubuntu:15.10           "/bin/sh -c 'while t…"    ...
    

    输出详情介绍:

    • CONTAINER ID:容器Id,可以通过前四位来迅速进行定位容器
    • IMAGE:使用的镜像
    • COMMAND:启动容器时运行的命令
    • CREATED:容器的创建时间
    • STATUS:容器状态,共有其中
      • created(已创建)
      • restarting(重启中)
      • running或up(运行中)
      • removing(迁移中)
      • paused(暂停)
      • exited(停止)
      • dead(死亡)
    • PORTS:容器的端口信息和使用的连接类型
    • NAMES:自动分配的容器名称
  • 查看容器内的标准输出(日志)

    root@onlyuu:~$ docker logs 9d1d
    <logs>
    
  • 停止容器

    • 查看docker在后台运行的容器

      root@onlyuu:~$ docker ps
      
      CONTAINER ID        IMAGE                  COMMAND              ...  
      9d1d7d9e6f4b        ubuntu                "/bin/bash"           ...
      
    • 停止容器

      root@onlyuu:~$ docker stop 9d1d
      
    • 再次查看后台运行的容器,发现之前停止的容器已经消失

      root@onlyuu:~$ docker ps
      
      CONTAINER ID        IMAGE                  COMMAND              ...
      

Docker 容器使用

获取镜像

如果我们没有本地镜像,那么可以使用Docker pull命令(从公共仓库中)载入ubuntu镜像

root@onlyuu:~$ docker pull ubuntu

查看容器

查询运行的容器

root@onlyuu:~$ docker ps

查询所有的容器

root@onlyuu:~$ docker ps -a

查询最后一次创建的容器

root@onlyuu:~$ docker ps -l 

启动镜像

使用以下命令从ubuntu镜像启动一个容器,并以命令行的格式进入该容器

root@onlyuu:~$ docker run -it ubuntu /bin/bash

参数说明:

  • -i: 交互式操作
  • -t: 终端
  • ubuntu: ubuntu镜像
  • /bin/bash: 放在镜像名称后的是命令

以后台模式启动镜像

  • 加了**-d**参数默认不会进入容器,只在后台运行容器

    root@onlyuu:~$ docker run -itd ubuntu /bin/bash
    

退出终端

  • Exit命令,容器停止运行,且退出该容器命令行
  • Ctrl+P、Ctrl+Q组合快捷键等价于Exit命令
  • Ctrl+D快捷键,不会终止容器运行,但会退出该容器的命令行

启动已经及停止的容器

查看所有的容器

root@onlyuu:~$ docker ps -a

启动一个停止的容器

根据上文中查到的Container Id来启动容器

root@onlyuu:~$ docker start <Container Id>

此处的Container Id依旧可以只取前四位,如果成功,将返回该容器完整的Container Id

停止或重启容器

  • 停止容器

    root@onlyuu:~$ docker stop <Container Id>
    
  • 重启容器

    root@onlyuu:~$ docker restart <Container Id>
    

    个人感觉restart用起来和start差不多的样子,我都直接用的start。——笔者

  • 此处的容器Id,同样可以使用Id前四位替代

进入容器

  • attach命令

    • 不推荐,退出该容器,该容器即刻停止
  • exec命令(与上相反)

    root@onlyuu:~$ docker exec -it <container Id> /bin/bash
    

导出和导入容器

  • 在导出容器到本地时,可以使用docker export命令,来导出容器快照

    root@onlyuu:~$ docker export <Container Id> > ubuntu.tar
    
  • 可以使用docker import将容器快照文件导入为镜像,以下实例将快照文件ubuntu.tar导入到镜像test/ubuntu:v1

    root@onlyuu:~$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1
    
  • 同样可以指定Url或者某个目录来导入容器

删除容器

  • 删除容器时,该容器不能处于运行状态

    root@onlyuu:~$ docker rm -f <Container Id>
    
  • 下面的命令可以清理掉所有处于终止状态的容器

    root@onlyuu:~$ docker container prune
    

运行Web应用

  • 使用docker载入一个web应用程序,并运行起来

    # 载入图像
    root@onlyuu:~$ docker pull training/webapp
    # 运行程序
    root@onlyuu:~$ docker run -d -P training/webapp python app.py
    
  • 参数说明

    • -d: 让容器在后台运行
    • -P: 将容器内部使用的网络端口随机映射到主机上
  • 使用docker ps -a查看容器时多出了ports(端口)信息,此时我们就可以通过主机端口来访问容器内部的web服务

  • 当然,我们也可以使用**-p**参数设置不同的端口,以下实例将本机端口5000映射到容器内部端口

    root@onlyuu:~$ docker run -d -p 5000:5000 training/webapp python app.py
    

查看Web应用程序日志

  • docker logs <Id或者名字>可以查看容器内部的标准输出

    root@onlyuu:~$ docker logs -f <Container Id or Name>
    
  • -f: 让docker logs像tail -f一样输出容器内部的标准输出

Docker 镜像使用

Docker 镜像连接

Docker 仓库管理