zoukankan      html  css  js  c++  java
  • docker简单介绍----镜像和容器管理

    docker可以分为三部分:docker镜像   docker仓库  docker容器

    docker镜像:一个image可以包含一个镜像,也可以理解为一个系统模板,里面安装了相关应用,也可以是纯净版的系统

    docker仓库:docker registries ,也叫docker仓库, 分为共有库和私有库俩种,上传下载images是通过dcoker仓库来实现的,公有库叫docker hub,也可以在局域网部署一个私有的docker仓库

    docker容器:容器是从image中创建的,可以执行启动、开始、停止、删除等操作,可以理解为image创建的一个虚拟机

    开始正题:

    docker安装:centos 7   ------------yum -y install docker-io

    查看docker目前有哪些镜像:

    docker images

    查看docker库中有哪些images

    docker search  “images-name”  例如: docker search centos7

    我们看到下图出现很多参数,其中包括image的名字、描述、stars(受欢迎程度) 是否为官方创建  是否为自动创建等

    Docker Official Images指docker标准库, 由docker 官方建立. 用户建立的image则会有userid的prefix. 

    automated builds 则是通过代码版本管理网站结合docker hub提供的接口生成的, 例如github, bitbucket, 
    你需要注册docker hub, 然后使用github或bitbucket的在账户链接到docker hub, 然后就可以选择在github或bitbucket里面的项目自动build docker image, 这样的话只要代码版本管理网站的项目有更新, 就会触发自动创建image.

    拉取镜像

    docker pull docker.io/ansible/centos7-ansible    #下载完镜像后可以使用docker images查看是否下载成功

    启动容器并进入到容器中

    docker run -it {镜像id} /bin/bash    #也可以添加-d参数后台运行

    假如容器在后台运行,这个时候就需要进入到该容器进行操作

    1. docker attach 容器id

    不常用:但在,使用该命令有一个问题。当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。

    2.容器中安装sshd进行远程

    不常用:为了保证安全性,不建议开启SSHD服务

    3.使用nsenter进行远程(默认已经安装,如果没有可以手动安装)

    docker inspect -f '{{.State.Pid}}' 容器ID

    nsenter --target 容器PID --mount --uts --ipc --net --pid

    例如:

    4.使用 exec进入docker容器

    docker exec -it 容器id  /bin/bash

    ===============================================================================================================================================

    创建新镜像:在容器中部署好应用,有时会迁移到其它docker环境中,所以我们需要将当前容器中的应用创建为新的镜像上传到docker仓库中,方便下载使用

    (1) docker commit来生成新镜像

    参数详解:

    • -a :提交的镜像作者;

    • -c :使用Dockerfile指令来创建镜像;

    • -m :提交时的说明文字;

    • -p :在commit时,将容器暂停。

    举例说明:
    docker commit -a "guohaidong" -m "vsftpd" f8315ebb750b vsftpd:v1

    使用Dockerfile创建新镜像

    指令说明

    指令的一般格式为INSTRUNCTION arguments,指令包括FROM、MAINTAINER、RUN等。具体指令及说明如下:

    指令 说明
    FROM 指定所创建镜像的基础镜像
    MAINTAINER 指定维护者信息
    RUN 运行命令
    CMD 指定启动容器时默认执行的命令
    LABEL 指定生成镜像的元数据标签信息
    EXPOSE 声明镜像内服务所监听的端口
    ENV 指定环境变量
    ADD 赋值指定的<src>路径下的内容到容器中的<dest>路径下,<src>可以为URL;如果为tar文件,会自动解压到<dest>路径下
    COPY 赋值本地主机的<scr>路径下的内容到容器中的<dest>路径下;一般情况下推荐使用COPY而不是ADD
    ENTRYPOINT 指定镜像的默认入口
    VOLUME 创建数据挂载点
    USER 指定运行容器时的用户名或UID
    WORKDIR 配置工作目录
    ARG 指定镜像内使用的参数(例如版本号信息等)
    ONBUILD 配置当前所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作的命令
    STOPSIGNAL 容器退出的信号
    HEALTHCHECK 如何进行健康检查
    SHELL 指定使用SHELL时的默认SHELL类型

    Dockerfile文件格式

    最简单的案例:

    在linux系统中的某个路径新建一个文件为Dockerfile文件

    vim Dockerfile

    FROM docker.io/centos
    MAINTAINER Guo Haidong <493630393@qq.com>
    RUN yum -y install mariadb

    然后使用docker build -t contos/mariadb:v1 -f /data/docker/Dockerfile .      #来生成新的镜像# “.”默认是指Dockerfile是在当前路径,也可以使用-f参数来指定Dockerfile路径

    -t 指定镜像名称和tag

    -f 指定Dcokerfile文件的path 

    #*******搭建私有docker仓库,上传镜像到仓库,后面介绍

    删除镜像

    docker rmi  镜像id

    删除镜像前必须删除容器

    docker rm -f 容器id

    查看容器id方法:

    docker ps

    ===================================

    终端运行一个nginx容器,如果没有nginx镜像会自动从docker仓库中pull下来

    docker run --name nginx -it nginx /bin/bash

    ===========================================================

    查看容器的pid

    docker inspect -f '{{.State.Pid}}' 容器ID

    使用nsenter配合容器PID来进入到容器里

    nsenter --target 容器PID --mount --uts --ipc --net --pid

    ============================================================================

    命令总结:

    镜像管理

    docker search  搜索镜像

    docker pull  获取镜像

    docker images  查看镜像

    docker rmi   删除镜像

    docker commit命令或者编写dockerfile文件  生成新镜像

    容器管理

    docker run --name -h hostname   启动容器

    docker stop|start|restart 容器id        停止|启动|重启    容器

    docker run --restart=always --name hostname -d 容器id或者容器名称  自动重启容器(当容器由于某种错误导致容器停止就会触发restart信号)

    docker ps -l               查看最后一个退出容器

    docker ps -n number        显示最后几个容器

    docker top  容器id或者容器名称         查看当前运行的进程

    docker logs -f  容器id或者容器名称     实时查看当前容器日志输出

    docker attach | 容器SSH |使用nsenter |使用exec   进入容器     #这里推荐使用后俩种,

    *****docker inspect 容器名称或者容器id    显示容器的详细信息

    *****docker inspect --format '{{.Config.Hostname}}'   容器名称或者容器id

  • 相关阅读:
    无声购票弹窗
    C#多线程与异步的区别
    关于adb驱动
    事务日志初探(二)---简单恢复模式
    预写式日志(Write-Ahead Logging (WAL))
    如果正确读取SQL Server中的扩展事件?
    索引初探(三)
    事务日志还原的次意外的操作失误
    索引初探(二)
    索引的初探(一)
  • 原文地址:https://www.cnblogs.com/python-cat/p/10208640.html
Copyright © 2011-2022 走看看