2015年12月

如何通过docker容器安装LNMP服务器环境
时间:2014-11-17 来源:服务器之家 投稿:root
安装 系统环境

硬件型号: ThinkPad T520

系统版本: ubuntu 14.04

CPU: i7

RAM: 8G
添加软件源

由于Ubuntu源中的最先版本为0.9无法满足要求,所以需要使用Docker的官方源
添加密钥:
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80
--recv-keys \
36A1D7869245C8950F966E92D8576A8BA88D21E9
源地址: deb http://get.docker.io/ubuntu docker main
添加源可以通过"软件和更新->其它软件->添加"来操作
添加后执行如下命令:
$ sudo apt-get update
$ sudo apt-get install lxc-docker-1.1.1

注: 官方给出的源地址为https连接的,但是总是出现ssl验证失败的错误,最后改为非
ssl连接之后正常
测试

执行如下命令获取容器镜像,创建一个实例并打开一个实例shell
$ sudo docker run -t -i centos:latest /bin/bash

注:第一次运行由于需要下载镜像可能需要多等一会儿
运行成功后会有一个新的shell提示符
制作镜像 要求

web容器安装Nginx+PHP服务

数据库容器安装Mysql服务

web服务和数据库分离

web服务容器可以访问数据库容器
制作nginx+php镜像

启动一个容器实例:
$ sudo docker run -t -i centos:latest /bin/bash
安装nginx与PHP:
Nginx可以使用源码或rpm包进行安装,PHP可以使用源码或yum安装.具体安装和配置这里
不进行具体讲述.

注:需要把nginx与php-fpm添加到系统服务中并设置开机启动
我设置的站点根目录为/opt/web

退出shell并执行如下命令制作镜像:
$ sudo docker commit -m="web service image nginx+php" -a="username" \
sudo docker ps -lq username/web:v1

这是一个组合命令:
sudo docker commit根据已有实例制作镜像
sudo docker ps -lq返回最后一个运行的实例id
已有镜像可以使用sudo docker images 查看
至此创建了第一个镜像 username/web:v1
制作mysql镜像

启动实例:
$ sudo docker run -t -i centos:latest /bin/bash
安装Mysql.
设置Mysql服务开机启动:
$ chkconfig mysqld on
启动mysql.
修改mysql登陆权限:
mysql> grant all privileges on . to 'root'@'%'
identified by 'dbpasswd';
mysql> flush privileges;

mysql服务默认只能本地连接,制作镜像的时候需要注意.否则是无法连接到数据库的.

退出shell并执行如下命令制作mysql容器镜像:
$ sudo docker commit -m="mysql service image" -a="username" \
sudo docker ps -lq username/mysql:v1

清除不再需要的实例:
$ sudo docker rm sudo docker ps -aq
启动并关联实例

web实例依赖与mysql,所以先打开一个mysql实例:
$ sudo docker run -d --name db username/mysql:v1
/sbin/init

-d参数是让实例以dameon的形式运行. /sbin/init是创建实例后执行的操作,此处为初
始化系统服务,包括运行mysql.

启动web实例并与数据库实例进行关联:
$ sudo docker run -d --name web --link db:db -p 8080:80 -v /path/to/src:/opt/web username/web:v1 /sbin/init

--link参数设置关联的容器,可以设置多个.关联之后会自动更新web容器的host,把db
的地址指向到数据库容器的地址.
-p 参数用来进行ip映射.此处把容器的80端口映射到了本地的8080端口.web服务可是
通过localhost:8080访问.
-v 参数把数据挂载到容器指定目录.此处为把站点源码目录挂载到容器的站点目录.
在web容器中访问数据库容器的mysql服务可以使用db这个主机地址.

转载请注明原文地址:http://www.server110.com/docker/201411/11070.html

尝试一下Docker,这是最简短的“快速开始指南” 。

$ sudo docker pull ubuntu
$ sudo docker run -i -t ubuntu /bin/bash
$ sudo docker run -d -p ubuntu /bin/bash

其中docker run命令的参数解释:两个参数,一个是 -t ,表示给我们的容器tty,终端。一个是-i 表示可以interactive,可以交互。
-i --
-t
参数 -d 选项就是告诉docker,这个容器需要后台化。
-d
-p

