Docker

1.什么是docker

  Docker 是一个开源项目,可以实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

2.为啥要用docker

  作为一种新兴的虚拟化方式,docker跟传统的虚拟化方式相比有很多优势。

  1)启动速度很快,可以在秒级实现,大量节约开发,测试,部署的时间

  2)docker对系统资源利用率很高,一台主机可以同时运行数千个容器,容器除了运行其中的应用外,几乎不消耗额外的系统资源,使得应用性能很高,同时系统的开销尽量小

  3)更高效:Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

  4)更轻松的迁移和扩展:Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

  5)更简单的管理:使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

3.基本概念

  1)Docker镜像

    镜像就是一个只读的模板,例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建Docker 容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

  2)Docker容器

    Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

    *注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层

  3)Docker仓库

    仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool等,可以提供大陆用户更稳定快速的访问。当然,用户也可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

  *注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。

4.安装和基本使用

  *这里介绍ubuntu和centos两种的安装方法

   Ubuntu

通过系统自带包安装

#Ubuntu 14.04 版本系统中已经自带了 Docker 包,可以直接安装。

$ sudo apt-get update
$ sudo apt-get install -y docker.io
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
$ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io #如果使用操作系统自带包安装 Docker,目前安装的版本是比较旧的 0.9.1。 要安装更新的版本,可以通过
使用 Docker 源的方式 通过Docker源安装最新版本 #要安装最新的 Docker 版本,首先需要安装 apt-transport-https 支持,之后通过添加源来安装。 $ sudo apt-get install apt-transport-https
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker 14.04 之前版本 #如果是较低版本的 Ubuntu 系统,需要先更新内核。 $ sudo apt-get update
$ sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring
$ sudo reboot #然后重复上面的步骤即可。
#安装之后启动 Docker 服务。 $ sudo service docker start

  Centos

  Centos支持centos6及以后的版本

CentOS6

#对于 CentOS6,可以使用 EPEL 库安装 Docker,命令如下

$ sudo yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
$ sudo yum install docker-io CentOS7 #CentOS7 系统 CentOS-Extras 库中已带 Docker,可以直接安装: $ sudo yum install docker #安装之后启动 Docker 服务,并让它随系统启动自动加载 $ sudo service docker start
$ sudo chkconfig docker on

  镜像使用:

获取镜像
#这里要先开启路由转发功能,要不docker容器不能上网
开启路由转发功能
1:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
2:
echo 1 > /proc/sys/net/ipv4/ip_forward
#以上两种方式都可以 #使用docker pull命令来从仓库获取所需要的镜像
#默认使用Docker Hub仓库下载,我们可以用国内的
#这里用的是腾讯的 docker pull index.tenxcloud.com/tenxcloud/centos
latest: Pulling from index.tenxcloud.com/tenxcloud/centos
0c908fa575ec: Pull complete
172ab63cd5e0: Pull complete
bd510c860c2e: Pull complete
f3b78c658786: Pull complete
456b1d0b21b9: Pull complete
6927e5ef1c2a: Pull complete
9ce5b52c7a15: Pull complete
f8ba963e89df: Pull complete
ea2c0e06606f: Pull complete
13def3dd8ad0: Pull complete
64efe21b2af1: Pull complete
19feb6d5a6b9: Pull complete
432440471e5c: Pull complete
432440471e5c: Pulling fs layer
Digest:sha256:190cbd5234c4aad993b852d5f118ecfba5499adc6f752026938bce0e ca754b0c
Status: Downloaded newer image for index.tenxcloud.com/tenxcloud/centos:latest #列出本地镜像
docker images REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/weaveworks/scope 1.6.7 692f6731868d 12 days ago 74.39 MB
docker.io/centos 6.9 fca4c61d0fa7 7 weeks ago 194.7 MB
docker.io/ubuntu 12.04 5b117edd0b76 8 months ago 103.6 MB
docker.io/training/sinatra latest 49d952a36c58 3 years ago 447 MB #在列出信息中,可以看到几个字段信息
1来自于哪个仓库,比如 index.tenxcloud.com/tenxcloud/centos
2镜像的标记,比如 14.04
3它的 ID 号(唯一)
4创建时间
5镜像大小 #启动容器
docker run -t -i index.tenxcloud.com/tenxcloud/centos" /bin/bash #创建镜像
创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个。 1.我们从已有镜像来创建一个
vi /etc/docker/damen.json ##修改默认docker镜像下载地址
}
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
} docker run -t -i centos /bin/bash
yum -y install httpd
exit
docker ps #查看运行的docker容器id
docker commit 42a3441b2f82 centos:apache #commit用来创建新的镜像,基于已有镜像上,centos:apache是给新镜像取名字
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos apache 8b74fe22414a 12 seconds ago 203.5 MB
docker.io/centos latest 3fa822599e10 4 weeks ago 203.5 MB
#可以进入新镜像查看一下是不是有httpd,是不是感觉像快照一样 2.通过docer build创建一个基于centos的httpd服务镜像
使用创建docker build创建时,需要使用Docekrfile自动化制作images
#Dockerfile有点像源码编译时./configure后产生的Makefile
mkdir /docker-build
cd /docker-build
touch Dockerfile
vi Dockerfile FROM centos #基于哪个镜像,直接写centos就是latest(如果没有特殊表明,比如ubuntu:12.04)
MAINTAINER <Daniel@localhost.localdomain> #作者
RUN yum -y install httpd #运行yum命令
ADD start.sh /usr/local/bin/start.sh #拷贝一个文件到实例里
ADD index.html /var/www/html/index.html #同上 echo '/usr/sbin/httpd - DFOREGROUND' >start.sh #这个相当于执行了systemctl start httpd
chmod +x start.sh
touch index.html #使用build命令创建新的image
语法:docker build -t 父镜像名:镜像tag Dockerfile所在路径 -t表示tage,镜像名 #镜像的删除
语法:docker rmi 镜像名
#镜像的发布
#方法1:save image to TarBall
保存image到tar包到本地
语法:docker save -o 导出的镜像名.tar 本地镜像名:镜像标签
docker save -o centos-httpd-docker-image.tar centos:httpd
导入:docker load -i 镜像名.tar #原来的要删除或者不存在 #方法2:Push image to docker hub 发布到外网
1.Sigup on docker hub & create repo
https://hub.docker.com/
2.Login to docker hub
docker login -u user -p passwd -e
3.Push image to docker hub #上传镜像
docker push centos:httpd
4.pull image from docker hub #下载镜像
docker pull user/centos:httpd

  容器使用:

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动

