文档之外的发现

Docker 初探

2017-09-10  本文已影响16人  __x

开篇先说句 很神奇的docker

刚刚接触这个东西,大致的理解就是在你的机器上安装一个可以迁移的虚拟机,然后把你机器上的应用(例如apache,php,mysql==)放到上面跑,当你想要加机器或者做服务器迁移,只需打包成镜像然后部署到新机子上就好了(现在的理解,有不对的地方欢迎指正)

接下来开始正文研究

1、首先过了一遍runoob,只针对自己的主机和需要,看了docker安装,简单的看了下镜像和容器什么的,有专门的docker-hub源,里面有很多现成的镜像可以选择,当然你也可以后期自己做镜像然后上传到docker-hub或者其它源(看网上说docker-hub被强了,但是本人使用的是港机不会有这点问题,如果看本篇文章的同学用的是国内机子,可以上网搜索一下更换docker源,中国也有的)

2、接下来准备做一个apache的容器,首先简单介绍下docker下的镜像和容器
  镜像:简单的理解类似于.iso文件,被打包好的镜像
  容器:被运行的镜像,应该是没有安装一说,实际需要用到的只有容器
  不是太理解的同学可以继续往下看

3、安装docker,首先要注意使用docker的系统内核版本必须在3.10以上,本人特意装了centos7来配合这一点,之前的6.8 32位是不支持的

$ uname -r     //查看系统内核版本
3.10.0-514.21.1.el7.x86_64
$ yum -y install docker   //安装docker
$ service docker start     //开启docker 

4、接下来选择和安装镜像,以centos来举例

