Docker是PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。
Docker是通过内核虚拟化技术(namespace以及cgroups等)来提供容器的资源隔离与安全保障。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机( VM)额外的操作系统开销,提高资源利用率。

特点

1.更高效的利用系统资源
2.更快速的启动时间
3.一致的运行环境
4.更轻松的迁移
5.更轻松的维护和扩展

对比传统虚拟机总结

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为 MB 一般为 GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个

部署Docker环境:

环境准备:(centos7)

yum install -y docker         --安装
systemctl start docker --启动Docker
systemctl enable docker --加入开机自动启动  

docker 指令用法

直接敲入docker  ,会有很多Command选项,执行docker  【Command】 -h,如: docker  ps  -h  查看各个命令的详细用法

下载获取一个镜像

从 Docker 镜像仓库获取镜像的命令是 docker pull 。默认从Docker的镜像仓库下载

docker pull centos      
将镜像保存到本地,可以上传到其他主机使用
[root@localhost www]# docker save centos > /docker/centos.tar.gz
[root@localhost www]# ls /docker/
centos.tar.gz 上传本地的镜像:
[root@localhost www]# docker load < /docker/centos.tar.gz

 查看镜像(查看镜像信息包括:镜像仓库、标签、镜像ID、创建时间、镜像大小)

[root@localhost ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest 73acd1f0cfad 5 hours ago 109 MB
docker.io/centos latest 2d194b392dd1 8 days ago 195 MB 其他一些查看镜像的指令:
查看所有镜像
[root@localhost ~]# docker image ls -a 查看在某个镜像之前的镜像
[root@localhost ~]# docker image ls -f before=nginx REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos latest 2d194b392dd1 8 days ago 195 MB
查看在某个镜像之后的镜像
[root@localhost ~]# docker image ls -f since=centos REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/nginx latest 73acd1f0cfad 5 hours ago 109 MB

  删除镜像(要删除的镜像不能被在用的容器调用,先停掉用该镜像的容器,再删除镜像)

[root@localhost ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest 73acd1f0cfad 5 hours ago 109 MB
docker.io/centos latest 2d194b392dd1 8 days ago 195 MB
[root@localhost ~]# docker image rm 73a --ID不重复,只要前几位可以标识该镜像就可以

  启动一个容器:docker  run

[root@localhost ~]# docker run --name host -i -t -d  centos /bin/bash
c0d1bedfd1d08559f6e98a24a4bdfe6b7e90c59e9e852436c93ebdb68936eb48
--name:指定容器名称
-t :分配一个tty终端
-i :容器的标准输保持打开的状态
-d:后台运行
-p: 指令端口,启动应用容器时用到
-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>

进入一个容器内部

[root@localhost ~]# docker exec -i -t host bash      --可以指定别名
[root@4117832e3e82 /]# exit --退出容器
exit
[root@localhost ~]# docker exec -i -t bash --也可以指定 ID编号
[root@4117832e3e82 /]# hostname
4117832e3e82

  docker attach 指令进入容器,但是在容器中执行 exit 也会停止容器,所以最好使用 docker  exec 进入

下面使用nginx的镜像创建一个容器,记录一下nginx容器的使用过程

查看镜像:
[root@localhost ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest 73acd1f0cfad 21 hours ago 109 MB
docker.io/centos latest 2d194b392dd1 9 days ago 195 MB
启动一个名为 mynginx 的容器:
[root@localhost ~]# docker run --name mynginx -i -t -d -p 80:80 nginx
2e98d20483b61879cf611b970e9fe15af2ca69049e6d6a6a1b7f44f318d1db07
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2e98d20483b6 nginx "nginx -g 'daemon ..." 13 seconds ago Up 12 seconds 0.0.0.0:80->80/tcp mynginx
[root@localhost ~]#
进入mynginx容器:
[root@localhost ~]# docker exec -i -t mynginx bash
root@2e98d20483b6:/#
启动nginx服务:
root@2e98d20483b6:/# /etc/init.d/nginx start
root@2e98d20483b6:/# /etc/init.d/nginx status
[ ok ] nginx is running. 退出容器,并查看nginx状态:
[root@localhost ~]# ps -ef | grep nginx
root 2257 2242 0 01:29 pts/1 00:00:00 nginx: master process nginx -g daemon off;
101 2280 2257 0 01:29 pts/1 00:00:00 nginx: worker process
root 2375 2124 0 01:33 pts/2 00:00:00 grep --color=auto nginx 打开访问测试页


  2.还可以在docker host创建nginx的所需网页目录,这样就可以保存数据

在docker host创建网页文件目录,将容器中的目录挂载到docker host中
[root@localhost ~]# docker run --name webserver -d -i -t -p 80:80 -v /usr/share/nginx/html/:/usr/share/nginx/html/ nginx
88e92079d46ab17c0809401d153de1487f9d2c41093bd65057ce490b1c382b4a
[root@localhost ~]#
在docker host中写一个测试页
[root@localhost ~]# echo '<h2>nginx test page for docker</h2>' > /usr/share/nginx/html/index.html 访问测试页


  

停止、启动容器

[root@localhost ~]# docker ps -a     --查看所有已经创建的容器
[root@localhost ~]# docker stop ID
[root@localhost ~]# docker start ID
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e4ce0f90cdfb nginx "nginx -g 'daemon ..." 2 minutes ago Up 2 minutes 80/tcp nginx
[root@localhost ~]# docker stop e4ce
e4ce
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]#

  删除容器 (要删除的容器必须是出于关闭状态)

[root@localhost ~]# docker rm ID     --删除容器

  

容器在运行时删除该容器会提示如下错误
[root@localhost ~]# docker rm e4c
Error response from daemon: You cannot remove a running container e4ce0f90cdfbe9013059cb48a6767c4a54e5347a5c184f61f562f4717a9b9f21. Stop the container before attempting removal or use -f 可以使用 -f 选项强制删除,在运行的容器也会删除

 

 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以下内容参考大神博客:http://www.cnblogs.com/kevingrace/p/5252929.html

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。当你真正投入容器Docker的怀抱,不但可以发现它能解决很多问题,而且还具有众多的优点:

1)它是不可变的-操作系统,库版本,配置,文件夹和应用都是一样的。您可以使用通过相同QA测试的镜像,使产品具有相同的表现。  
2)它是轻量级的-容器的内存占用非常小。不需要几百几千MB,它只要对主进程分配内存再加上几十MB。  
3)它很快速-启动一个容器与启动一个单进程一样快。不需要几分钟,您可以在几秒钟内启动一个全新的容器。  

  但是,许多用户依然像对待典型的虚拟机那样对待容器,似乎都忘记了除了与虚拟机相似的部分,容器还有一个很大的优点:它是一次性的。  