现在你正在在Ubuntu Docker容器内运行一个bash shell,仅仅一个bash哦~

root@1728ffd1d47b:/# ps -ef

UID PID PPID C STIME TTY TIME CMD

root 1 0 0 13:42 ? 00:00:00 /bin/bash

root 8 1 0 13:43 ? 00:00:00 ps -ef

Docker的save和export命令的区别
时间:2014-11-28 来源:服务器之家 投稿:root

我最近在玩Docker,一种应用程序容器和Linux的虚拟技术。它太酷了,创建Docker镜像和容器只需要几分钟。所有的工作都是开箱即用的。

在结束我一天的工作之前,我希望能保存下我的工作。但我在Docker的save和export命令之间,我凌乱了。我不知道它们之间有什么区别。所以,我上StackOverflow问了一个问题,接着得到mbarthelemy很棒的回复。

开源项目Docker,Red Hat新的虚拟化选择

dockerlite: 轻量级 Linux 虚拟化

Docker的搭建Gitlab CI 全过程详解

Docker 和一个正常的虚拟机有何区别?

Docker 将改变所有事情

以下是我发掘到的内容:
Docker是如何工作的(简单说明)

Docker是基于镜像的。镜像类似于已经包含了文件、配置和安装好的程序的虚拟机镜像。同样的,你可以像启动虚拟机一样启动多个镜像实例。运行中的镜像称为容器。你可以修改容器(比如删除一个文件),但这些修改不会影响到镜像。不过,你使用docker commit 命令可以把一个正在运行的容器变成一个新的镜像。

举个例子:

像Docker官方的hello world例子一样,拉取一个叫busybox的镜像

sudo docker pull busybox

# 查看本地已经有哪些镜像
# 我们可以看到busybox
sudo docker images

# 现在让我们来修改下busybox镜像的容器
# 这次,我们创建一个文件夹
sudo docker run busybox mkdir /home/test

# 让我们再看看我们有哪些镜像了。
# 注意每条命令执行后容器都会停止
# 可以看到有一个busybox容器
sudo docker ps -a

# 现在,可以提交修改了。
# 提交后会看到一个新的镜像busybox-1
#  <CONTAINER ID> 是刚刚修改容器后得到的ID
sudo docker commit <CONTAINER ID> busybox-1

# 再看看我们有哪些镜像。
# 我们现在同时有busybox和busybox-1镜像了。
sudo docker images

# 我们执行以下命令,看看这两个镜像有什么不同
sudo docker run busybox [ -d /home/test ] && echo 'Directory found' || echo 'Directory not found'
sudo docker run busybox-1 [ -d /home/test ] && echo 'Directory found' || echo 'Directory not found'

现在,我们有两个不同的镜像了(busybox和busybox-1),还有一个通过修改busybox容器得来的容器(多了一个/home/test文件夹)。下面来看看,是如何持久化这些修改的。
导出(Export)

Export命令用于持久化容器(不是镜像)。所以,我们就需要通过以下方法得到容器ID:

sudo docker ps -a

接着执行导出:

sudo docker export > /home/export.tar

最后的结果是一个2.7MB大小的Tar文件(比使用save命令稍微小些)。

保存(Save)

Save命令用于持久化镜像(不是容器)。所以,我们就需要通过以下方法得到镜像名称:

sudo docker images

接着执行保存:

sudo docker save busybox-1 > /home/save.tar

最后的结果是一个2.8MB大小的Tar文件(比使用export命令稍微大些)。

它们之间的不同

现在我们创建了两个Tar文件,让我们来看看它们是什么。首先做一下小清理——把所有的容器和镜像都删除:

查看所有的容器

sudo docker ps -a



# 删除它们
sudo docker rm <CONTAINER ID>



# 查看所有的镜像
sudo docker images



# 删除它们
sudo docker rmi busybox-1
sudo docker rmi busybox






译注:可以使用 docker rm $(docker ps -q -a) 一次性删除所有的容器,docker rmi $(docker images -q) 一次性删除所有的镜像。

现在开始导入刚刚导出的容器:

导入export.tar文件

cat /home/export.tar | sudo docker import - busybox-1-export:latest



# 查看镜像
sudo docker images



