docker镜像、容器以及命令操作
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)
[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

# 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的进程已经结束了
# docker ps -a -q|xargs docker rm
创建一个以后台模式运行的容器:
[root@docker ~]# docker run -d --name mycentos centos /bin/bash
f61a3e75ebb5f78d1f593e7c92bf2a997077abc38287991818749550367b8150
-d:以后台模式创建,返回容器的uuid

[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,并一直循环下去
# 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
[root@176f5440f328 /]# exit
exit
exit:表示退出了容器的终端
[root@docker ~]# docker run -dt --name mycentos centos sh -c "while true;do echo hello world;sleep 2;done"
8179b8e95e31675986ccda57bb95650d6ea460105e23a67a4e692b7966354250

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命名空间的命令,能够是一些资源能够进行隔离
转:https://www.cnblogs.com/jsonhc/p/7754982.html
docker镜像、容器以及命令操作的更多相关文章
- docker学习笔记2--对镜像/容器的命令操作
Docker启动一个Centos镜像 我们下载完成一个Centos镜像之后,开始启动 docker run -d -i -t <imageID> /bin/bash 这样就能启动一个一直停 ...
- Docker系列之常用命令操作手册
目录 1.安装虚拟机 2.安装Docker 3.Docker镜像操作 4.Docker容器操作 Docker系列之常用命令操作手册 继上一篇博客Docker系列之原理简单介绍之后,本博客对常用的Doc ...
- Ubuntu下安装Docker,及Docker的一些常用命令操作
1.什么是 Docker Docker 是一个开源项目,Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案. Docker 的基础是 Linux 容器(LXC ...
- 二、docker 镜像容器常用操作(让我们用docker 溜得飞起)
前言 上篇讲了我们如何安装docker,现在该我们一展拳脚的时候了.接下来让我们一起学习一下docker常见的操作,让我们能够会使用 docker. 基本概念 在讲使用之前,还是先将一下docker ...
- docker镜像,容器的操作和应用
镜像操作 拉取镜像 从中央仓库拉取到本地 docker pull 镜像名称[:tag] #举个例子 :docker pull daocloud.io/libarary/tomcat:8.5.-jre8 ...
- Docker 镜像 容器 仓库
Docker 包括三个基本概念镜像(Image)容器(Container)仓库(Repository) Docker 镜像 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资 ...
- Docker 镜像介绍和命令
目录 是什么 UnionFS(联合文件系统) Docker镜像加载原理 分层的镜像 为什么 Docker 镜像要采用这种分层结构呢 特点 Docker镜像commit操作补充 案例演示 1.从Hub上 ...
- Docker 镜像 && 容器的基本操作
镜像 && 容器 docker 镜像好比操作系统的镜像(iso) docker 容器好比是已安装运行的操作系统 所以说 docker 镜像文件运行起来之后,就是我们所说的 docker ...
- Docker 镜像/容器操作命令
一.镜像操作 1.拉取镜像 # docker pull tomcat # docker pull tomcat:8.0.21-jre8 # docker pull 192.168.220.150: ...
随机推荐
- 6-3 二叉树的重建 uva536
已知先序和中序 求后序 可以有两种方式输出 一种是建好树按照树输出 一种是不建树 在遍历的过程中存入vector 再倒叙输出 #include<bits/stdc++.h> usin ...
- 练习题|MySQL
MySQL主要内容: 1.数据库介绍.类型.特性2.MySQL数据库安装.连接.启动.停止3.表字段类型介绍.主键约束.表创建语句4.常用增删改查语句.分组.聚合5.外键管理.unique字段.表结构 ...
- AngularJS表格神器“ui-grid”的应用
HTML: (代码仅用于解释得更清楚,并未完全展示) <!doctype html> <html ng-app="app"> <head> & ...
- 初探和实现websocket心跳重连(npm: websocket-heartbeat-js)
提示:文章最下方有仓库地址 心跳重连缘由 websocket是前后端交互的长连接,前后端也都可能因为一些情况导致连接失效并且相互之间没有反馈提醒.因此为了保证连接的可持续性和稳定性,websocket ...
- ASP.NET Core 文件系统
ASP.NET Core 文件系统 静态文件 目录浏览 默认页面 MIME类型配置 实战文件服务器 紧接上一讲 中间件 之后,今天来我们来讲一下关于 ASP.NET Core 中静态文件服务. 什 ...
- Python3 Srcapy 爬虫
最近一直在理论学习,没有时间写博客.今天来一波Python爬虫,为机器学习做数据准备. 爬虫配置环境 Anaconda3 + Spyder + Scrapy Anaconda 安装就不绍了,网上很多. ...
- 【值得收藏】一份非常完整的Mysql规范
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 本文从芋道源码转载,在原有内容基础上结合阿里巴巴Java开发手册中Mysql数据库章节的介绍,加上自己的理解和说明,整理而 ...
- 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-2 蒙特卡罗(二) 重要性采样
书本内容:见相册 preface 还记的我们上一篇说的Monte Carlo 维度诅咒吗 上一篇算是二维的例子吧,大家看了之后是否想着写一个一维的Monte Carlo模拟积分?(我想了,没写出来) ...
- 深入剖析ConcurrentHashMap
原文是09年时写的,在公司的邮件列表发过,同事一粟 和清英 创建的并发编程网 对这方面概念和实战有更好的文章,贴出来仅供参考.pdf格式在:http://www.slideshare.net/hong ...
- VB 获取文件版本
Function GetVer(FilePathName As String) As String If FilePathName = Nothing Or FilePathName = " ...