这个“特性”本身促使用户改变他们关于使用和管理容器的习惯;下面将会说明下在容器中不应该做这些事,以确保最大地发挥容器的作用。

1)不要在容器中存储数据 – 容器可能被停止,销毁,或替换。一个运行在容器中的程序版本1.0,应该很容易被1.1的版本替换且不影响或损失数据。
有鉴于此,如果你需要存储数据,请存在卷中,并且注意如果两个容器在同一个卷上写数据会导致崩溃。确保你的应用被设计成在共享数据存储上写入。 2)不要将你的应用发布两份 – 一些人将容器视为虚拟机。他们中的大多数倾向于认为他们应该在现有的运行容器里发布自己的应用。
在开发阶段这样是对的,此时你需要不断地部署与调试;但对于质量保证与生产中的一个连续部署的管道,你的应用本该成为镜像的一部分。记住:容器应该保持不变。 3)不要创建超大镜像 – 一个超大镜像只会难以分发。确保你仅有运行你应用/进程的必需的文件和库。不要安装不必要的包或在创建中运行更新(yum更新)。 4)不要使用单层镜像 – 要对分层文件系统有更合理的使用,始终为你的操作系统创建你自己的基础镜像层,另外一层为安全和用户定义,
一层为库的安装,一层为配置,最后一层为应用。这将易于重建和管理一个镜像,也易于分发。 5)不要为运行中的容器创建镜像 – 换言之,不要使用“docker commit”命令来创建镜像。这种创建镜像的方法是不可重现的也不能版本化,应该彻底避免。
始终使用Dockerfile或任何其他的可完全重现的S2I(源至镜像)方法。 6)不要只使用“最新”标签 – 最新标签就像Maven用户的“快照”。标签是被鼓励使用的,尤其是当你有一个分层的文件系统。
你总不希望当你2个月之后创建镜像时,惊讶地发现你的应用无法运行,因为最顶的分层被非向后兼容的新版本替换,
或者创建缓存中有一个错误的“最新”版本。在生产中部署容器时应避免使用最新。 7)不要在单一容器中运行超过一个进程-容器能完美地运行单个进程(http守护进程,应用服务器,数据库),
但是如果你不止有一个进程,管理、获取日志、独立更新都会遇到麻烦。 8)不要在镜像中存储凭据。使用环境变量 –不要将镜像中的任何用户名/密码写死。使用环境变量来从容器外部获取此信息。 9)使用非root用户运行进程 – “docker容器默认以root运行。(…)随着docker的成熟,更多的安全默认选项变得可用。
现如今,请求root对于其他人是危险的,可能无法在所有环境中可用。你的镜像应该使用USER指令来指令容器的一个非root用户来运行。” 10)不要依赖IP地址 – 每个容器都有自己的内部IP地址,如果你启动并停止它地址可能会变化。如果你的应用或微服务需要与其他容器通讯,
使用任何命名与(或者)环境变量来从一个容器传递合适信息到另一个。

  

