Docker基础指令、文件系统、公/私有仓库、容器数据卷

一、Docker简介

  • Docker三要素:

    • 镜像:类似于面向对象中,类

    • 容器:类似于面向对象中,类的实例对象,容器包含Linux最小核心运行需要的最小内核文件

    • 仓库:类似于github,存放管理docker镜像的地方

  • CentOS上安装Docker

  • # 卸载旧版docker
     
     # 安装仓库管理yum-utils
     $ sudo yum install -y yum-utils
     ​
     # 添加docker仓库(添加国内阿里云仓库)
     $ yum-config-manager \
         --add-repo \
     http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
     ​
     # 更新yum软件包索引
     $ yum makecache timer
     ​
     #安装docker
     $ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin 
     ​
     # 启动docker服务(守护进程形式)
     $ sudo systemctl start docker
     ​
     # 运行hello world
     $ sudo docker run hello-world

二、Docker基本操作指令

1、启动指令

  • systemctl

 $ systemctl start/stop/restart/status/enable docker # 启动/停止/重启/查看状态/开机启动

2、对镜像的操作

  • docker images

 $ docker images # 查看当前所有镜像
 $ docker images -a # 查看本地所以普镜像(包含历史镜像)
 $ docker images -q  # 查看镜像的id
 $ docker images -qa # 查看所有id
  • docker search

 $ docker search 镜像
 $ docker search --limit 5 镜像    # 列出5条包含镜像名的镜像
  • docker pulldo

 $ docker pull 镜像[:TAG]  # 无版本号,默认最新;指定tag,下载指定版本
 $ docker pull 镜像:latest == docker 镜像
  • docker system df

 $ docker system df  #查看docker所有镜像的占用空间
  • docker rmi

 $ docker rmi 镜像1:TAG 镜像2:TAG ...    # 删除没有加载到容器的镜像
 $ docker rmi -f # 强制删除镜像(即使被使用)
 $ docker rmi -f $(docker images -qa)    # 删除所有镜像
  • 虚悬镜像:仓库名和id都是 <none>的镜像,但是却占用了空间

3、对容器的命令

  • docker run

    • 前台守护进程 -d: 适用于redis等数据库

    • 后台交互式-it:适用于web服务进程(若对web服务进程用-d启动,会由于没有前台任务,而自杀)

 $ docker run -d 镜像  # 启动容器,运行镜像(后台守护进程形式,如果改用-it,当按键ctrl+p+q会退出redis,所以需要守护进程形式)
 $ docker run -it 镜像 # 启动交互式容器,返回一个终端(前台命令行,如果改用-d,当docker前台没有进程的话,会立刻自杀)
 # 在终端中,exit 停止运行容器
 # 如果按ctrl+p+q 退出这个终端,但容器不停止运行
  • docker ps

 $ docker ps # 显示所有正在运行的容器
 $ docker ps -a  # 显示历史容器信息(类似于 history)
 $ docker ps -l  # 显示最近一个容器
 $ docker ps -n 5    # 显示最近5个容器
 $ docker ps -q[a,n,l]   # 显示容器id
 $ docker ps -q -a
  • 对容器id的操作

 $ docker start 容器id
 $ docker restart 容器id
 $ docker stop 容器id
 $ docker kill   容器id    # 强制停止
 $ docker logs 容器id  # 查看容器的执行日志
 $ docker top 容器id       # 查看容器的进程信息
 $ docker inspect 容器id   # 查看容器的详细信息
 # 退出容器后,重新进入容器
 docker attach 容器id  # 进入容器,用exit退出会停止容器的运行
 docker exec --it 容器id bash # 进入容器,用exit退出不会停止容器运行
  • docker rm

 $ docker rm 容器id    # 删除已停止的容器
 $ docker rm -f 容器id # 强制删除容器
 $ docker rm -f $(docker ps -q -a)   # 删除所有容器
 $ docker rm -f
  • 在容器和本地主机之间拷贝资料

 $ docker cp 容器id:源文件地址 目的地址 # 从容器拷贝到本地主机
 $ docker cp 源文件 容器id:目的地址   # 从

