集群智慧-服务就是好,有事电话:400-6543-646

我的网站

Docker实践篇:来一场说走就走的Docker之旅

时间:2017-02-23 07:58来源: 作者: 点击:
Docker实践篇:来一场说走就走的Docker之旅 ,深信服社区
本帖最后由 规划经理 于 2016-5-16 18:22 编辑

Docker实践篇:来一场说走就走的Docker之旅

延伸阅读:                                                                     Docker基础篇:Docker是神马? Docker基础篇:图解微服务,程序员友谊不翻船 Docker应用篇:Docker应用案例之搭建wordpressDocker应用篇:聊聊Docker容器的应用场景

上一篇我们已经对“docker是神马”做了一些基本的介绍,Docker的神奇大家都get到了吗?是否有股跃跃欲的冲动了呢?为避免大家觉得Docker仍是飘在空中看不见模不着的大神,这一篇就让我们脚踏实地,看看到底要肿么用起来吧!
1...2...3,GO!!!
基本概念开始之前,我们先来了解一下上一篇已经提到过的几个Docker基本概念:镜像:我们可以理解为一个预配置的系统光盘,这个光盘插入电脑后就可以启动一个操作系统。当然由于是光盘,所以你无法修改它或者保存数据,每次重启都是一个原样全新的系统。Docker里面镜像基本上和这个差不多。容器:同样一个镜像,我们可以同时启动运行多个,运行期间的产生的这个实例就是容器。把容器内的操作和启动它的镜像进行合并,就可以产生一个新的镜像。仓库:仓库是集中存放镜像文件的场所,仓库注册服务器(Registry)上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。目前,最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。
运行环境Docker目前已经支持非常多的Linux平台,Ubuntu、Red Hat企业版Linux、Debian、CentOs、Fedora、Oracle Linux等。如果使用虚拟环境,甚至可以在OS X 和 windows中运行。linux内核版本建议在3.8及以上本文以ubuntu14.04为例简单做下说明。另外,实验环境需确保可访问公网。
安装方法curl -sSL https://get.docker.com/ | sh
Docker仓库Docker使用基本的镜像可以定制创建出来不同种应用的Docker镜像。Docker Hub是Docker官方提供的镜像中心。在这里可以很方便地找到各类应用、环境的镜像。docker pull ubuntu    #从公有仓库上拉取镜像通过上述命令,我们很容易就能从Docker Hub镜像注册中心下载一个最新版本的ubuntu镜像到本地。
运行一个容器以ubuntu为例,我们启动一个新容器,并将ubuntu的Shell作为入口:root@ubuntu-132:/home/wlb# docker run -it ubuntu:latest sh -c '/bin/bash'root@95374bb36046:/# lsbinbootdevetchomeliblib64mediamntoptprocrootrunsbinsrvsystmpusrvar
这时候我们成功创建了一个Ubuntu的容器,并将当前终端连接为这个Ubuntu的bash shell。这时候就可以愉快地使用Ubuntu的相关命令了~可以快速体验一下。参数-i表示这是一个交互容器,会把当前标准输入重定向到容器的标准输入中,而不是终止程序运行。-t指为这个容器分配一个终端。按Ctrl+D可以退出这个容器。在容器运行期间,我们可以通过docker ps命令看到所有当前正在运行的容器。添加-a参数可以看到所有创建的容器:# docker ps -aCONTAINER ID      IMAGE                              COMMAND             CREATED             STATUS            PORTS               NAMESa9e9320df1b1      ubuntu:latest                        "/bin/bash"         36 minutes ago      Up 36 minutes      test
每个容器都有一个唯一的ID标识,通过ID可以对这个容器进行管理和操作。在创建容器时,我们可以通过--name参数指定一个容器名称。注意:每次执行docker run命令都会创建新的容器,建议一次创建后,使用docker start/stop来启动和停用容器。
存储在Docker容器运行期间,对文件系统的所有修改都会以增量的方式反映在容器使用的联合文件系统中,并不是真正的对只读层数据信息修改。每次运行 容器对它的修改,都可以理解成对夹心饼干又添加了一层奶油。这层奶油仅供当前容器使用。当删除Docker容器,或通过该镜像重新启动时,之前的更改将会 丢失。这样做并不便于我们持久化和共享数据。Docker的数据卷这个东西可以帮到我们。在创建容器时,通过-v参数可以指定将容器内的某个目录作为数据卷加载:格式:docker run -it -v : host_dir是主机的目录,container_dir是容器的目录。
docker run -it -v /home/docker:/home/www ubuntu:latest sh -c '/bin/bash' 在容器中会多一个/home/www挂载点,在这个挂载点存储数据会绕过联合文件系统。容器和容器之间是可以共享数据卷的,我们可以单独创建一些容器,存放如数据库持久化存储、配置文件一类的东西,然而这些容器并不需要运行。
docker run --name dbdata ubuntu echo "Data container."在需要使用这个数据容器的容器创建时--volumes-from [容器名的方式来使用这个数据共享容器。
网络Docker容器内的系统工作起来就像是一个虚拟机,容器内开放的端口并不会真正开放在主机上。可以使我们的容器更加安全,而且不会产生容器间端口的争用。想要将Docker容器的端口开放到主机上,可以使用类似端口映射的方式。在Docker容器创建时,通过指定-p参数可以暴露容器的端口在主机上,可以通过-p [主机端口]:[容器端口参数指定:docker run -it -p 22345:22 ubuntu sh -c '/bin/bash'
容器和容器之间想要网络通讯,可以直接使用--link参数将两个容器连接起来。例如WordPress容器对some-mysql的连接:docker run --name some-wordpress --link some-mysql:mysql -p 8080:80 -d wordpress
环境变量通过Docker打包的应用,对外就像是一个密闭的exe可执行文件。有时候我们希望Docker能够使用一些外部的参数来使用容器,这时候参数可以通过环境变量传递进去,通常情况下用来传递比如MySQL数据库连接这种的东西。环境变量通过-e参数向容器传递:docker run --name some-wordpress -e WORDPRESS_DB_HOST=10.1.2.3:3306 \      -e WORDPRESS_DB_USER=... -e WORDPRESS_DB_PASSWORD=... -d wordpress
结束语到这里,大家是否找到了真实感呢?快去动手试一试吧~当然,以上都还只是基础,集群、弹性伸缩...都还木有涉及咧@_@
很大一部分小伙伴也许抓头发开吼:oh, NO!别让我敲代码,别让我敲代码,别让我敲代码!!作为最理解大家的信服君笑而不语,大家觉得他会怎么帮大家呢?或者你需要什么样的帮助,大可跟帖吼出来哈~
这里说下我们Docker系列的分享思路,预计分三个系列Docker基础篇:主要分享docker的一些理论知识,理解Docker以便更好的应用Docker实践篇:以实战为主,带大家一起来做使用、测试Docker应用篇:以分享应用场景、趋势为主,带大家使用docker改造自身业务为避免纯理论偏枯燥,会交替穿插一些实践或应用篇你怎么看呢? 如果有好的建议也欢迎跟帖哦~

北回归线 发表于 2016-3-31 13:20

又深入了一些,不过还得去搞Ubuntu来玩,看完以后有些这样的问题不解,求解答:
1、创建一个容器用来做数据卷,容器不运行怎么实例化?
2、Docker容器的端口开放到主机上,这个主机是指哪个?

andy_AAAAA 发表于 2016-3-31 15:30

安装虚机开启疯玩模式

adds 发表于 2016-3-31 21:05

对Linux服务器不太熟悉的小伙伴估计会看的有点儿晕,但文章写的确实很好,有理有据,看来要学好Docker要恶补Linux了。

woshishui 发表于 2016-4-1 14:44

CentOS 升级内核:我的不是3.+的要升级
uname -r
2.6.32-504.23.4.el6.x86_64
在yum的ELRepo源中,有 m ain l ine(3.13.1)、 l ong- t erm(3.10.28)这2个内核版本,考虑到long-term更稳定,会长期更新,所以选择这个版本。

1、导入public key

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
2、安装ELRepo到CentOS-6.5中

rpm -ivh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
3、安装 kernel-lt(lt=long-term)

yum --enablerepo=elrepo-kernel install kernel-lt -y
或者安装kernel-ml(ml=mainline)

yum --enablerepo=elrepo-kernel install kernel-ml -y
4、编辑grub.conf文件,修改Grub引导顺序

vim /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:You do not have a /boot partition.This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,0)
#          kernel /boot/vmlinuz-version ro root=/dev/sda1
#          initrd /boot/initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (3.10.28-1.el6.elrepo.x86_64)
      root (hd0,0)
      kernel /boot/vmlinuz-3.10.28-1.el6.elrepo.x86_64 ro root=UUID=0a05411f-16f2-4d69-beb0-2db4cefd3613 rd_NO_LUKSKEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=en_US.UTF-8
rd_NO_LVM rd_NO_DM rhgb quiet
      initrd /boot/initramfs-3.10.28-1.el6.elrepo.x86_64.img
title CentOS (2.6.32-431.3.1.el6.x86_64)
      root (hd0,0)
      kernel /boot/vmlinuz-2.6.32-431.3.1.el6.x86_64 ro root=UUID=0a05411f-16f2-4d69-beb0-2db4cefd3613 rd_NO_LUKSKEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=en_US.UTF-8 r
d_NO_LVM rd_NO_DM rhgb quiet
      initrd /boot/initramfs-2.6.32-431.3.1.el6.x86_64.img
title CentOS (2.6.32-431.el6.x86_64)
      root (hd0,0)
      kernel /boot/vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=0a05411f-16f2-4d69-beb0-2db4cefd3613 rd_NO_LUKSKEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO
_LVM rd_NO_DM rhgb quiet
      initrd /boot/initramfs-2.6.32-431.el6.x86_64.img
确认刚安装好的内核在哪个位置,然后设置default值(从0开始),一般新安装的内核在第一个位置,所以设置default=0。

5、重启,查看内核版本号

# uname -r
3.10.28-1.el6.elrepo.x86_64

woshishui 发表于 2016-4-1 16:53

感谢分享,虽然不能全部试验一遍,但是还是收获颇丰,期待楼主下一次分享

一三五七九 发表于 2016-4-4 22:01

Mark,期待后续连载:lol

修业时代朱 发表于 2016-4-11 08:30

恶补了一段时间的Linux,期待楼主的后续连载!

规划经理 发表于 2016-4-15 19:46

新增分享,欢迎围观

Docker基础篇:图解微服务,程序员友谊不翻船
Docker应用篇:Docker应用案例之搭建wordpress
------分隔线----------------------------