运维狗的自我修养:我的Docker之路

来源:互联网 发布:常青藤软件cad2014 编辑:程序博客网 时间:2024/05/21 13:00

前言

记录我遇到的坑,so win10的同学请另行百度
环境:物理机win7x64 ,使用物理机安装virtualbox,virtualbox安装docker提供的最小化linux系统,在该系统里运行docker,再docker里面跑容器
一句话总结,玩docker还是要linux
时间:2017-03-17
时间很重要,新技术更新换代快,我照书做的差点没做成,还是要靠google,(

安装Docker

https://www.docker.com/products/docker-toolbox
下载Docker Toolbox
(《Docker技术入门与实战》一书,我手头上的是2015年2月第1版第2次印刷,里面使用的是Boot2Docker进行安装,so已过时o(︶︿︶)o )
这里写图片描述
安装后桌面会多出这三个图标
这里写图片描述
简单来说DockerToolbox=VirtualBox+git gui

打开Docker Quickstart Terminal
会要求下载boot2docker.iso
这里写图片描述
但是这年头git下载个东西都慢慢的,所以X掉他,自己手动复制粘贴过去还快一点。
根据自己的安装路径,找到该文件
“C:\Program Files\Docker Toolbox\boot2docker.iso”
然后复制到对应的路径
“C:\Users\xxx.docker\machine\cache\boot2docker.iso”

再打开Docker Quickstart Terminal,等候鲸鱼出现,如图所示
这里写图片描述
其实这个东西很卡,也不能复制粘贴
所以打开VirtualBox
这里写图片描述
default虚拟机就是boot2docker.iso所建的cdlive
点击显示
这里写图片描述
至此环境安装部分已完成。
但是想要与虚拟机进行通信,例如使用ssh进去还是有点问题,ping docker的ip发现目标不可达,无法通信(可能是我的电脑问题。)
检查ip发现问题所在
这里写图片描述
docker一般使用192.168.99.100作为其ip
我们打开cmd,ipconfig查看自己ip
会发现VirtualBox对应的本应该是192.168.99.101的ip的网卡,却不能获取ip地址
这里写图片描述
想办法刷新几次,让dhcp获取ip就可以了
我这里使用的是使用管理员权限执行
netsh interface ip set address “VirtualBox Host-Only Network” dhcp
执行多几次后刷到ip可以ping到就可以ssh进去了。(ssh账户密码 docker:tcuser)

hello-world

程序员的自我修养

$ docker pull hello-world
如果失败,就试多几次
如果还是失败,就使用国内的镜像吧
$ docker pull daocloud.io/hello-world
(这里照书本的应该是dockerpool,但是好像已经挂了o(︶︿︶)o )
((晚上整理笔记的时候,写到这里,想再pull一次然后截图,发现连接不上..神奇的事情))
然后就是运行
$ docker run hello-world

既然能run hello-world,就能run其他了,好的接下来就pull run ubuntu开始玩了
官方pull下来的ubuntu是最小化安装起的容器,比linux安装选项中选择最小化安装还要最小化,各种软件程序服务功能例如ifconfig都没有,我这里想看ip和其他硬件信息,百度折腾了好久都无果,看不了,没办法只能安装ifconfig来看了。

ubuntu 换源的坑

ubuntu官网的源太慢了,于是就换了一个源,但是换源之后安装各种软件都是依赖有问题
后来百度发现apt-get install还有依赖问题的话说明是源的问题
再百度到http://www.cnblogs.com/lyon2014/p/4715379.html这篇文章,发现是codename的问题
而要看codename,可以查看ubuntu里原始的sources.list里面的codename,或者使用很慢的官方源安装lsb再使用lsb_release来查看。

网上全是抄来抄去的,真是浪费我的时间。

根据http://blog.csdn.net/xysoul/article/details/43214105我选了网易163的源,并修改codename

deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse

静默安装mysql

apt-get install mysql-server的时候还要求输入密码,但是在无交互的Dockerfile里面如果这样写就炸了,docker build后会一直等待镜像创建完成,而apt-get在等待输入密码,就会一直卡在那里了。
百度后在stackoverflow找到解决方法
install mysql without password(学好英语很重要

echo "mysql-server mysql-server/root_password password 123456" | debconf-set-selectionsecho "mysql-server mysql-server/root_password_again password 123456" | debconf-set-selectionsapt-get install -y mysql-server

这里要注意空格,password后面的123456就被当作密码了。我之前网上复制粘贴下来的因为排版原因多了一个空格,导致密码错误,然后登录不进去,一直报的ERROR 1045 (28000): Access denied for user ‘root’@’localhost’
然后我使用交互式的apt-get install mysql-server,打密码后登录成功,这下我就慌了,然后开两个容器,一边是静默安装,一边是手动交互安装,再比对cnf配置文件,都没发现有什么问题,哇,灵异事件!
再后来通过百度的mysql忘记密码如何重置密码,来进行排错,更确认了两个容器里的mysql都是一样的,没什么区别,那么可能就是密码不正确的问题了,最后才发现是密码多了个空格Orz
费了一晚上的时间+一晚上烦躁的心情 _(:зゝ∠)_

my lamp

#DockerfileFROM ubuntuMAINTAINER from 127.0.0.1 by zzzENV DEBIAN_FORNTEND noninteractive#换源,注意xenial为codename,查看原始的/etc/apt/sources.list或使用lsb_release -a查看RUN echo "deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse" > /etc/apt/sources.listRUN echo "deb http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse" >> /etc/apt/sources.listRUN echo "deb http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse" >> /etc/apt/sources.listRUN echo "deb http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse" >> /etc/apt/sources.listRUN echo "deb http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse" >> /etc/apt/sources.list#使用-qq --no-install-recommends,不输出多余的信息,不安装非必须的东西,减少镜像体积RUN apt-get updateRUN apt-get install -qqy --no-install-recommends net-toolsRUN apt-get install -qqy --no-install-recommends vimRUN apt-get install -qqy --no-install-recommends openssh-serverRUN apt-get install -qqy --no-install-recommends curlRUN apt-get install -qqy --no-install-recommends telnetRUN apt-get install -qqy --no-install-recommends apache2RUN apt-get install -qqy --no-install-recommends php libapache2-mod-php7.0#静默安装mysqlRUN echo "mysql-server mysql-server/root_password password 123456" | debconf-set-selectionsRUN echo "mysql-server mysql-server/root_password_again password 123456" | debconf-set-selectionsRUN apt-get install -qqy --no-install-recommends mysql-server#抄书的设置时区RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata#抄书和百度的修改root密码,允许使用root登录RUN mkdir -p /var/run/sshdRUN sed -ri 's/PermitRootLogin .*/PermitRootLogin yes/g' /etc/ssh/sshd_config RUN echo root:123456 | chpasswdRUN echo '<?php phpinfo()?>' > /var/www/html/phpinfo.phpADD run.sh /run.shRUN chmod 755 /run.sh#抄书的环境变量配置RUN mkdir -p /var/lock/apache2 ENV APACHE_RUN_USER www-dataENV APACHE_RUN_GROUP www-dataENV APACHE_LOG_DIR /var/log/apache2ENV APACHE_PID_FILE /var/run/apache2.pidENV APACHE_RUN_DIR /var/run/apache2ENV APACHE_LOCK_DIR /var/lock/apache2ENV APACHE_SERVERADMIN admin@localhostENV APACHE_SERVERNAME localhostENV APACHE_SERVERALIAS zzz.localhostENV APACHE_DOCUMENTROOT /var/wwwEXPOSE 22EXPOSE 80WORKDIR /var/www/htmlCMD ["/run.sh"] 
#!/bin/bash/usr/sbin/sshd &service mysql start &exec apache2 -D FOREGROUND

$ docker bulid -t lamp:my .

至此大功告成,镜像大小643M

在运维的路上越走越远_(:зゝ∠)_

(结尾添加关键字词提高收录率:
apt-get 解决依赖
安装mysql 不输入密码

0 0
原创粉丝点击