学习中,记录了一些docker 相关的命令:
创建容器
docker run -d --name test1 busybox /bin/sh -c 'while true; do sleep 3600; done'
交互式进入容器
docker exec -it df61ea7da8ce /bin/sh
执行容器环境指令
docker exec e465753a90aa ip a
network namespace
查看
ip netns list
删除
sudo ip netns delete xxx
新建
sudo ip netns add test1
sudo ip netns add test2
在名称为test1 的network namespace 中执行 ip a,查看ip
sudo ip netns exec test1 ip a
在名称为test1 的network namespace 中执行 ip link,查看链接接口
sudo ip netns exec test1 ip link
启动接口,lo 为回环口的标识
默认只有一个loopback 回环口,初始状态为DOWN
但如果没有veth pair 链接,状态将变为 UNKNOW
sudo ip netns exec test1 ip link set dev lo up
sudo ip netns exec test2 ip link set dev lo up
创建veth pair,以实现将两个network namespace 链接起来
sudo ip link add veth-test1 type veth peer name veth-test2
将veth-test1 接口添加到 test1
sudo ip link set veth-test1 netns test1
sudo ip link set veth-test2 netns test2
至此,test1、test2 没有自己的ip 地址
在test1 中执行添加ip 操作
sudo ip netns exec test1 ip addr add 192.168.1.1/24 dev veth-test1
sudo ip netns exec test2 ip addr add 192.168.1.2/24 dev veth-test2
(在test1 中执行命令:在dev veth-test1 接口上添加ip 地址xxx.xxx.xxx.xxx 掩码24)
将接口up 起来
sudo ip netns exec test1 ip link set dev veth-test1 up
sudo ip netns exec test2 ip link set dev veth-test2 up
至此,在分别执行 ip a 即可查看到各自的ip
sudo ip netns exec test1 ip a
sudo ip netns exec test2 ip a
并且可以相互ping 通
sudo ip netns exec test1 ping 192.168.1.2
sudo ip netns exec test2 ping 192.168.1.1
docker network
查看docker 网络
docker network ls
上述指令会列出docker 的网络,其中包含id、driver 等信息
执行如下指令:
sudo docker network inspect [networkid]
可以查看网络连接的容器信息。
除此之外,还可以借助bridge-utils 工具查看,docker 的容器是如何和宿主机的网络相连的,
sudo yum install bridge-utils
查看网络的接口连接信息:
brctl show
docker link
在创建容器test2 时,可以添加link 参数:
docker run -d --name test2 --link test1 busybox /bin/sh -c 'while true; do sleep 3600; done'
这样创建的容器,就可以直接通过名称访问另一个容器,如下是可以ping 通的:
docker exec -it test2 ping test1
相反,test1 通过名称 ping test2 则不通。
docker bridge
docker 容器默认连接的是 bridge network;我们也可以自己创建bridge
docker network create -d bridge my-bridge
然后新建容器,通过参数network 指定新创建的网络,即my-bridge
docker run -d --name test3 --network my-bridge busybox /bin/sh -c 'while true; do sleep 3600; done'
更新已创建容器网络连接到my-bridge
docker network connect my-bridge test2
(此命令依然保留原有网络的链接)
执行到这一步,test3 是可以ping 通test2 的,
docker exec -it test3 /bin/sh
ping test2
问题?这里没有通过 --link 其他容器,为何通过名称也可以ping 通
回答:test2 和test3 都连接到了用户自定义的bridge 上,则默认是link 好的。
(通过名称无法ping,查看下 /etc/resolv.conf)
flask-redis
python 环境可能需要更换下yum 源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安装wget
sudo yum -y install wget
yum -y install setup
yum -y install perl
安装pip
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip -V
开始:
docker run -d --name redis redis
docker run -d -p 5000:5000 --link redis --name flask-redis -e REDIS_HOST=redis yuezhichao/flask-redis
flask-skeleton
docker run -d -p 80:5000 -v $(pwd):/skeleton --name flask yuezhichao/flask-skeleton
wordpress
启动mysql
docker run -d --name mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql
启动wordpress
docker run -d -e WORDPRESS_DB_HOST=mysql:3306 --link mysql -p 8080:80 wordpress
(待更新…)