基於centos7安裝docker不需要使用amaza的repo,直接就可使用shell命令:
1.安裝docker: yum install docker-io -y
(ps:在centos6.5上可能會出現這樣的錯誤:
warn[0000] you are running linux kernel version 2.6.32-431.el6.x86_64, which might be unstable running docker. please upgrade your kernel to 3.8.0.
2.建立dockerfile,內容如下:
# 選擇乙個已有的os映象作為基礎,由於為做ambari進行hdp進行公升級,這裡我選用了centos6的環境作為容器環境;
from centos:centos6
# 映象的作者
maintainer moxuqiang "[email protected]"
# 安裝openssh-server和sudo軟體包,並且將sshd的usepam引數設定成no
run yum install -y openssh-server sudo
run sed -i 's/usepam yes/usepam no/g' /etc/ssh/sshd_config
# 新增測試使用者admin,密碼admin,並且將此使用者新增到sudoers裡
run useradd admin
run echo
"admin:admin" | chpasswd
run echo
"admin all=(all) all" >> /etc/sudoers
# 下面這兩句比較特殊,在centos6上必須要有,否則建立出來的容器sshd不能登入
run ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
run ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# 啟動sshd服務並且暴露22埠
run mkdir /var/run/sshd
expose 22
cmd ["/usr/sbin/sshd", "-d"]
建立image: docker build -t centos6-ssh .
其中centos6-ssh是上面建立創映象的名稱,.表示dockerfile路徑;
docker在建立容器的時候,如果不指定其網路格式,那麼將預設使用橋接模式,但這種模式無法固定容器的ip位址,docker容器有四種網格模式,分別為:bridge,host,container,none;建立固定ip的容器必須使用none的模式;建立容器命令
docker run -itd
--net=
none
--privileged=
true
-v /home/docker/centos_1:/usr/hdp -v /home/docker/data/centos_1:/datas --hostname=hdp1.urun --name=centos_1 centos6-ssh
–privileged=true:這是因為在centos7才需要特別設定的,否則會出現掛載目無許可權訪問的情況;
-v: 從上面可以看到容器掛載了兩個目錄,也就是說掛載兩個目錄必須用兩個-v來宣告;
–hostname:宣告容器主機名稱;
–name:宣告容器名稱;
建立完容器後,為容器分配固定ip,使用如下指令碼:
#!/bin/bash
resetip
()}'
$container_name
2> /dev/null`
if [ ! $container_id ];then
echo
"容器不存在"
exit2fi
bind_ip=`echo
$bind_ip | egrep '^(([0-9]|[1-9][0-9]|1[0-9]|2[0-4][0-9]|25[0-5])\.)([0-9]|[1-9][0-9]|1[0-9]|2[0-4][0-9]|25[0-5])$'`
if [ ! $bind_ip ];then
echo
"ip位址格式不正確"
exit3fi
container_minid=`echo
$container_id | cut -c 1-10`
container_netmask=`ip addr show docker0 | grep "inet\b" | awk '' | cut -d / -f2`
container_gw=`ip addr show docker0 | grep "inet\b" | awk '' | cut -d / -f1`
bridge_name="veth_$container_minid"
container_ip=$bind_ip/$container_netmask
pid=`docker inspect -f
'}'$container_name
2> /dev/null`
if [ ! $pid ];then
echo
"獲取容器$container_name的id失敗"
exit4fi
if [ ! -d /var/run/netns ];then
mkdir -p /var/run/netns
filn -sf /proc/$pid/ns/net /var/run/netns/$pid
ip link add $bridge_name
type veth peer name x
brctl addif docker0 $bridge_name
ip link set
$bridge_name up
ip link set x netns $pid
ip netns exec
$pid ip link set dev x name eth0
ip netns exec
$pid ip link set eth0 up
ip netns exec
$pid ip addr add $container_ip dev eth0
ip netns exec
$pid ip route add default via $container_gw
}if [ $1 == "start" ]; then
for conf in `cat host_ip.list`
do
name=`echo
$conf |cut -d
":"-f
1` ip=`echo
$conf |cut -d
":"-f
2` docker start $name
resetip $name
$ipecho
"start container:"
$name
"success in ip:"
$ipdone
elif [ $1 = "stop" ]; then
for conf in `cat host_ip.list`
doname=`echo
$conf |cut -d
":"-f
1` ip=`echo
$conf |cut -d
":"-f
2` docker stop $name
echo
"stop container:"
$name
"success"
done
else
echo
"usage:container.sh start / stop"
fi
以上指令碼需要配置容器:ip對,需要修改路徑以及配置檔案名稱的請修改**;
1.無法修改主機名稱
2./etc/hosts的修改結果無法儲存;
Docker容器固定IP分配
我們在使用docker run 建立docker 容器時,可以用 net 選項指定容器的網路模式,docker 有以下4 種網路模式 host模式,使用 net host 指定。container模式,使用 net container name or id 指定。none模式,使用 net none...
Docker容器固定IP分配
我們在使用docker run 建立docker 容器時,可以用 net 選項指定容器的網路模式,docker 有以下4 種網路模式 host模式,使用 net host 指定。container模式,使用 net container name or id 指定。none模式,使用 net none...
Docker 配置容器固定IP
前言之前使用pipework 分配靜態ip是暫時的,重啟之後就會失效,並且使用pipework繫結的ip 物理機,虛擬機器,docker容器的ip都在同一網段,這在生產環境是很困難的,下面使用docker自帶的network實現固定ip分配,並且重啟不會消失。環境介紹 繫結步驟 先操作192.168...