
正文
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