# 检查是否导入成功,就是启动一个新容器,检查里面是否存在/home/test目录(是存在的)
sudo docker run busybox-1-export [ -d /home/test ] && echo 'Directory found' || echo 'Directory not found'


使用类似的步骤导入镜像:

导入save.tar文件

docker load < /home/save.tar



# 查看镜像
sudo docker images



# 检查是否导入成功,就是启动一个新容器,检查里面是否存在/home/test目录(是存在的)
sudo docker run busybox-1 [ -d /home/test ] && echo 'Directory found' || echo 'Directory not found'


那,它们之间到底存在什么不同呢?我们发现导出后的版本会比原来的版本稍微小一些。那是因为导出后,会丢失历史和元数据。执行下面的命令就知道了:

显示镜像的所有层(layer)

sudo docker images --tree


执行命令,显示下面的内容。正你看到的,导出后再导入(exported-imported)的镜像会丢失所有的历史,而保存后再加载(saveed-loaded)的镜像没有丢失历史和层(layer)。这意味着使用导出后再导入的方式,你将无法回滚到之前的层(layer),同时,使用保存后再加载的方式持久化整个镜像,就可以做到层回滚(可以执行docker tag 来回滚之前的层)。

vagrant@Ubuntu-13:~$ sudo docker images --tree

├─f502877df6a1 Virtual Size: 2.489 MB Tags: busybox-1-export:latest
└─511136ea3c5a Virtual Size: 0 B
  └─bf747efa0e2f Virtual Size: 0 B
    └─48e5f45168b9 Virtual Size: 2.489 MB
      └─769b9341d937 Virtual Size: 2.489 MB
        └─227516d93162 Virtual Size: 2.489 MB Tags: busybox-1:latest


转载请注明原文地址:http://www.server110.com/docker/201411/11213.html

Docker Dockerfile使用详解
时间:2014-11-19 来源:服务器之家 投稿:root
如何使用

Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。当前目录下包含Dockerfile,使用命令build来创建新的image,并命名为edwardsbean/centos6-jdk1.7:
docker build -t edwardsbean/centos6-jdk1. .
Dockerfile关键字

如何编写一个Dockerfile,格式如下:

CommentINSTRUCTION arguments

FROM

基于哪个镜像
RUN

安装软件用
MAINTAINER

镜像创建者
CMD

container启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD.

CMD主要用于container时启动指定的服务,当docker run command的命令匹配到CMD command时,会替换CMD执行的命令。如:
Dockerfile:
CMD echo hello world

运行一下试试:
edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd
hello world

一旦命令匹配:
edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd echo hello edwardsbean
hello edwardsbean
ENTRYPOINT

container启动时执行的命令,但是一个Dockerfile中只能有一条ENTRYPOINT命令,如果多条,则只执行最后一条

ENTRYPOINT没有CMD的可替换特性
USER

使用哪个用户跑container
如:
ENTRYPOINT ["memcached"]
USER daemon
EXPOSE

container内部服务开启的端口。主机上要用还得在启动container时,做host-container的端口映射:
docker run -d -p 127.0.0.1:33301: centos6-ssh

container ssh服务的22端口被映射到主机的33301端口
ENV

用来设置环境变量,比如:
ENV LANG en_US.UTF-
ENV LC_ALL en_US.UTF-
ADD

将文件拷贝到container的文件系统对应的路径
所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0
如果文件是可识别的压缩格式,则docker会帮忙解压缩

如果要ADD本地文件,则本地文件必须在 docker build ,指定的目录下

如果要ADD远程文件,则远程文件必须在 docker build ,指定的目录下。比如:
docker build github.com/creack/docker-firefox

docker-firefox目录下必须有Dockerfile和要ADD的文件

注意:使用docker build - <
somefile方式进行build,是不能直接将本地文件ADD到container中。只能ADD url file.

ADD只有在build镜像的时候运行一次,后面运行container的时候不会再重新加载了。
VOLUME

可以将本地文件夹或者其他container的文件夹挂载到container中。
WORKDIR

切换目录用,可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效
ONBUILD

ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行

转载请注明原文地址:http://www.server110.com/docker/201411/11101.html

Docker Pull Command

docker pull odoo

Tag Name Size

latest 268 MB
9 268 MB
9.0 268 MB
8 264 MB
8.0 264 MB

Full Description
Supported tags and respective Dockerfile links