4、Docker文件系统

  • Docker文件系统时联合分层文件系统,镜像层包含多层,比如bootfs,rootfs,和应用层;

  • Docker镜像实例化为容器,运行容器时,先启动bootfs(Docker的Linux系统使用宿主主机的bootfs,仅加载runtime环境,所以特别小),引导系统,加载rootfs,然后是各层的应用,Docker的容器实例会在所有镜像层的最外面加一层实例层,镜像层全部是只读的,容器层可修改

5、镜像制作、pull、push

 $ docker commit -m="描述" -a="作者" 要打包的容器ID 镜像名(取名):TAG
 # 运行就用镜像id
 $ docker run -it 镜像id bash

6、Docker公有仓库、私有仓库

  • 公有仓库参考阿里云镜像仓库

    • 可以配置阿里云镜像仓库加速器,加速下载

 $ sudo mkdir -p /etc/docker
 $ sudo tee /etc/docker/daemon.json <<-'EOF'
 {
   "registry-mirrors": ["https://88fynflq.mirror.aliyuncs.com"]
 }
 EOF
 $ sudo systemctl daemon-reload
 $ sudo systemctl restart docker
  • 私有仓库

    • 下载镜像Dcoker Registry,运行一个私有仓库容器

     $ docker pull registry  # 拉去管理私有仓库的工具
     $ docker run -d -p 5000:5000 -v /xhbb/myregistry/:/tmp/registry --privileged=true registry  # 运行私有仓库,把端口映射到dcoker私有仓库端口上
    • 创建新镜像

     $ docker run -it ubuntu bash    # 运行一个容器实例
     (在ubuntu中安装ifconfig: apt-get update; apt-get install net-tools;)    # 对容器添加新的功能
     $ docker commit -m="描述" -a="作者信息" 容器ID 镜像名:TAG  # 打包容器成为镜像
    • curl查询私服库上的镜像

     # 私有仓库默认是使用https保护安全的,所以需要在/etc/docker/daemon.json(参考阿里云镜像仓库加速)中设置,添加以下键值
     "insecure_registries": "[127.0.0.1:5000/xhbb]"
     # 随后可以重启docker确保更改生效,重启后同时要运行刚才建立的私服库容器
     $ systemctl restart docker
     $ docker start 私服库容器ID      # 可以根据docker ps -a查询
     # 查询私有仓库上的镜像
     $ curl -XGET http://私有仓库IP:端口/v2/_catalog
    • 为镜像设置标签TAG,把镜像设置成私有库所有,否则无法上传

     $ docker tag 镜像:TAG 私有仓库IP:端口/镜像名(自取):TAG
    • 把新镜像push到私服仓库

     $ docker push 私有仓库IP:端口/改名后的镜像:TAG
    • pull、delete删除私服库的镜像

     # pull到本地
     $ docker pull 私有仓库IP:端口/镜像
     ​
     # delete私服库的镜像,进入私服库容器的存储位置
     $ docker exec <容器名> rm -rf /var/lib/registry/docker/registry/v2/repositories/<镜像名>

7、Docker容器数据卷

  • 利用数据卷,宿主主机和容器,实现文件夹映射,在任意一个文件夹的操作会同步到另一个文件夹,实现数据的同步和持久化:

    (1)数据卷可以在数据之间共享和数据重用; (2)数据卷的更改可以实时生效; (3)数据卷中的更改不会包含在镜像的更新中; (4)数据卷的生命周期一直持续到没有容器使用它为止。

    • 数据卷挂载

     $ docker run -it --privileged=true -v 宿主主机文件夹:容器文件夹 容器id:[options] --name 别名 镜像 bashShell命令
     [options]:
         ro:代表容器内该文件夹只读,宿主主机内文件夹可写可读,也会同步到容器文件夹;
         rw:就是容器文件夹可写可读
     bashShell命令:
         bash、/bin/bash:打开一个bash终端
    • 数据卷继承和共享:从父容器继承数据卷挂载,并且所有的挂载的文件夹(比如现在是3个:宿主、父容器、子容器)中对文件的操作全是同步的

     $ docker run -it --privileged=true -volumes-from 父容器 宿主主机文件夹:容器文件夹 容器id:[options] --name 别名 镜像 bashShell命令
     [options]:
         ro:代表容器内该文件夹只读,宿主主机内文件夹可写可读,也会同步到容器文件夹;
         rw:就是容器文件夹可写可读
     bashShell命令:
         bash、/bin/bash:打开一个bash终端
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值