docker image

docker image是一个极度精简版的Linux程序运行环境,官网的java镜像包括的东西更少,除非是镜像叠加方式的如centos+java7

docker image是需要定制化build的一个安装包,包括基础镜像+应用的二进制部署包

docker image内不建议有运行期需要修改的配置文件

Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。当前目录下包含Dockerfile,使用命令build来创建新的image

docker image的最佳实践之一是尽量重用和使用网上公开的基础镜像

为docker添加国内镜像,加速下载镜像:

修改配置文件/etc/docker/daemon.json,如果该文件没有则进行创建:

[root@docker ~]# cat /etc/docker/daemon.json
{
"dns": ["192.168.101.2","8.8.8.8"],
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

然后重启docker:

# systemctl restart docker

关于image的一些命令:

搜索镜像:

# docker search nginx

nginx为镜像名称(镜像名称如:centos、nginx、redis)

拉取镜像:

# docker pull nginx 

列出本地镜像:

# docker images(docker images --help)
# docker image ls -a 同样是列出镜像(docker image ls --help查看)

删除镜像:

# docker  rmi nginx    (docker rmi image_name/image_id)
# docker image rm nginx同样是删除镜像(docker image rm image_name/image_id)
-f:force强制删除
  note:如果镜像被容器占用了,需要先删除容器,才能删除镜像

[root@aliyun ~]# docker image ls -q
4760dc956b2d
2d743d41a4ba
57601981c989
5cb13972bd2b
5d4d51c57ea8
006de56999d1

将镜像导出:

# docker save -o centos.tar centos
[root@docker ~]# ll
total
-rw-------. root root Oct : anaconda-ks.cfg
-rw-------. root root Oct : centos.tar

将本地包导入到镜像中:

# docker load --input centos.tar

Docker container:

Docker container是image的实例,共享内核

Docker  container里可以运行不同os的image,比如Ubuntu的或者centos

Docker container不建议内部开启一个sshd服务,1.3版本后新增了docker exec命令进入容器进行排查问题

Docker container没有ip地址,通常不会有服务端口暴露,是一个封闭的沙盒

Docker daemon:

Docker daemon是创建和运行container的Linux守护进程,也是Docker 最主要的核心组件

Docker daemon可以理解为Docker container的container

Docker daemon可以绑定本地端口并提供REST API服务,用来远程访问和控制

Docker container的一些命令操作:

查看容器:

# docker ps

查看所有的容器:

# docker ps -a

启动一个容器:

# docker run --help
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
# docker run 启动一个容器并执行命令(容器是本机host的一个进程,如果进程没有后续操作,那么状态将是exited)

创建一个名称为mycentos的container,并执行/bin/bash:

# docker run --name mycentos centos /bin/bash

  --name:表示容器的name,后面的centos表示使用的哪个镜像(镜像name)

  /bin/bash:表示执行的command

容器可以使用容器id和容器name来识别(与镜像类似)
容器有状态(exited表示已经退出了)
启动容器:

# docker start mycentos

关闭容器:

# docker stop mycentos 

删除容器:

# docker rm mycentos 

上面的操作都可以使用容器的唯一标识(容器名称或者容器id)

-f:force强制删除

创建一个具有tty伪终端的容器:

# docker run -t --name mycentos centos /bin/bash
[root@92f0af59184d /]#

可以看见直接进入到了容器的终端,但是由于没有使用-i(交互功能,所以使用命令会卡住)

此时查看该容器状态:

查看本机host进程:

可以看出进程中包含的一长串字符就是该容器的uuid,由于进程没有关闭所以容器状态就是up

现在将容器关闭掉:

可以看见容器状态已经exited了

而相应的本机host的进程已经结束了

note:docker的容器就是本机host的某一个包含容器uuid的进程,进程关闭了那么容器也就是停止了
删除所有的exited容器:

# docker ps -a -q|xargs docker rm

创建一个以后台模式运行的容器:

[root@docker ~]# docker run -d --name mycentos centos /bin/bash
f61a3e75ebb5f78d1f593e7c92bf2a997077abc38287991818749550367b8150

-d:以后台模式创建,返回容器的uuid

因为创建的只是一个后台运行的容器,容器并没有被安排操作其他的命令(/bin/bash),所以容器的状态还是exited,本机host的进程是没有这个容器的
 
创建一个以后台模式运行不间断的容器:

[root@docker ~]# docker run -d --name mycentos centos sh -c "while true;do echo hello world;sleep 2;done"
5ef7fa20faa1071ad1a6eff2241368b113cbf45e1b89c6a292907a4f1a3e4269

为什么这里的容器状态一直是up,那是因为执行的命令:sh -c "while true;do echo hello world;sleep 2;done" 是在容器中每隔2s打印一次hello world,并一直循环下去

查看本机host的进程也能看见,进程一直处于运行状态
将运行的容器stop就可以停止掉容器

# docker stop mycentos

可以将停止的状态处于运行状态(当然前提是容器的命令必须有运行的执行)

# docker start mycentos

-t与命令/bin/bash结合进入到了终端,但是却不能操作:

[root@docker ~]# docker run -t --name test saltstack/ubuntu-14.04 /bin/bash
root@b588c6131109:/# ls

上述在终端不具有交互功能,于是加上-i:

[root@docker ~]# docker run -it --name mycentos centos /bin/bash
[root@176f5440f328 /]# ls
anaconda-post.log bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  创建一个进入到了容器终端,并能执行交互命令的容器
  -i:interactive具有交互功能
  /bin/bash:进入到bash环境
  -t:提供伪终端

[root@176f5440f328 /]# exit
exit

exit:表示退出了容器的终端

  退出容器终端后,容器状态也是退出了,本机host进程也停止运行了
  容器的状态会随着command的命令执行而改变
  如果需要将容器持续不断的运行,那么将command变为持续不断的运行就可以

[root@docker ~]# docker run -dt --name mycentos centos sh -c "while true;do echo hello world;sleep 2;done"
8179b8e95e31675986ccda57bb95650d6ea460105e23a67a4e692b7966354250
创建的一个持续不断运行的container(命令是隔两秒打印一次的不中断的)
可以用docker stop container_id 进行停止(停止后就可以删掉了)
停止全部container,并删除:
docker exec和nsenter的区别:

[root@docker ~]# docker exec --help
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Run a command in a running container

现在创建一个一直运行的container:

[root@docker ~]# docker run -d --name mycentos centos sh -c "while true;do echo hello world;sleep 2;done"
292cf95a7853e70978657d7c05f7abd4bff27f1c4e73d97a32b4639d1c0165fc [root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
292cf95a7853 centos "sh -c 'while true..." seconds ago Up seconds mycentos

docker exec表示在一个运行的container中执行命令

Options:
-d, --detach Detached mode: run command in the background
--detach-keys string Override the key sequence for detaching a container
-e, --env list Set environment variables
--help Print usage
-i, --interactive Keep STDIN open even if not attached
--privileged Give extended privileges to the command
-t, --tty Allocate a pseudo-TTY
-u, --user string Username or UID (format: <name|uid>[:<group|gid>])

执行某一个命令ls /

[root@docker ~]# docker exec -it 292cf95a7853 ls /
anaconda-post.log bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var

还可以标准输入命令:

[root@docker ~]# docker exec  292cf95a7853 echo hello
hello

当docker exec执行如下可以进入到container中:

同等的nsenter命令也可以完全进入到container中:

如果没有这个命令需要进行安装:yum install util-linux

1、确定该container的pid:

[root@docker ~]# docker inspect -f {{.State.Pid}} 292cf95a7853

2、使用nsenter连接:

[root@docker ~]# nsenter --target `docker inspect -f {{.State.Pid}} 292cf95a7853` --net --ipc --pid --mount --uts
[root@292cf95a7853 /]# ls
anaconda-post.log bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var

nsenter是关于namespace命名空间的命令,能够是一些资源能够进行隔离

  PID:进程隔离(process id)
  NET:网络接口(network)
  IPC:管理跨进程通信的访问(interprocess communication)
  MNT:管理挂载点(mount)
  UTS:隔离内核和版本标识(unix timesharing system)
  USER:隔离用户
 

转:https://www.cnblogs.com/jsonhc/p/7754982.html

docker镜像、容器以及命令操作的更多相关文章

  1. docker学习笔记2--对镜像/容器的命令操作

    Docker启动一个Centos镜像 我们下载完成一个Centos镜像之后,开始启动 docker run -d -i -t <imageID> /bin/bash 这样就能启动一个一直停 ...

  2. Docker系列之常用命令操作手册

    目录 1.安装虚拟机 2.安装Docker 3.Docker镜像操作 4.Docker容器操作 Docker系列之常用命令操作手册 继上一篇博客Docker系列之原理简单介绍之后,本博客对常用的Doc ...

  3. Ubuntu下安装Docker,及Docker的一些常用命令操作

    1.什么是 Docker         Docker 是一个开源项目,Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案.         Docker 的基础是 Linux 容器(LXC ...

  4. 二、docker 镜像容器常用操作(让我们用docker 溜得飞起)

    前言 上篇讲了我们如何安装docker,现在该我们一展拳脚的时候了.接下来让我们一起学习一下docker常见的操作,让我们能够会使用 docker. 基本概念 在讲使用之前,还是先将一下docker ...

  5. docker镜像,容器的操作和应用

    镜像操作 拉取镜像 从中央仓库拉取到本地 docker pull 镜像名称[:tag] #举个例子 :docker pull daocloud.io/libarary/tomcat:8.5.-jre8 ...

  6. Docker 镜像 容器 仓库

    Docker 包括三个基本概念镜像(Image)容器(Container)仓库(Repository) Docker 镜像 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资 ...

  7. Docker 镜像介绍和命令

    目录 是什么 UnionFS(联合文件系统) Docker镜像加载原理 分层的镜像 为什么 Docker 镜像要采用这种分层结构呢 特点 Docker镜像commit操作补充 案例演示 1.从Hub上 ...

  8. Docker 镜像 && 容器的基本操作

    镜像 && 容器 docker 镜像好比操作系统的镜像(iso) docker 容器好比是已安装运行的操作系统 所以说 docker 镜像文件运行起来之后,就是我们所说的 docker ...

  9. Docker 镜像/容器操作命令

    一.镜像操作   1.拉取镜像 # docker pull tomcat # docker pull tomcat:8.0.21-jre8 # docker pull 192.168.220.150: ...

随机推荐

  1. P1197 [JSOI2008]星球大战 并查集 反向

    题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧 ...

  2. 001 Spark的简介以及入门

    1.hadoop,spark,Flink的比较 MapReduce: 分布式的计算框架 -> Hive 问题: shuffle:大文件的排序+读写磁盘+网络传输 => 比较慢 只有两种执行 ...

  3. 003 关于shell基础,大数据的前期准备

    一:正则表达式 1.通配符与正则表达式的区别 通配符有 *,?,[]. 区别: 通配符用来匹配文件名 正则表达式是为了匹配字符串 2.“.*”的意思 .:任意字符 *:匹配前一个字符任意次 3.过滤出 ...

  4. PHP 扩展 MongoDB

    打开phpinfo 查看 nts(非线程) 还是 ts (线程),操作位数: 下载对应的版本的php_mongodb.dll 文件 下载链接: pecl mangodb下载 把文件解压出来 php_m ...

  5. jQuery Ajax -附示例

    jQuery其实就是一个JavaScript的类库,其将复杂的功能做了上层封装,使得开发者可以在其基础上写更少的代码实现更多的功能. jQuery 不是生产者,而是大自然搬运工. jQuery Aja ...

  6. Python学习——collections系列

    一 ,计数器(counter) Counter是对字典类型的补充,用于追踪值得出现次数 ps:具备字典的所有功能 + 自己的功能 例: >>> from collections im ...

  7. SQL SERVER字符串中的空格去除

    1.LTRIM 删除起始空格后返回字符表达式. 语法 LTRIM   (   character_expression   ) 参数 character_expression 是字符或二进制数据表达式 ...

  8. BZOJ.2034.[2009国家集训队]最大收益(二分图匹配 贪心)

    题目链接 双倍经验:BZOJ.4276.[ONTAK2015]Bajtman i Okrągły Robin(然而是个权限题.区间略有不同) \(Description\) 有\(n\)个任务,完成一 ...

  9. Servlet中的过滤器

    在web.xml中配置:(用eclipse工具,可以在创建filter的时选择,web.xml中的配置可以自动生成) <filter> <display-name>LoginF ...

  10. 虚拟机性能监控与故障处理工具------JDK的命令行工具

    ①jps:虚拟机进程状况工具 功能:列出正在运行的虚拟机进程,并显示1.虚拟机执行主类名称以及2.这些进程的本地虚拟机唯一ID(LVMID). 使用频率最高的JDK命令行工具,其他的JDK工具大多需要 ...