8.0, 8 (8.0/Dockerfile)
9.0, 9, latest (9.0/Dockerfile)

For more information about this image and its history, please see the relevant manifest file (library/odoo). This image is updated via pull requests to the docker-library/official-images GitHub repo.

For detailed information about the virtual/transfer sizes and individual layers of each of the above supported tags, please see the odoo/tag-details.md file in the docker-library/docs GitHub repo.
What is Odoo?

Odoo, formerly known as OpenERP, is a suite of open-source business apps written in Python and released under the AGPL license. This suite of applications covers all business needs, from Website/Ecommerce down to manufacturing, inventory and accounting, all seamlessly integrated. It is the first time ever a software editor managed to reach such a functional coverage. Odoo is the most installed business software in the world. Odoo is used by 2.000.000 users worldwide ranging from very small companies (1 user) to very large ones (300 000 users).

www.odoo.com

How to use this image

This image requires a running PostgreSQL server.
Start a PostgreSQL server

$ docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo --name db postgres

Start an Odoo instance

$ docker run -p 127.0.0.1:8069:8069 --name odoo --link db:db -t odoo

The alias of the container running Postgres must be db for Odoo to be able to connect to the Postgres server.
Stop and restart an Odoo instance

$ docker stop odoo
$ docker start -a odoo

Stop and restart a PostgreSQL server

When a PostgreSQL server is restarted, the Odoo instances linked to that server must be restarted as well because the server address has changed and the link is thus broken.

Restarting a PostgreSQL server does not affect the created databases.
Run Odoo with a custom configuration

The default configuration file for the server (located at /etc/odoo/openerp-server.conf) can be overriden at startup using volumes. Suppose you have a custom configuration at /path/to/config/openerp-server.conf, then

$ docker run -v /path/to/config:/etc/odoo -p 127.0.0.1:8069:8069 --name odoo --link db:db -t odoo

Please use this configuration template to write your custom configuration as we already set some arguments for running Odoo inside a Docker container.

You can also directly specify Odoo arguments inline. Those arguments must be given after the keyword -- in the command-line, as follows

$ docker run -p 127.0.0.1:8069:8069 --name odoo --link db:db -t odoo -- --db-filter=odoo_db_.*

Mount custom addons

You can mount your own Odoo addons within the Odoo container, at /mnt/extra-addons

$ docker run -v /path/to/addons:/mnt/extra-addons -p 127.0.0.1:8069:8069 --name odoo --link db:db -t odoo

Run multiple Odoo instances

$ docker run -p 127.0.0.1:8070:8069 --name odoo2 --link db:db -t odoo
$ docker run -p 127.0.0.1:8071:8069 --name odoo3 --link db:db -t odoo

Please note that for plain use of mails and reports functionalities, when the host and container ports differ (e.g. 8070 and 8069), one has to set, in Odoo, Settings->Parameters->System Parameters (requires technical features), web.base.url to the container port (e.g. 127.0.0.1:8069).
How to upgrade this image

Suppose you created a database from an Odoo instance named old-odoo, and you want to access this database from a new Odoo instance named new-odoo, e.g. because you've just downloaded a newer Odoo image.

By default, Odoo 8.0 uses a filestore (located at /var/lib/odoo/filestore/) for attachments. You should restore this filestore in your new Odoo instance by running

$ docker run --volumes-from old-odoo -p 127.0.0.1:8070:8069 --name new-odoo --link db:db -t odoo

You can also simply prevent Odoo from using the filestore by setting the system parameter ir_attachment.location to db-storage in Settings->Parameters->System Parameters (requires technical features).
License

View license information for the software contained in this image.
Supported Docker versions

This image is officially supported on Docker version 1.9.1.

Support for older versions (down to 1.6) is provided on a best-effort basis.

Please see the Docker installation documentation for details on how to upgrade your Docker daemon.
User Feedback Documentation

Documentation for this image is stored in the odoo/ directory of the docker-library/docs GitHub repo. Be sure to familiarize yourself with the repository's README.md file before attempting a pull request.
Issues

If you have any problems with or questions about this image, please contact us through a GitHub issue.

You can also reach many of the official image maintainers via the #docker-library IRC channel on Freenode.
Contributing

