Docker —— 用于统一开发和部署的轻量级 Linux 容器
本帖最后由 以谁为师 于 2015-3-31 09:29 编辑Docker 简介
Docker 是一个开源的应用容器引擎,可以自动化地部署应用到可移植的的容器中,这些容器独立于硬件、语言、框架、打包系统。一个标准的Docker容器包含一个软件组件及其所有的依赖 ——二进制文件,库,配置文件,脚本等等。Docker扩展了LXC,使用高层的API,提供轻量虚拟化解决方案来实现进程间隔离。可以运行在任何支持 cgroups跟AUFS 的 64位Linux内核上。
同时,Docker基于Go语言开发,代码托管在Github上,并遵循Apache 2.0开源协议。Docker容器可以封装任何有效负载,几乎可以在任何服务器之间进行一致性运行。换句话说,开发者构建的应用只需一次构建即可多平台运行。运营人员只需配置他们的服务,即可运行所有的应用。
Docker的常用案例包括:
自动打包和部署应用
创建轻量、私有的PaaS环境
自动化测试和持续集成/部署
部署并扩展Web应用、数据库和后端服务器
Docker 包括三个基本概念
镜像(Image)
容器(Container)
仓库(Repository)
安装docker
1.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 36A1D7869245C89
$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list
$ sudo apt-get update
$ sudo apt-get install lxc-docker
14.04 之前版本
$ 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
2.centos
对于 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 系统 CentOS-Extras 库中已带 Docker,可以直接安装:
$ sudo yum install docker
安装之后启动 Docker 服务。
service docker start
systemctl enabledocker
获取镜像
docker pull ubuntu:12.04
docker pull centos:7
查看镜像
#docker image
创建一个容器,让其中运行bash应用
#docker run -t -i ubuntu:12.04 /bin/bash
常用命令
查看容器的root用户密码
docker logs <容器名orID> 2>&1 | grep '^User: ' | tail -n1
因为docker容器启动时的root用户的密码是随机分配的。所以,通过这种方式就可以得到redmine容器的root用户的密码了。
查看容器日志
docker logs -f <容器名orID>
查看正在运行的容器
docker ps
docker ps -a为查看所有的容器,包括已经停止的。
删除所有容器
docker rm $(docker ps -a -q)
删除单个容器
docker rm <容器名orID>
停止、启动、杀死一个容器
docker stop <容器名orID>
docker start <容器名orID>
docker kill <容器名orID>
查看所有镜像
docker images
删除所有镜像
docker rmi $(docker images | grep none | awk '{print $3}' | sort -r)
运行一个新容器,同时为它命名、端口映射、文件夹映射。以redmine镜像为例
docker run --name redmine -p 9003:80 -p 9023:22 -d -v /var/redmine/files:/redmine/files -v /var/redmine/mysql:/var/lib/mysql sameersbn/redmine
一个容器连接到另一个容器
docker run -i -t --name sonar -d -link mmysql:db tpires/sonar-server
sonar
容器连接到mmysql容器,并将mmysql容器重命名为db。这样,sonar容器就可以使用db的相关的环境变量了。
拉取镜像
docker pull <镜像名:tag>
如
docker pull sameersbn/redmine:latest
当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。
机器a
docker save busybox-1 > /home/save.tar
使用scp将save.tar拷到机器b上,然后:
docker load < /home/save.tar
构建自己的镜像
docker build -t <镜像名> <Dockerfile路径>
如Dockerfile在当前路径:
docker build -t xx/gitlab .
重新查看container的stdout
# 启动top命令,后台运行
$ ID=$(sudo docker run -d ubuntu /usr/bin/top -b)
# 获取正在running的container的输出
$ sudo docker attach $ID
top - 02:05:52 up3:05,0 users,load average: 0.01, 0.02, 0.05
Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie
Cpu(s):0.1%us,0.2%sy,0.0%ni, 99.7%id,0.0%wa,0.0%hi,0.0%si,0.0%st
Mem: 373572k total, 355560k used, 18012k free, 27872k buffers
Swap: 786428k total, 0k used, 786428k free, 221740k cached
^C$
$ sudo docker stop $ID
后台运行(-d)、并暴露端口(-p)
docker run -d -p 127.0.0.1:33301:22 centos6-ssh
从container中拷贝文件出来
sudo docker cp 7bb0e258aefe:/etc/debian_version .
拷贝7bb0e258aefe中的/etc/debian_version到当前目录下。
注意:只要7bb0e258aefe没有被删除,文件命名空间就还在,可以放心的把exit状态的container的文件拷贝出来 相当于虚拟机? 支持中国红客联盟(ihonker.org) 还是不错的哦,顶了 感谢楼主的分享~ 支持中国红客联盟(ihonker.org) 支持,看起来不错呢! 还是不错的哦,顶了