$ docker search centos     //搜索镜像
runoob@runoob:~/apache$ docker search httpd
INDEX       NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/centos                             The official build of CentOS.                   3617      [OK]       
docker.io   docker.io/ansible/centos7-ansible            Ansible on Centos7                              100                  [OK]
docker.io   docker.io/jdeathe/centos-ssh                 CentOS-6 6.9 x86_64 / CentOS-7 7.3.1611 x8...   81                   [OK]
docker.io   docker.io/tutum/centos                       Simple CentOS docker image with SSH access      33                   
docker.io   docker.io/imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              30                   [OK]
docker.io   docker.io/gluster/gluster-centos             Official GlusterFS Image [ CentOS-7 +  Glu...   20                   [OK]
docker.io   docker.io/kinogmt/centos-ssh                 CentOS with SSH                                 16                   [OK]
docker.io   docker.io/centos/php-56-centos7              PHP 5.6 platform for building and running ...   9                    
docker.io   docker.io/openshift/base-centos7             A Centos7 derived base image for Source-To...   7                    
docker.io   docker.io/centos/python-35-centos7           Python 3.5 platform for building and runni...   6                    
docker.io   docker.io/openshift/mysql-55-centos7         DEPRECATED: A Centos7 based MySQL v5.5 ima...   6                    
docker.io   docker.io/darksheer/centos                   Base Centos Image -- Updated hourly             3                    [OK]
docker.io   docker.io/openshift/jenkins-2-centos7        A Centos7 based Jenkins v2.x image for use...   3                    
docker.io   docker.io/openshift/ruby-20-centos7          DEPRECATED: A Centos7 based Ruby v2.0 imag...   3                    
docker.io   docker.io/blacklabelops/centos               CentOS Base Image! Built and Updates Daily!     1                    [OK]
docker.io   docker.io/indigo/centos-maven                Vanilla CentOS 7 with Oracle Java Developm...   1                    [OK]
docker.io   docker.io/openshift/php-55-centos7           DEPRECATED: A Centos7 based PHP v5.5 image...   1                    
docker.io   docker.io/pivotaldata/centos-gpdb-dev        CentOS image for GPDB development. Tag nam...   1                    
docker.io   docker.io/pivotaldata/centos-mingw           Using the mingw toolchain to cross-compile...   1                    
docker.io   docker.io/jameseckersall/sonarr-centos       Sonarr on CentOS 7                              0                    [OK]
docker.io   docker.io/miko2u/centos6                     CentOS6 妤娆瑾绨澧                                   0                    [OK]
docker.io   docker.io/openshift/wildfly-101-centos7      A Centos7 based WildFly v10.1 image for us...   0                    
docker.io   docker.io/pivotaldata/centos                 Base centos, freshened up a little with a ...   0                    
docker.io   docker.io/pivotaldata/centos-gcc-toolchain   CentOS with a toolchain, but unaffiliated ...   0                    
docker.io   docker.io/smartentry/centos                  centos with smartentry                          0                    [OK]
$ docker pull centos:latest    //此处对应上边第一项,下载镜像

$docker run -i -t -d centos    //此处将镜像运行成容器,跑出来的就是容器 

简单介绍一下docker run, runoob上的介绍是“创建一个新的容器并运行一个命令”大致就是运行你下载的镜像,以下是常用参数

还有一个参数 -v 将容器目录挂载到宿主机上,这个命令本人用起来一直没有看到效果,顶多是在宿主机上创建了挂载目录,并没有正向映射和反向映射,有会的同学欢迎指导以下,在下感激不尽。

5、运行容器后才是关键部分,不是自己创建的镜像基本不会达到run以下就可以达到自己想要的配置,为了能够自己完成配置,保存和迁移,请往下看

run后可以检查以下当前运行的容器,当然也可以看到下载的镜像

$ docker images  //查看当前下载过的镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              328edcd84f1b        5 weeks ago         192.5 MB
  
$docker ps      //查看当前run的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                NAMES
7559aaf95f72        docker.io/centos    "/bin/bash"         About an hour ago   Up About an hour    0.0.0.0:80->80/tcp   gloomy_khorana

以上的IMAGE IDCONTAINER ID 请以实际为准,每个人的不一样,简单介绍一些其它操作,刚开始入门的同学可能会进行多次尝试

$ docker stop CONTAINER ID    //停止正在run的容器
$ docker rm CONTAINER ID     //删除容器,如果想要删除一个容器,建议先执行stop(保证这个容器不会展示在 docker ps 的列表中)
$ docker rmi REPOSITORY   //删除一个镜像,后边会用到

本人在尝试过程中出现过一种情况是 REPOSITORY为<none>,这个时候如果想要删除这个出了bug的镜像,可以使用 docker rmi -f CONTAINER ID 就可以了

接下来就是操作,首先是进入容器进行操作,刚刚安装的是centos镜像,所以可以进去操作一番

$ docker exec -it CONTAINER ID /bin/bash  //进入容器,这个时候你就会发现命令行前面的名字变了

。。。接下来进行一番操作,例如 安装 git 安装apache====
接下来执行 exit或者Ctrl+d可以退出容器

修改后的容器需要提交成新的镜像保存下来,不然下次启动centos镜像又会变成原样

$ docker commit [OPTIONS] CONTAINER  [REPOSITORY[:TAG]]

这段是网抄的,大致使用了以下就是 docker commit CONTAINER ID name/imagename

接下来使用docker images就可以看到这条记录了

6、上传到源:
  首先创建docker-hub账号 https://hub.docker.com
  接下来登录

$ docker login   //输入用户名密码登录
$ docker tag IMAGE ID username/tagname  //给image打上标签
$ docker push username/tagname    //上传到docker-hub

接下来登录到docker-hub上就可以查看刚才的push了

刚开始练习的时候想要尝试httpd镜像,但是尝试过程中遇到了几个问题
1、www目录是在容器中的,在宿主机中需要转到容器中才可以,解决办法或者在容器中安装git或者svn,或者使用挂载
2、同理,httpd.conf以及要创建的虚拟主机的conf都需要到容器中配置,用起来还是麻烦一些的,如果apache和php等应用分开安装就需要到不同的容器中配置,配置时长大大增加
鉴于以上问题,本人选择了centos进行尝试这样全部操作都在一个容器中进行,相对来说比较简单一些。

如果有同学有什么问题或更好的解决方案欢迎联系我一起讨论学习 lx@loodp.com


上一篇下一篇

猜你喜欢

热点阅读