Docker容器学习--1的更多相关文章

  1. Docker容器学习梳理 - 应用程序容器环境部署

    关于国内Docker镜像,可以参考:Docker容器学习梳理--基础知识(2) 的Docker镜像使用. 如果我们需要在Docker环境下部署tomcat.redis.mysql.nginx.php等 ...

  2. Docker容器学习梳理 - 日常操作总结

    使用Docker已有一段时间了,今天正好有空梳理下自己平时操作Docker时的一些命令和注意细节: Docker 命令帮助 $ sudo docker Commands: attach Attach ...

  3. Docker容器学习与分享07

    Docker容器网络 在分享06中学完了bridge网络,接着学习none网络和host网络. Docker在安装时会在host上默认创建三个网络,分别是bridge.host.null. [root ...

  4. Docker容器学习与分享06

    Docker容器网络 Docker有三种原生网络:none网络.host网络.bridge网络. 先来学习一下bridge网络. 首先使用ifconfig命令查看一下本机的网络设备: 从图中可以看见多 ...

  5. Docker容器学习与分享05

    Docker镜像操作 学完了一些最基本的操作之后,我学习了一些关于docker镜像的基本操作. 首先来学习一下从docker hub上拉取镜像,以centos镜像为例,使用docker search命 ...

  6. Docker容器学习与分享04

    Docker容器的基本操作(2) 基于docker分享03的centos容器,接着学习docker容器的基本操作. docker分享03中创建了一个centos镜像,如果想要查看容器的具体信息就要使用 ...

  7. Docker容器学习与分享03

    Docker容器的基本操作 所有的docker命令都是以docker开头,也就是指调用docker程序.我学习的第一个命令就是docker run,运行一个容器.以Docker分享02中的容器为例: ...

  8. docker容器学习笔记

    docker是通过内核虚拟化技术来提供容器的资源隔离与安全保障. docker组成: docker client.docker server.docker组件(镜像(image).容器(contain ...

  9. docker容器学习资料

    现在说起docker容器,你应该不会太陌生了吧?如果你是真的不懂或者是太久没有用到已经忘记的差不多了,那么你需要这一波的干货了,这波的干货刚刚好可以满足你的需要! 话不多说,直接上干货

  10. 5.Docker容器学习之新手进阶使用

    @ 原文地址:点击直达 学习参考:https://yeasy.gitbooks.io/docker_practice/repository/registry.html 0x00 前言简述 描述: 本章 ...

随机推荐

  1. 1093 Count PAT's(25 分)

    The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and ...

  2. bootstrap multiselect的使用 多选下拉菜单

    官网网址: http://davidstutz.de/bootstrap-multiselect/

  3. LeetCode 233 Number of Digit One 某一范围内的整数包含1的数量

    Given an integer n, count the total number of digit 1 appearing in all non-negative integers less th ...

  4. Jmeter-性能测试工具

    0.概念和备注 //基本使用流程 测试计划-->右键 添加-> Threads(Users) --> 选择线程组 -->线程组-->右键 添加 --> Sample ...

  5. ACdream 1431——Sum vs Product——————【dfs+剪枝】

    Sum vs Product Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) S ...

  6. 《C#高效编程》读书笔记08-推荐使用查询语法而不是循环

    C#语言中并不缺少控制程序流程的结构,for.while.do/while和foreach等都可以做到这一点.但我们还有更好的方式:查询语法(query syntax) 下面这段代码演示了用命令式的方 ...

  7. 初识MAC(由window到mac的转变适应)

    * Windows上的软件可以拿到Mac上面安装吗? Windows上面的软件不能拿到Mac的操作系统上安装,除此之外,Windows里的 exe文件,在Mac下面也是无法运行的,要特別注意.如果你要 ...

  8. Intellij IDEA 最头大的问题,如何自定义注释模板?

    想栈长我当初从 Eclipse 转用 IDEA 真是纠结,放弃然后尝试了N次,不过现在已经算是转型成功了,可以完全脱离 Eclipse 撸码了,虽然说我现在真的撸得非常少了.. 说到 IDEA 的痛点 ...

  9. 使用SpringSession管理分布式系统的会话Session

    在我方供应链项目分布式部署的环境下,需要在统一网关服务中管理访问的Session,即无论访问请求路由到哪一个网关服务环境,使用的都是相同的HttpSession,这样就保证了在用户登录之后,能够使用统 ...

  10. BaiduPCS-Go 使用CMD命令行全速下载百度云

    BaiduPCS-Go 使用CMD命令行全速下载百度云 链接: https://laod.cn/black-technology/baidupcs-go-baiduyun.html 下面为自己测试过程 ...