Docker入门——image制作
制作初始模板模板的制作在之前的一篇已经简单介绍过了,下边是这两天遇到的比较蛋疼的问题和收获的经验,分享给大家避免走弯路。
所谓的模板就是一个通用的底层,其他应用都可以以最小修改的方式完成应用的部署,当然模板也需要轻便和精简。
mount /dev/sr0 /mnt
febootstrap -i iputils -i vim-common -i openssh-server -i yum -i passwd -i wget -i git -i telnet rhel redhat file:///mnt/ #这个软件包需要epel的,需要fakeroot支持,fedora的貌似不是一样的工具
我选了几个比较重要的包,在使用中经常需要安装
打包上传到docker上,基本的任务就算完成了。
tar -c . | docker import - rhel65
查看一下上传好的images
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
rhel65 latest 9feee56f6c68 48 seconds ago 385.4 MB
其实网上有许多已经成型各种应用的模板可以下载,通过
# docker search nginx
NAME DESCRIPTION STARS OFFICIAL TRUSTED
walm/nginx Nginx 1.4.3 0
dockerfile/nginx Trusted Nginx (http://nginx.org/) Build 3
bconklin/nginx Test nginx module 0
stapelberg/nginx nginx 1.4.4-1 from Debian 0
yoshiso/nginx centos6.5 with nginx works on port 80 0
mguymon/nginx Basic nginx container for Ubuntu 13.04 1
michaloo/nginx This is nginx compiled on ubuntu base image. 0
mmckeen/nginx Nginx application image based on an openSU... 0
.....................
但是因为docker的服务器在墙外。。。可以通过http代理完成下载,不过我还是认为很多东西必须自己做 才有意义,才放心使用。
上传之后发现一个比较蛋疼的问题,我之前做基础包的时候都是讲yum源配好的,现在已经上传完了,但yum源还没有配置,是不是要重新打包上传呢?
答案是no,no,no!
我们先启动一个容器(还是叫VM比较习惯,下边统称为VM)
docker run -t -i -v /mnt/:/mnt/ rhel65 bash #-t 伪终端 -i标准输出 -v 目录重定向 rhel65 是images的名字 bash是启动VM执行的命令
启动一个无名氏虚拟机(因为没有指定--name参数)(-i参数是shell终端直接进入到vm的终端,所以需要重启起一个终端才能查看)
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2e3537df5275 rhel65:latest bash 37 seconds ago Up 36 seconds sharp_archimede
VM此时的状态
bash-4.1#
因为我们在定制虚拟机模板的时候已经安装好了ssh服务,所以可以直接启动
bash-4.1# /etc/init.d/sshd start
Generating SSH1 RSA host key:
Generating SSH2 RSA host key:
Generating SSH2 DSA host key:
Starting sshd:
bash-4.1# ifconfig #通过ifconfig 我们可以看到虚拟机的ip地址为172.17.0.2 通过宿主用ssh可以直接连接。
eth0 Link encap:EthernetHWaddr F2:38:51:9B:15:F4
inet addr:172.17.0.2Bcast:0.0.0.0Mask:255.255.0.0
inet6 addr: fe80::f038:51ff:fe9b:15f4/64 Scope:Link
UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:368 (368.0 b)TX bytes:368 (368.0 b)
使用ssh连接到VM(记得要先修改虚拟机的密码)
# ssh 172.17.0.2
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
RSA key fingerprint is f2:8b:83:3d:8f:34:8a:28:7c:88:4e:12:35:ab:03:24.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.17.0.2' (RSA) to the list of known hosts.
root@172.17.0.2's password:
Connection to 172.17.0.2 closed.
连接错误了,此时需要修改ssh的配置文件,将PAM禁用
bash-4.1# sed -i 's/UsePAM yes/UsePAM no/' /etc/ssh/sshd_config #修改sshd配置文件
bash-4.1# /etc/init.d/sshd restart #重启sshd服务
Stopping sshd:
Starting sshd:
再尝试连接
# ssh 172.17.0.2
root@172.17.0.2's password:
Last login: Thu Jan 16 01:38:27 2014 from 172.17.42.1
-bash-4.1#
发现终端很丑有木有,因为没有执行/etc/bashrc 生成环境变量
我们将宿主的bash脚本拷贝到VM中
# scp .bash* 172.17.0.2:/root/
root@172.17.0.2's password:
.bash_history 100% 16KB15.9KB/s 00:00
.bash_logout 100% 18 0.0KB/s 00:00
.bash_profile 100%176 0.2KB/s 00:00
.bashrc 100%176 0.2KB/s 00:00
重新连接ssh即可。
下边配置下yum源
bash-4.1# cat > /etc/yum.repos.d/base.repo
name=local
baseurl=file:///mnt/
enabled=1
gpgcheck=0
基本的配置已经做好了,我们将配置信息推送回模板,这样等下次需要一个VM时就不需要以上麻烦的初始化了。
# docker ps #查看一下VM的信息,Container id
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2e3537df5275 rhel65:latest bash 15 minutes ago Up 15 minutes sharp_archimede
# docker commit 2e rhel65-new#执行合并命令,2e是VM container id的简写,可以直接识别到虚拟机 rhel65-new是合并新模板的名字,也可以覆盖原有模板
78efa95a25888cac0b7f98e325c465bcf14f7008e62b09f80287091c882fdd93
# docker images #查看所有的模板,现在有两个模板
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
rhel65-new latest 78efa95a2588 13 seconds ago 385.4 MB
rhel65 latest 9feee56f6c68 23 minutes ago 385.4 MB
通过新模板启动一个VM
# docker run -i -t -p 22 rhel65-new bash # -p是将VM的22端口指向到宿主机,如果没有指定,则会随机分配一个。
bash-4.1# ls -a #查看下刚才修改过的地方,发现已经生效了
....bash_history.bash_logout.bash_profile.bashrc
使用ssh连接到VM,首先需要在VM启动sshd服务
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cf34cd94a055 rhel65-new:latest bash 5 minutes ago Up 5 minutes 0.0.0.0:49153->22/tcp kickass_turing
2e3537df5275 rhel65:latest bash 24 minutes ago Up 24 minutes sharp_archimede
Xshell:\> ssh 192.168.91.142 49153 #是宿主机的ip 和端口
如果不希望启动一个VM后直接进入到VM的终端,而是希望后台运行,通过ssh服务连接的话可以尝试下
# docker run -t -drhel65-new /usr/sbin/sshd -D
9710b69c0fafdea8b1790b2406fe664e85a45038675c3feeb31880fd20d6c602
# docker inspect 97 | grep IPAddress
"IPAddress": "172.17.0.5",
# ssh 172.17.0.5
The authenticity of host '172.17.0.5 (172.17.0.5)' can't be established.
RSA key fingerprint is f2:8b:83:3d:8f:34:8a:28:7c:88:4e:12:35:ab:03:24.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.17.0.5' (RSA) to the list of known hosts.
root@172.17.0.5's password:
Last login: Thu Jan 16 01:41:08 2014 from 172.17.42.1
#
或者直接通过端口转发
# docker run -t -d-p 10010:22 rhel65-new /usr/sbin/sshd -D
e0568b009603143c7838cf2afe1771de77a570ccacfcd27de3a75d2f47b360f6
# ssh 192.168.91.142 -p 10010
The authenticity of host ':10010 (:10010)' can't be established.
RSA key fingerprint is f2:8b:83:3d:8f:34:8a:28:7c:88:4e:12:35:ab:03:24.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ':10010' (RSA) to the list of known hosts.
root@192.168.91.142's password:
Last login: Thu Jan 16 01:41:08 2014 from 172.17.42.1
#
最后值得提醒的是 记得宿主上要关闭selinux。
下一次会分享,通过Dockerfile 创建VM
欢迎加入 Docker部落:345819364
页:
[1]