扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
CentOS7.0中一个最主要的改变,就是切换到了systemd。它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理。systemd兼容SysV和Linux标准组的启动脚本。Systemd是一个Linux操作系统下的系统和服务管理器。它被设计成向后兼容SysV启动脚本,并提供了大量的特性,如开机时平行启动系统服务,按需启动守护进程,支持系统状态快照,或者基于依赖的服务控制逻辑。先前的使用SysV初始化或Upstart的红帽企业版Linux版本中,使用位于/etc/rc.d/init.d/目录中的bash初始化脚本进行管理。而在RHEL7/CentOS7中,这些启动脚本被服务单元取代了。服务单元以.service文件扩展结束,提供了与初始化脚本同样的用途。要查看、启动、停止、重启、启用或者禁用系统服务,你要使用systemctl来代替旧的service命令。注:为了向后兼容,旧的service命令在CentOS7中仍然可用,它会重定向所有命令到新的systemctl工具。使用systemctl来启动/停止/重启服务要启动一个服务,你需要使用如下命令:#systemctlstarthttpd.service这会启动httpd服务,就我们而言,ApacheHTTP服务器。要停掉它,需要以root身份使用该命令:#systemctlstophttpd.service要重启,你可以使用restart选项,如果服务在运行中,它将重启服务;如果服务不在运行中,它将会启动。你也可以使用try-start选项,它只会在服务已经在运行中的时候重启服务。同时,reload选项你也可以有,它会重新加载配置文件。#systemctlrestarthttpd.service#systemctltry-restarthttpd.service#systemctlreloadhttpd.service我们例子中的命令看起来会像下面这样:检查服务状态要检查服务状态,你可以使用status选项,看这里:#systemctlstatushttpd.service输出结果就像这样:它会告诉你运行中的服务的方方面面。使用启用/禁用服务来控制开机启动你也可以使用enable/disable选项来控制一个服务是否开机启动,命令如下:#systemctlenablehttpd.service#systemctldisablehttpd.service
睢阳ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
将LXC安装到Ubuntu上
想在Ubuntu上使用LXC,就要安装LXC用户空间工具,如下所示。
$ sudo apt-get install lxc
安装完毕之后,运行lxc-checkconifg工具,检查当前Linux内核支持LXC的情况。要是一切都已被启用,内核对LXC的支持已准备就绪。
$ lxc-checkconfig
安装LXC工具后,你会发现,LXC的默认网桥接口(lxcbr0)已自动创建(已在/etc/lxc/default.conf中加以配置)。
创建LXC容器后,窗口的接口就会自动连接到该网桥,那样容器就能与外界进行联系了。
创建LXC容器
为了能够创建某个特定目标环境(比如Debian Wheezy 64位)的LXC容器,你就需要一个相应的LXC模板。幸运的是,Ubuntu上的LXC用户空间工具随带一系列预先准备好的LXC模板。你可以在/usr/share/lxc/templates目录下找到可用的LXC模板。
$ ls /usr/share/lxc/templates
LXC模板其实就是一段脚本而已,用来为某个特定的Linux环境创建容器。你在创建LXC容器时,需要用到这其中一个模板。
比如说,为了创建Ubuntu容器,使用下面这个命令行:
$ sudo lxc-create -n -t ubuntu
默认情况下,它会创建与本地主机同一版本号和同一架构的最小Ubuntu安装系统,这种情况下是Saucy Salamander(13.10)64位。
如果你希望,可以创建任何一种版本的Ubuntu容器,只要传递release参数。比如说,想创建Ubuntu 14.10容器:
$ sudo lxc-create -n -t ubuntu -- --release utopic
它会下载并验证目标容器环境需要的所有程序包。整个过程可能需要几分钟或更长时间,具体取决于容器类型。所以请耐心点。
经过一系列的程序包下载和验证后,LXC容器映像最终创建完毕,你会看到默认的登录资料可供使用。容器存储在/var/lib/lxc/container-name,根文件系统则位于/var/lib/lxc/container-name/rootfs。
LXC创建过程中下载的所有程序包则缓存在/var/cache/lxc里面,那样使用同样的LXC模板创建额外的容器就不用花时间了。
现在不妨看一下主机上的LXC容器列表:
$ sudo lxc-ls –fancy
NAME STATE IPV4 IPV6 AUTOSTART
------------------------------------
test-lxc STOPPED - - NO
想启动一个容器,请使用下面这个命令。“-d”选项将容器作为守护程序来启动。要是没有这个选项,你在启动容器后,会直接被连接到控制台。
$ sudo lxc-start -n -d
启动容器后,不妨再次检查容器状态:
$ sudo lxc-ls –fancy
NAME STATE IPV4 IPV6 AUTOSTART
-----------------------------------------
lxc RUNNING 10.0.3.55 - NO
你会看到,容器处于“RUNNING”(运行)状态,已被赋予了一个IP地址。
你还可以证实,容器的接口(比如vethJ06SFL)自动连接到LXC的内部网桥(lxcbr0),如下所示。
$ brctl show lxcbr0
管理LXC容器
既然我们已知道了如何创建及启动LXC容器,现在不妨看看我们可以如何处理运行中的容器。
首先,我们想要访问容器的控制台。为此,键入这个命令:
$ sudo lxc-console -n
键入Ctrl+a q组合键,退出控制台。
想停止和销毁容器:
$ sudo lxc-stop -n
$ sudo lxc-destroy -n
想把现有容器克隆成另一个容器,使用这些命令:
$ sudo lxc-stop -n
$ sudo lxc-clone -o -n
故障排查
如果你遇到了LXC方面的错误,下面是故障排查方面的几个要点。
1. 你无法创建LXC容器,出现下列错误。
$ sudo lxc-create -n test-lxc -t ubuntu
lxc-create: symbol lookup error: /usr/lib/x86_64-linux-gnu/liblxc.so.1: undefined symbol: cgmanager_get_pid_cgroup_abs_sync
这意味着你运行最新的LXC,却使用较旧的libcgmanager(libcg管理器)。想解决这个问题,你就需要更新libcg管理器。
$ sudo apt-get install libcgmanager0
虽说标准的硬件虚拟化技术(比如KVM、Xen或Hyper-V)擅长于在一个物理主机上运行多个操作系统的完全隔离的实例,但这种虚拟化技术在性能、资源和资源配置时间等方面存在各种各样的开销。标准的机器虚拟化实际上可能没有必要,这取决于你的实际使用场合。
另外一种轻型虚拟化方法就是所谓的Linux容器(LXC),它提供了操作系统级别的虚拟化。由于不存在运行虚拟机带来的开销,LXC让用户可以在轻型容器沙盒里面运行标准Linux操作系统的多个实例。如果你搭建一个可复制的开发/测试环境,或者在安全沙盒里面部署应用程序,容器就派得上大用场。
Docker就是为了便于部署Linux容器而开发的这样一款开源工具。Docker正迅速成为容器技术方面的一项事实上的标准,已经被诸如Ubuntu和红帽之类的各大Linux发行版所采用。
我在本教程中将演示如何在Ubuntu 14.04上,借助Docker管理Linux容器。请注意:对Ubuntu的早期版本而言,操作步骤可能略有不同。
眼下,Ubuntu上可用的Docker程序包只支持64位系统。想在32位机器上运行它,你就要利用源代码构建32位版本的Docker(详见这里)。
安装Docker
借助apt-get命令,安装Docker是件轻而易举的事。
$ sudo apt-get install docker.io
为了允许非根用户也可以运行Docker,将你自己添加到docker群组。下面这个命令会允许当前用户运行Docker,无需根用户权限。
$ sudo usermod -a -G docker $USER
退出,然后重新登录,以激活群组成员的变化。
下一步,编辑Docker配置文件,以便更新Docker二进制代码的位置。
$ sudo vi /etc/default/docker.io
DOCKER="/usr/bin/docker.io"
重启Docker服务。
$ sudo service docker.io restart
管理Docker容器
如果你想启动Ubuntu操作系统的一个新的Docker容器,首先需要获取Ubuntu Docker映像文件。下面这个命令会通过网络下载Docker映像文件。
$ docker pull ubuntu
你可以以一种交互模式来开启Ubuntu Docker,如下所示。最后一个参数“/bin/bash”是一旦启动就将在容器里面执行的命令,这里是一个简单的bash外壳命令。
$ docker run -i -t ubuntu /bin/bash
上述命令会立即启动一个Ubuntu容器(这正是容器的魅力所在!),并为你提供容器里面的外壳提示符。这时候,你应该能够访问沙盒环境里面的标准的Ubuntu操作系统了。
想退出Docker容器,在容器里面的提示符处键入“exit”。
你可以启动不同形式的容器。比如,想启动Fedora容器,请执行下面这个命令:
$ docker.io run -i -t fedora /bin/bash
如果本地没有Fedora Docker映像文件,该命令就会首先自动下载映像文件,然后启动Docker。
如果你想启动采用某个发行版版本的容器,也可以这么做。比如说,想启动Ubuntu 13.04 Docker,请执行下面这个命令:
$ docker.io run -i -t ubuntu:13.04 /bin/bash
容器网络
Docker使用Linux网桥将容器彼此互联起来,并将它们连接到外部网络。安装了Docker后,你应该会看到默认情况下自动组建的docker0 Linux网桥。你创建的每个容器都将连接到docker0网桥接口。
自定义Linux网桥
如果你想,也可以使用自定义Linux网桥将诸容器互联起来。为此,你可以建立一个自定义网桥,并对它进行配置,如下所示。你可以为该网桥分配一个单独的子网,并且从子网为Docker分配IP地址。我会使用10.0.0.0/24作为Docker子网。
$ sudo apt-get install bridge-utils
$ sudo brctl addbr br0
$ sudo ifconfig br0 10.0.0.1 netmask 255.255.255.0
想让Docker使用自定义网桥,将“-b=br0”添加到/etc/default/docker.io中的DOCKER_OPTS变量,然后重启Docker服务。
$ sudo service docker.io restart
至此,任何新的容器都会连接到br0,其IP地址会自动从10.0.0.0/24来分配。
其他定制
还有另外几种方法可以定制Docker的默认网络设置,主要是通过改动/etc/default/docker.io中的DOCKER_OPTS变量来实现。
“-dns 8.8.8.8 -dns 8.8.4.4”:指定容器使用的DNS服务器。
“-icc=false”:让诸容器彼此隔离开来。
故障排查
1. 运行docker.io命令时,你会遇到下面这个错误。
dial unix /var/run/docker.sock: no such file or directory(没有此类文件或目录)
出现这个错误,可能是由于Docker守护程序没在运行。检查Docker守护程序的状态,确保先启动它。
$ sudo service docker.io status
$ sudo service docker.io start
Docker container 容器介绍
容器操作
使用 docker 命令行操作 docker 容器
启动容器
core@localhost ~ $ docker run
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
-a, --attach=[] Attach to STDIN, STDOUT or STDERR.
-c, --cpu-shares=0 CPU shares (relative weight)
--cap-add=[] Add Linux capabilities
--cap-drop=[] Drop Linux capabilities
--cidfile="" Write the container ID to the file
--cpuset="" CPUs in which to allow execution (0-3, 0,1)
-d, --detach=false Detached mode: run container in the background and print new container ID
--device=[] Add a host device to the container (e.g. --device=/dev/sdc:/dev/xvdc)
--dns=[] Set custom DNS servers
--dns-search=[] Set custom DNS search domains
-e, --env=[] Set environment variables
--entrypoint="" Overwrite the default ENTRYPOINT of the image
--env-file=[] Read in a line delimited file of environment variables
--expose=[] Expose a port from the container without publishing it to your host
-h, --hostname="" Container host name
-i, --interactive=false Keep STDIN open even if not attached
--link=[] Add link to another container in the form of name:alias
--lxc-conf=[] (lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"
-m, --memory="" Memory limit (format: numberoptional unit, where unit = b, k, m or g)
--name="" Assign a name to the container
--net="bridge" Set the Network mode for the container
'bridge': creates a new network stack for the container on the docker bridge
'none': no networking for this container
'container:name|id': reuses another container network stack
'host': use the host network stack inside the container. Note: the host mode gives the container full access to local system services such as D-bus and is therefore considered insecure.
-P, --publish-all=false Publish all exposed ports to the host interfaces
-p, --publish=[] Publish a container's port to the host
format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort
(use 'docker port' to see the actual mapping)
--privileged=false Give extended privileges to this container
--restart="" Restart policy to apply when a container exits (no, on-failure, always)
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流