You are invited to contribute new features, fixes, or updates, large or small; we are always thrilled to receive pull requests, and do our best to process them as fast as we can.

Before you start to code, we recommend discussing your plans through a GitHub issue, especially for more ambitious contributions. This gives other contributors a chance to point you in the right direction, give you feedback on your design, and help you find out if someone else is working on the same thing.

思路是修改ubuntu系统存储挂载,如下:
Docker的镜像以及一些数据都是在/var/lib/docker目录下,它占用的是Linux的系统分区,也就是下面的/dev/vda1,当有多个镜像时,/dev/vda1的空间可能不足,我们可以把docker的数据挂载到数据盘,例如:/dev/vdb目录下。
[root@10-10-63-106 docker]# df -lhT
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 xfs 20G 3.8G 16G 20% /
devtmpfs devtmpfs 916M 0 916M 0% /dev
tmpfs tmpfs 921M 0 921M 0% /dev/shm
tmpfs tmpfs 921M 43M 878M 5% /run
tmpfs tmpfs 921M 0 921M 0% /sys/fs/cgroup
/dev/vdb xfs 100G 11G 90G 11% /data

     其中主要的步骤如下:

(1) 首先,备份fstab文件
sudo cp /etc/fstab /etc/fstab.$(date +%Y-%m-%d)
(2) 停止docker, 用rsync同步/var/lib/docker到新位置.

    如果rsync没有安装,则使用yum -y intall rsync 进行安装,停止docker ,service docker stop,在数据分区中建立要挂载的目录,mkdir /data/docker 使用rsync工具同步,rsync -aXS /var/lib/docker/.  /data/docker/,这可能需要花费的较长的时间,取决于/var/lib/docker的大小,

(3) 修改fstab
在该文件中把下面一行添加到fstab里,将新位置挂载到 /var/lib/docker
/data/docker /var/lib/docker none bind 0 0
文件的内如如下:
[root@10-10-63-106 docker]# cat /etc/fstab

/etc/fstab

Created by anaconda on Thu Jul 31 07:50:13 2014

Accessible filesystems, by reference, are maintained under '/dev/disk'

See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

/dev/vda1 / xfs errors=remount-ro 0 1
/swapfile none swap defaults 0 0
/dev/vdb /data xfs defaults,noatime 0 0
/data/docker /var/lib/docker none bind 0 0
(4) 重新挂载
mount –a
(5) 使用下面的命令检查一下
df /var/lib/docker/
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vdb 104806400 47204 104759196 1% /var/lib/docker
(6)进入Container查看我们的空间
bash-4.1# df -lhT
Filesystem Type Size Used Avail Use% Mounted on
rootfs rootfs 9.8G 1.4G 7.9G 15% /
tmpfs tmpfs 921M 0 921M 0% /dev
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/vdb xfs 100G 2.1G 98G 3% /etc/resolv.conf
/dev/vdb xfs 100G 2.1G 98G 3% /etc/hostname
/dev/vdb xfs 100G 2.1G 98G 3% /etc/hosts
tmpfs tmpfs 921M 0 921M 0% /run/secrets
tmpfs tmpfs 921M 0 921M 0% /proc/kcore
没有更改/var/lib/docker路径之前的情况:
bash-4.1# df -lhT
Filesystem Type Size Used Avail Use% Mounted on
rootfs rootfs 9.8G 1.4G 7.9G 15% /
tmpfs tmpfs 921M 0 921M 0% /dev
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/vda1 xfs 20G 13G 6.9G 66% /etc/resolv.conf
/dev/vda1 xfs 20G 13G 6.9G 66% /etc/hostname
/dev/vda1 xfs 20G 13G 6.9G 66% /etc/hosts
tmpfs tmpfs 921M 0 921M 0% /run/secrets
tmpfs tmpfs 921M 0 921M 0% /proc/kcore
宿主机中的分区大小信息:
[root@10-10-63-106 ~]# df -lhT
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 xfs 20G 13G 6.9G 65% /
devtmpfs devtmpfs 916M 0 916M 0% /dev
tmpfs tmpfs 921M 0 921M 0% /dev/shm
tmpfs tmpfs 921M 89M 832M 10% /run
tmpfs tmpfs 921M 0 921M 0% /sys/fs/cgroup
/dev/vdb xfs 100G 33M 100G 1% /data