1. 什么是Docker?
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。
镜像:Docker 镜像就是一个只读的模板,一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。
容器:容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
仓库:仓库是集中存放镜像文件的场,仓库分为公开仓库(Public)和私有仓库(Private)两种形式,类似gitHub.
参考文档:http://dockerpool.com/static/books/docker_practice/container/import_export.html
2. 安装Docker(Centos)
#CentOS6中:
$ sudo yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
$ sudo yum install docker-io
#CentOS7
$ sudo yum install docker
#启动
$ sudo service docker start
$ sudo chkconfig docker on
3. 获取镜像
$ sudo docker pull centos:php5.4 # pull后面是镜像名称
$ sudo docker images # 列出全部镜像
# 删除镜像 rmi后面是镜像名称是REPOSITORY列(容器全部删除后,才能删除)
$ sudo docker rmi centos:php5.4
$ sudo docker rmi $(docker images -q) # 删除全部镜像
$ sudo docker commit 4d06d83fa1bd centos:php5.4 #将容器快照[CONTAINER ID]提交成镜像
$ sudo docker save -o centos-php5.4.tar centos:php5.4 #打包镜像
$ sudo docker load < centos-php5.4.tar # 载入镜像
$ sudo docker export 7691a814370e > centos-php5.4.tar #将容器导出 export后面是 [CONTAINER ID]
$ cat centos-php5.4.tar | sudo docker import – centos:php5.4 #导入到镜像中
4. 启动容器
$ sudo docker run centos:php5.4 /bin/echo ‘Hello world’ #简单的启动
$ sudo docker run -t -i centos:php5.4 /bin/bash #启动后进入Docker
$ sudo docker run -d -i centos:php5.4 /bin/bash #直接后台启动Docker
$ sudo docker start conname #启动已终止容器 conname是容器名称
$ sudo docker stop conname #关闭容器
$ sudo docker ps –a #列出全部容器
$ sudo docker rm conname #删除容器(关闭后才能删除)
$ sudo docker rm `docker ps -a -q` #删除全部容器
$ sudo docker run –name myhost -d -i -p 80:80 –v /var/www/html:/var/www/html centos:php5.4 /bin/bash
# –name: 容器的名称
# -p 本地端口:映射docker端口可以有多个
# -v 本地路径:映射docker路径可以有多个
# php5.4 镜像名称
# /bin/bash 容器启动后要执行的命令/bin/bash
$ sudo docker run –name myhost -d -i -p 80:80 –v /var/www/html:/var/www/html centos:php5.4 /etc/rc.local
# /etc/rc.local 容器初始化脚本
# 容器中 vi /etc/rc.local
# /sbin/httpd
# ………..
# /bin/bash (一定要放在最后执行,不知道为什么)
$ sudo docker commit 4d06d83fa1bd centos:php5.4 #将容器快照[CONTAINER ID]提交成镜像
#全部删除
$ docker kill $(docker ps -q);docker rm $(docker ps -a -q);docker rmi $(docker images -q -a)
#进入容器->配置完成->快照提交镜像->打包镜像
$ docker attach conname
5. docker中使用ssh
$ sudo docker run -i -t centos /bin/bash
# 在Docket容器中
$ sudo yum -y install openssh-server
$ vi /etc/sshd/sshd_config
#
# PermitRootLogin yes
# UsePAM no
#
# 映射端口(使用容器ID,可以启动后进行配置)
$ sudo docker run -d -p 50001:22 <容器id> /usr/sbin/sshd-D
$ ssh root@127.0.0.1 -p 50001 #exit退出容器,但后台还会运行
一键安装Docker图形化管理界面-Shipyard
Shipyard是一款开源的图形化的Docker管理工具,记得以前安装很麻烦的,现在官方有了自动安装脚本,使用非常方便。复制、粘贴、使用,就这么简单。先不研究他是如何实现的,安装使用起来再说。
$ curl -s https://shipyard-project.com/deploy | bash -s
Deploying Shipyard
-> Starting Database
-> Starting Discovery
-> Starting Cert Volume
-> Starting Proxy
-> Starting Swarm Manager
-> Starting Swarm Agent
-> Starting Controller
Waiting for Shipyard on 192.168.2.xxx:8080
..
Shipyard available at http://192.168.2.xxx:8080
Username: admin Password: shipyard
Shipyard 启用了7个容器,默认访问端口是8080,默认用户名和密码是admin 和 shipyard
注意事项:
如果安装出现了问题怎么办?是否是因为端口冲突?网络出现问题怎么办?这个项目用到了哪些docker镜像?一键安装的脚本是如何实现的?
1、Shipyard的默认访问端口为8080,这个端口许多程序都会用,使用时尽量要避免冲突。如果你在测试机器上安装过多款软件,然后再安装Shipyard时,却发现无法访问Shipyard,可以考虑一下,是不是因为端口被其他程序占用的问题。
2、由于网络的原因,因此第一次执行时可能不会很顺利,镜像可能未下载全,又或者端口冲突,导致无法通过8080端口访问shipyard页面。查看主机发现其中有几个Shipyard容器已经运行了,怎么办?不妨先使用 docker ps -a 命令,查看一下正在进行的容器情况,然后用docker stop xxx 把7个shipyard开头的容器都停止掉、最后再用docker rm xxx 把上一次安装出现问题的容器都删除掉,最后再次执行curl这一行命令。
3、比较稳妥的方法是先下载这七个Docker镜像,然后再运行这一行。其中rethinkdb 181MB,shipyard/shipyard 58MB,七个一共300MB。
docker pull alpine
docker pull swarm
docker pull shipyard/shipyard
docker pull rethinkdb
docker pull microbox/etcd
docker pull ehazlett/curl
docker pull shipyard/docker-proxy
4、如果访问不了,请检查你使用的浏览器,记得使用谷歌的chrome浏览器。
5、安装Shipyard 的脚本地址: https://shipyard-project.com/deploy,有兴趣的可以看一看如何部署一个小型的容器应用。