docker_note_3_Docker容器的创建、启动、和停止 、导入、导出、删除容器,docker仓库

9.Docker容器的创建、启动、和停止

  1. 容器是独立运行的一个或一组应用,及他们的运行环境。容器是Docker中的一个重要的概念。

  2. docker容器的启动有两种方式

    • 基于镜像新建容器并启动
      例如我们可以启动一个容器,打印出当前的日历表
      docker run centos cal
      在这里插入图片描述

    • 我们还可以通过指定参数,启动一个bash交互终端。

      docker run -t -i centos /bin/bash
      

      参数-t让Docker分配一个伪终端并绑定在容器的标准输入上,-i让容器的标准输入保持打开。

    • 使用docker run命令来启动容器,docker在后台运行的标准操作包括

      1.检查本地是否存在指定的镜像,不存在则从公有仓库下载
      2.使用镜像创建并启动容器
      3.分配一个文件系统,并在只读的镜像层外面挂载一层可读可写层
      4.从宿主主机配置的网桥接口中桥接一个虚拟接口道容器中去
      5.从地址池分配一个ip地址给容器
      6.执行用户指定的应用程序
      7.执行完毕之后容器被终止
      
    • 将在终止状态的容器从新启动
      可以使用docker start命令,直接将一个已经终止的容器启动运行起来。
      docker start mysql

  3. 守护态运行
    很多时候,我们希望容易在后台以守护态运行,此时可以添加-d参数来实现(d是daemon的首字母)
    例如我们启动centos后台容器,每隔一秒打印当天的日历。

    docker run -d centos /bin/sh -c "while true;do echo hello docker;sleep 1;done"
    

    启动之后,我们使用docker ps查看容器的信息

    sudo docker ps
    

    要查看启动的centos容器中的输出,可以使用

    docker logs frosty_brahmagupta
    
  4. 终止容器
    使用docker stop来终止一个运行中的容器。
    并且可以使用docker ps -a来看终止状态的容器。

    docker ps -a
    

    终止状态的容器,可以使用docker start来重新启动。

    docker start 
    

    使用docker restart 命令来重启一个容器。

    docker restart 
    

10.进入后台运行的容器

  1. 在启动容器的时候,有时候我们加了参数-d,这时容器自动进入后台运行。这个时候我们要进入容器,怎么办?通常
    使用docker attach命令和nsenter工具
  2. docker attach是Docker自带的命令。
    docker run -idt /bin/bash
    docker ps
    docker attach infallible_brown
    
    在这里插入图片描述
    该命令有时候并不方便,因为他是同步的,若有多个用户attach到一个容器,一个窗口命令阻塞,其他窗口都无法执 行。
  3. nsenter命令:在util-linux包2.23版本后都有包含。nsenter可以访问另一个进程的名字空间。
    安装:
    wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz;
    tar -zxvf util-linux-2.24.tar.gz
    cd util-linux-2.24
    ./configure --without-ncurses && make nsenter
    cp nsenter /usr/local/bin
    
    为了链接到容器,需要知道容器的PID,可以使用nsenter获取,如下:
    PID=$(docker-pid 5d1ba7f7affc)
    docker-pid需要自己安装,否则找不到命令
    wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
    echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc
    
    获取了PID之后,就可以通过下面的命令进入容器了
    nsenter --target 30027 --mount --uts --ipc --net --pid
    

11.导入、导出、删除容器

  1. 导出某个容器,非常简单,使用docker export命令
    	docker export 5d1ba7f7affc > centos.tar
    
    导出后在本地可以看到有一个centos.tar的容器快照。
  2. 有了容器快照之后,我们可以在想要的时候随时导入。导入快照使用docker import命令。
    例如我们可以使用cat centos.tar | docker import - test/centos:7导入容器快照作为镜像
    处理本地的容器快照导入为镜像,我们还可以通过指定一个URL或者目录来导入。
    例如在某个网络上有个快照image_test.tgz
    docker import http://xxxx.com/image_test.tgz test/image_test
    
  3. docker中可以使用docker load来导入镜像,也可是使用docker import来导入一个容器快照到docker镜像。两者的区别是容器快照将丢弃所有的历史记录和元数据信息。而镜像保存完整的记录,因此要更大些。
  4. 删除容器。可以使docker rm 容器id删除一个终止状态的容器。
    docker rm  容器id
    

若要删除一个运行中的容器,需要加-f参数

12.Docker公有仓库Docker Hub

  1. 仓库是集中存放镜像的地方。容易混淆的是注册服务器,它是管理仓库的服务器,每个服务器上可以有多个仓库,每个仓库下可以有多个镜像。因此仓库可以被认为是一个具体的目录。例如dl.dockerpool.com/centos来说,dl.dockerpool.com是注册服务器地址,centos是仓库名字。
  2. Docker官方目前维护着一个公共仓库,我们要是用这个仓库,需要登录https://hub.docker.com网址。注册一个账号。
  3. 在命令行中输入docker login 输入用户名密码完成登录。成功后,本地用户目录的.docker目录中将保留用户的认证信息。
  4. 在命令行我们可以通过docker search来查找官方仓库中的镜像,并可以使用docker pull命令将其下载到本地。
    可以通过-s N指定查看多少星级以上的镜像,星级代表了该镜像的受欢迎程度
    docker  pull hjd48/redhat
    
  5. 要推送镜像到Docker Hub,需要先登录账号,然后使用docker push xxx来推送
    这个地方需要注意,镜像的名称必须要以自己Docker Hub上注册的用户名。要使用docker tag image_id new_tagname;
    我这个地方就是:docker tag 6fc131c6ae56 reganzm/sinatra:latest
    修改好了之后就可以使用docker push reganzm/sinatra将镜像推送到Docker Hub上面去了。
    推送成功后,可以登录到自己的Docker Hub上面查看,如下:

13.创建Docker私有仓库

  1. 有时候,在公司内部为了提高分享的速度,需要在公司内部自己搭建一个本地的仓库,供私人使用。
  2. docker官方提供了一个工具docker-registry,我们可以借助这个工具构建私有镜像仓库
    • a.首先,使用docker search命令查找registry
    • b. docker pull registry
    • c.运行registry:docker run -d -p 5000:5000 -v /root/docker/registry:/tmp/registry registry
      默认情况下,仓库会创建在容器中的/tmp/registry目录下,通过-v 指定将镜像文件存放在本地的目录中。
    • d.搭建好了私有仓库之后,就可以上传、下载、搜索镜像了。
      查看本机ip:
      查看本地已有的镜像:
      将rarlinux标记为 192.168.0.5:5000/rarlinux;使用命令:
    docker tag 14a1b1556e64 192.168.0.5:5000/rarlinux
    
    使用docker push上传标记的镜像
    docker push 192.168.0.5:5000/rarlinux
    
    报错,解决方法是在/etc/docker目录下新建daemon.json,文件中写入:
    { "insecure-registries":["192.168.0.5:5000"] }
    
    然后重启docker : systemctl restart docker
    重新运行docker run -d -p 5000:5000 -v /root/docker/registry:/tmp/registry registry,启动registry服务,再次运行docker push 192.168.0.5:5000/rarlinux上传镜像到私有仓库。
    接下来,我们可以到另一台机器192.168.0.8下载这个镜像了:
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值