docker 常见操作(上)

太久没有更新文章了,学习或者整理了东西以后一直都存在本地,今天抽时间写了一点,常见操作的下半部分,改天上传

引子

为什么会有 docker

当前痛点

产品从开发到上线过程中需要经历多次部署,环境配置。尤其是每次不同版本之间的环境兼容性对团队来说都需要付出一定的时间经历解决,很容易出现在这台机器上能正常运行,但是部署上线以后运行出问题的情况。例如依赖没有解决,例如环境配置遗漏等。

docker 理念

"Build,Ship and Run Any App, Anywhere",可以理解为“一次封装,到处运行”

docker 与 虚拟机的区别

Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;

  • 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

  • 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源

docker 资料

docker官网

docker hub

docker 安装

要求

目前,CentOS 仅发行版本中的内核支持 Docker。

  • Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。

  • Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。

安装步骤

安装可以参考官网链接:官网 docker 安装教程

  1. 官网没有指明需要需要 gcc,但是建议事先安装 gcc,命令如下:

    yum -y install gcc
    yum -y install gcc-c++
    
  2. 安装依赖的包,命令如下:

    sudo yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2
    
  3. 设置仓库,其中官网的命令为:

    sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    

    但是由于镜像服务器的原因,可以直接改为国内阿里云镜像:

    sudo yum-config-manager \
        --add-repo \
        https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  4. 安装 yum 软件包索引(官网不包括这步)

    yum makecache fast
    
  5. 安装 docker-ce

    yum -y install docker-ce
    
  6. 启动 docker

    systemctl start docker
    
  7. 验证安装:

    sudo docker run hello-world
    
  8. 配置镜像加速:

    mkdir -p /etc/docker
    vim /etc/docker/daemon.json
    

    增加国内加速镜像,例如网易云{"registry-mirrors": ["http://hub-mirror.c.163.com"] } 或者阿里云

    重载重启:

    systemctl daemon-reload
    systemctl restart docker
    

docker 常用命令

基础命令

docker version
docker info
docker --help

镜像命令

查看

docker images
image-20200303154644888.png

其中:

  • REPOSITORY:表示镜像的仓库源

  • TAG:镜像的标签(默认的版本标签为 latest,拉镜像时可以指定 TAG)

  • IMAGE ID:镜像ID

  • CREATED:镜像创建时间

  • SIZE:镜像大小

命令的选项有:

  • -a:列出本地所有的镜像
  • -q:只显示镜像 ID
  • --digests:显示镜像的摘要信息
  • --no-trunc:显示完整的镜像信息

其中最常用的为 docker images -qa

搜索

docker search [镜像名]
image-20200303155332052.png

常见的命令选项有:

  • --no-trunc:显示完整的镜像描述
  • -s:列出星星数不小于指定值的镜像
  • --automated:列出所有自动构建的镜像

下载镜像

docker pull [镜像名]

pull 命令类似 git 拉取代码,用于下载镜像,镜像名后可以跟 TAG 用于指定版本 docker pull 镜像名:TAG,在 docker 中不加 TAG 默认为 latest

删除镜像文件

docker rmi 镜像名ID

可以跟镜像 ID 也可以跟镜像名。可以使用 -f 强制删除,如果需要删除所有镜像可以使用 docker rmi -f $(docker images -qa)

如果删除时提示冲突,可以先删掉记录docker ps -a -q | xargs docker rm 或者 docker rm -f $(docker ps -a -q)然后再删除即可

容器命令

下载镜像

docker pull centos

新建并运行容器

docker run [OPTIONS] image [COMMAND] [ARG]

常用的选项有:

  • --name:给容器指定名字,不指定的话会自动给定一个名字
  • -d:后台运行容器,返回容器 ID
  • -i 与 -t:-i 表示以交互式方式运行容器,-t 表示为容器分配一个伪终端,通常两者一起使用
  • -P:随机端口映射
  • -p:指定端口映射关系
  • --rm:对于foreground容器,由于其只是在开发调试过程中短期运行,其用户数据并无保留的必要,使用该选项,这样在容器退出时就能够自动清理容器内部的文件系统,但是不能和 -d 同时使用

运行方式:

  1. 交互式容器

    docker run -it centos /bin/bash
    

    表示:使用镜像 centos:latest 以交互模式启动一个容器,在容器内执行/bin/bash命令。

  2. 守护式容器

    docker run -d centos
    

    运行以后在进程中看不到对应的容器。因为 Docker 容器后台运行,就必须有一个前台进程。容器运行的命令如果不是那些一直挂起的命令,就会自动退出。

查看正在运行的容器

docker ps [OPTIONS]

常见的选项有

  • -a:列出当前所有正在运行的容器+历史上运行过的
  • -l:显示最近创建的容器
  • -n:显示最近n个创建的容器
  • -q:静默模式,只显示容器编号
  • --no-trunc:不截断输出

退出容器

  1. 停止退出

    在容器的交互式终端输入exit回车或者使用 "ctrl+D" 即可停止容器并退出

  2. 容器不停止退出

    即容器仍然在后台运行,但是推出交互式终端,使用 "ctrl+P+Q" 即可

启动容器

docker start 容器ID或者容器名

重启容器

docker restart 容器ID或者容器名

停止容器

  1. 正常停止

    docker stop 容器ID或者容器名
    
  2. 强制停止

    docker kill 容器ID或者容器名
    

删除已经停止的容器

docker rm 容器ID

如果需要一次性删除多个容器,可以使用:

docker rm -f $(docker ps -a -q)

或者

docker ps -a -q | xargs docker rm

查看日志

docker logs 容器 ID

通常添加如下选项:

  • -t:加入时间戳
  • -f:跟随最新的日志打印
  • --tail 数字:显示最后多少条

查看容器内部

  1. 查看容器内部进程

    docker top 容器ID
    
  2. 查看容器内部细节

    docker inspect 容器ID
    

进入正在运行的容器

  1. exec 进入

    docker exec -it 容器ID /bin/bash
    

    在容器中打开新的终端,并且可以启动新的进程

  2. attach 进入

    docker attach 容器ID
    

    直接进入容器启动命令的终端,不会启动新的进程

拷贝

  1. 从容器拷贝到宿主机上:

    docker cp 容器ID:容器内路径 目标的宿主机目录
    
  2. 从宿主机拷贝到容器:

    docker cp 宿主机的目录 容器ID:容器内路径
    

不管容器是否启动,拷贝都会生效

常用命令-1583396362212.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351