#新建并启动
docker run ubuntu:14.04 /bin/echo 'Hello world' #跟在本地echo一个"hello world"几乎没有区别
Hello world docker run -t -i ubuntu:14.04 /bin/bash
#下面的命令则启动一个 bash 终端,允许用户进行交互
# -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标
准输入保持打开
root@af8bae53bdd3:/# #当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
1.检查本地是否存在指定的镜像,不存在就从公有仓库下载
2.利用镜像创建并启动一个容器
3.分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
4.从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
5.从地址池配置一个 ip 地址给容器
6.执行用户指定的应用程序
7.执行完毕后容器被终止 #启动已终止容器
docker start #这个命令可以将已经停止的容器启动 #守护状态
更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 -d 参数来实现。
docker run -d ubuntu:12.04 /bin/sh -c "while true; do echo hello world;sleep 1; done"
容器启动后会返回一个唯一的 id,也可以通过 docker ps 命令来查看容器信息。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
680f67dc53d8 ubuntu:12.04 "/bin/sh -c 'while tr" 11 minutes ago Up 11 minutes stupefied_hopper
9b121e3e2ec7 centos:6.9 "/bin/bash" 6 days ago Up 3 minutes sick_aryabhata docker logs stupefied_hopper #用来获取容器输出信息 #终止容器
docker stop #这个命令用来停止正在运行的容器 此外,当Docker容器中指定的应用终结时,容器也自动终止。 例如对于上一章节中只启动了一个终端的容
器,用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。
终止状态的容器可以用 docker ps -a 命令看到
此外, docker restart 命令会将一个运行态的容器终止,然后再重新启动它 #进入容器
在使用 -d 参数时,容器启动后会进入后台。 某些时候需要进入容器进行操作,有很多种方法,包括使用docker attach 命令或 nsenter 工具等 docker run -idt ubuntu:12.01 #在后台运行一个容器
docker attach #后面跟容器id或者名字就可以进入容器
但是使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步
显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。 nsenter 工具在 util-linux 包2.23版本后包含。 如果系统中 util-linux 包没有该命令,可以按照下面的方法从源码安装
wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz; tar xzvf util-linux-2.24.tar.gz
cd util-linux-2.24
./configure --without-ncurses && make nsenter
sudo cp nsenter /usr/local/bin
PID=$(docker inspect --format "{{ .State.Pid }}" 容器名或者容器id #每一个容器都有.State.Pid,所以这个命令除了容器的id需要我们根据docker ps -a去查找,其他的全部为固定的格式
nsenter --target $PID --mount --uts --ipc --net --pid #进入 #导出和导入容器
导出容器
如果要导出本地某个容器,可以使用 docker export 命令
docker ps -a
docker export 680f67dc53d8c3510e4dcaa55a63c001a7818eb10a23f2498474fdfb5f58982e > ubuntu:12.04.tar 导入容器快照,可以使用 docker import 从容器快照文件中再导入为镜像
cat ubuntu\:12.04.tar | docker import test/ubuntu:2
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/ubuntu 2 42ee63485fbd About a minute ago 83.58 MB #此外,也可以通过指定 URL 或者某个目录来导入,例如
docker import http://example.com/exampleimage.tgz example/imagerepo
*注:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来
导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息
(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。 #删除容器
可以使用 docker rm 来删除一个处于终止状态的容器。 例如
docker rm trusting_newton
如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。

docker-day1-安装和基本使用的更多相关文章

  1. docker——容器安装tomcat

    写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...

  2. docker 启动安装等命令

    确认是否安装url whereis curl 启动docker服务: sudo service docker start sudo service docker stop 安装curl sudo ap ...

  3. Docker Day1 & 2

    1. Docker Basic 安装docker(在/etc/selinux/config文件中设置selinux=disabled,否则安装时会报错) curl -ssL http://get.do ...

  4. DOCKER windows安装

    DOCKER windows安装 1.下载程序包 2. 设置环境变量 3. 启动DOCKERT 4. 分析start.sh 5. 利用SSH工具管理 6. 下载镜像 6.1 下载地址 6.2 用FTP ...

  5. 在docker里面安装部署应用

    最近一直在做docker的安装打包工作,学到不少东西,在博客里记一下. 环境centos6 ,docker 基础镜象centos6 1.创建本地基础镜象,安装基础命令包 (1)Dockerfile,D ...

  6. Docker Centos安装Redis以及问题处理

    之前一篇文章 Redis安装及主从配置 介绍了redis的安装配置,另一篇文件介绍了 Docker Centos安装Openssh .今天将两篇文件结合一下——在Docker Centos环境下搭建r ...

  7. Docker Centos安装Mysql5.6

    之前一篇随笔<Docker Centos安装Openssh> 写的是如何在基础的centos镜像中搭建ssh服务,在此基础上再搭建其他服务.本文继续介绍在centos_ssh基础上搭建my ...

  8. Docker的安装及简单使用

    1.  Docker的安装 (这里的“安装docker”其实就是安装Docker Engine) $ sudo apt-get intasll docker.io note: apt-get是ubun ...

  9. docker 的安装

    官方站点上有各种环境下的 安装指南,这里主要介绍下Ubuntu和CentOS系列的安装. Ubuntu 系列安装 Docker 通过系统自带包安装 Ubuntu 14.04 版本号系统中已经自带了 D ...

  10. docker 17 安装

    docker17 安装 新增一键安装命令: curl -sSL https://get.docker.com/ | sh 以下为手动安装过程 翻译自 Get Docker for Ubuntu Doc ...

随机推荐

  1. css 之 BFC

    1,定义 BFC为块级格式化上下文,也就是一块区域内的封闭空间,里面元素无论怎么样,都不会影响外部元素. 2,触发条件 html 根元素 display的值为 inline-block.table-c ...

  2. 利用touchslide实现tab滑动切换

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  3. PHP的魔术常量(变量)、魔术方法(函数)、超全局变量

    https://www.cnblogs.com/ccw869476711/p/9183783.html 一.魔术常量(魔术变量) 概念:所谓的魔术常量就是PHP预定义的一些常量,这些常量会随着所在的位 ...

  4. HTTP security headers 安全头例子

    这是从以下网站测试得到的结果,参考测试项目可以知道哪些安全头应该如何设置. https://observatory.mozilla.org/analyze.html?host=appcanary.co ...

  5. 计算两个日期相差的天数 js php日期 减一年

    计算两个日期相差的天数 //sDate1和sDate2是yyyy-MM-dd格式 function dateDiff(sDate1, sDate2) { var aDate, oDate1, oDat ...

  6. postgresql数据库primary key约束/not null约束/unique约束及default值的添加与删除、列的新增/删除/重命名/数据类型的更改

    如果在建表时没有加primary key约束.not null约束.unique约束.default值,而是创建完表之后在某个字段添加的话 1.primary key约束的添加与删除 给red_pac ...

  7. ubuntu安装卸载软件

    sudo apt-get remove nagios3 #卸载软件 sudo apt-get autoremove #卸载依附软件包 rpm格式 安装:rpm -ivh *** 查看:rpm -q * ...

  8. HDU 1069—— Monkey and Banana——————【dp】

    Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  9. HDU 1754——I Hate It——————【线段树单点替换、区间求最大值】

    I Hate It Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit St ...

  10. js 中标签的增删 方法

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...