分类 docker 下的文章

不同版本Odoo共存一台阿里云ECS服务器上的方法笔记记录

今天玩一个大的:想在一台阿里云ECS上,同时运行odoo的多个版本,同时运行8.0、9.0、10.0、11.0、12.0,看看能不能行。
1、用docker来玩,基于Ubuntu 16 64-bit,安装最新版本docker:

更新一下:sudo apt-get update

2、让apt也能https:

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

3、添加Docker’s 官方的 GPG key:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4、按X86_64安装docker(ubuntu其他版本请参见docker官方安装文档https://docs.docker.com/install/linux/docker-ce/ubuntu):

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

刷新下:

sudo apt-get update

5、安装最新版docker:

sudo apt-get install docker-ce

6、试玩build个hello-world看看是否正常:

sudo docker run hello-world

7、获取Dockerfile及相关文件

git clone https://github.com/wdmsyf/docker.git

感谢【康虎云报表】群主的github分享和远程协助帮忙,加群交流:https://jq.qq.com/?_wv=1027&k=5jmI7Mc
进入odoo10目录:

cd 10.0

8、编译镜像

docker build --force-rm -t wdmsyf/odoo:10.0 .

9、创建容器

由于本镜像不含PostgreSQl,所以需要先创建一个PostgreSQL容器:

docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo --name odoo_db postgres:9.4

然后创建odoo容器,数据库则连接到刚才创建的PostgreSQL容器,8069端口映射到宿主机的8869,8071映射到宿主机的8871:

a、
使用镜像内官方的源代码和默认的配置文件:

docker run -d --name odoo10_wdmsyf -p 8869:8069 -p 8871:8071 --link odoo_db:db wdmsyf/odoo:10.0

c、
使用自定义配置文件和自定义odoo源代码(比如可以换成企业版),配置文件在宿主的路径可变,文件名不能变;源代码在宿主机的路径可变:

docker run -d --name odoo10_wdmsyf -p 8869:8069 -p 8871:8071 --link odoo_db:db -v ~/odoo_conf:/etc/odoo -v ~/odoo_src/odoo:/usr/lib/python2.7/dist-packages/odoo wdmsyf/odoo:10.0

阿里云ECS管理后台也要放行8869才能正常访问。

创建军哥的lnmp的docker镜像images记录如下

需要搭个开发环境就折腾了以下笔记:

1、命令:
docker pull ubuntu:14.04
用docker images可以看到pull回来的images镜像如下:

2、运行这个ubuntu 14并进到shell里:
docker run -i -t --name lnmp ubuntu:14.04 /bin/bash

然后按照lnmp.org的安装说明去安装即可。

3、本人这里修改了ubuntu 14的安装源改为cn的,默认是ubuntu.com的,vi用得不熟悉啊!批评自己了。

lnmpp安装:
wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz && tar zxf lnmp1.2-full.tar.gz && cd lnmp1.2-full && ./install.sh lnmp
如果速度很慢就ctrl+c中断,再更换速度快的源来安装lnmp如下:
wget -c https://api.sinas3.com/v1/SAE_lnmp/soft/lnmp1.2-full.tar.gz --no-check-certificate && tar zxf lnmp1.2-full.tar.gz && cd lnmp1.2-full && ./install.sh lnmp

-------------------
最新稳定版本:

LNMP 1.2

下载版:http://soft.vpser.net/lnmp/lnmp1.2.tar.gz (107KB)
MD5:4be72b49b67605477871d3f9676ca52f
完整版:http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz (312MB)
MD5:b3d3d9e40395f4eb5e525adfaabfb675
国内下载地址:
https://api.sinas3.com/v1/SAE_lnmp/soft/lnmp1.2-full.tar.gz 下载时wget需要加--no-check-certificate参数
http://static.suod.ga/lnmp/lnmp1.2-full.tar.gz
新加坡:http://oah.vpser.net/lnmp1.2-full.tar.gz
最后更新: 2015年7月24日17:34 GMT+8
-------------------
注:期间如果有需要退出按 Ctrl+P+Q,重新进入容器需要docker attach IMAGE ID
安装完成后退出按 Ctrl+P+Q,然后用commit命令制作images:
$ docker commit -m="lnmp" -a="liangjia" 104569b342fd liangjia/lnmp:v1
再docker images看看是否成功生成images了:
root@server:/home# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
liangjia/lnmp v1 cd02de77b52b About a minute ago 4.158 GB
成功!

最后用命令run启动这个images镜像:
$docker run -i -t --name liangjia_lnmp liangjia/lnmp:v1 /bin/bash

Docker网络架构详解

Docker网络架构详解
时间:2014-11-19 来源:服务器之家 投稿:root
Docker网络详解

网络基础

Docker使用linux桥接,在主机虚拟一个docker0网络接口,在主机中运行命令查看:

List host bridges

$ sudo brctl showbridge name bridge id STP enabled interfacesdocker0 8000.000000000000 no

Show docker0 IP address

$ sudo ifconfig docker0docker0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

 inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0

docker启动一个container时会会根据docker0的网段划分container的IP,docker0是每个container的网关。
自定义网络范围

尽管docker在使用linux brigde会找最合适的。但是有时候我们还是需要自己规划。
使用-b=<bridgename>参数设置

先关闭docker

$ sudo service docker stop

关闭网桥docker0# 添加自己的网桥bridge0

$ sudo ifconfig docker0 down
$ sudo brctl addbr bridge0
$ sudo ifconfig bridge0 192.168.227.1 netmask 255.255.255.0

向Docker startup file中添加启动自定义网桥参数

$ echo "DOCKER_OPTS="-b=bridge0"" >> /etc/default/docker

启动Docker

$ sudo service docker start

查看自定义网桥是否启动成功,ip等配置是否正确

$ sudo ifconfig bridge0
bridge0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

      inet addr:192.168.227.1  Bcast:192.168.227.255  Mask:255.255.255.0

启动container

docker run -i -t base /bin/bash

可以看到Container IP 在网段192.168.227/24内

root@261c272cd7d5:/# ifconfig eth0
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx

      inet addr:192.168.227.5  Bcast:192.168.227.255  Mask:255.255.255.0

bridge0 IP as the default gateway# 查看路由信息

root@261c272cd7d5:/# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.227.1 0.0.0.0 UG 0 0 0 eth0
192.168.227.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

hits CTRL+P then CTRL+Q to detach

查看网桥信息

$ sudo brctl show
bridge name bridge id STP enabled interfaces
bridge0 8000.fe7c2e0faebd no vethAQI2QT

container互通

docker默认是允许container互通,通过-icc=false关闭互通。
一旦关闭了互通,只能通过-link name:alias命令连接指定container.

container互相隔离的情况下,假设我们有一个webapp container,一个redis contianer需要互通。
先启动redis container:

sudo docker run -d --name redis crosbymichael/redis

再启动webapp并联通到redis

将redis取别名为dbsudo docker run -t -i --link redis:db --name webapp ubuntu bash

在webapp中可以看到db的网络信息:

$ root@4c01db0b339c:/# env

HOSTNAME=4c01db0b339c
DB_NAME=/webapp/db
TERM=xterm
DB_PORT=tcp://172.17.0.8:6379
DB_PORT_6379_TCP=tcp://172.17.0.8:6379
DB_PORT_6379_TCP_PROTO=tcp
DB_PORT_6379_TCP_ADDR=172.17.0.8
DB_PORT_6379_TCP_PORT=6379
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
SHLVL=1
HOME=/
container=lxc
_=/usr/bin/env
root@4c01db0b339c:/#

0.11版本以后,-- link redis:db的别名,会在/etc/hosts中生成对应的ip映射:

root@6541a75d44a0:/# cat /etc/hosts172.17.0.3 6541a75d44a0172.17.0.2 db

什么是vethxxxx

查看网桥信息

$ sudo brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.fe7c2e0faebd no vethAQI2QT

vethxxx是主机与container内部eth0相连的管道。详见ip link和namespaces infrastructure
更多

pipework可以创建各种复杂的containers互通的场景。详见here

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