Contents
  1. 1. 优势
  2. 2. 基本概念
  3. 3. Docker 制作镜像
    1. 3.1. Docker 容器内安装软件
      1. 3.1.1. nginx的 安装
      2. 3.1.2. JDK的安装
      3. 3.1.3. tomcat 安装
  4. 4. 把制作好的镜像推到阿里云端
  5. 5. 从阿里云端拉取镜像
  6. 6. 常用命令
  7. 7. 安装
  8. 8. 问题排查
  9. 9. 翻墙拉镜像 hello world
  10. 10. 其他命令

优势

  • 方便移植环境,搭建好各种程序全家桶,然后给出一个,启动快,体积小的镜像
  • 真的可以做到秒开机 docker run -itd -p 80:80 ImageId /bin/bash
  • 跨操作系统,只要操作系统可以安装docker,就可以运行各种不同操作系统的镜像

比如在linux上搭建一个运行环境,只需要给一个docker镜像,便可以在linux上跑起来了,不需要任何配置,相对于 虚拟机镜像的话,这个更轻便(因为不是一个完整的操作系统),启动也更快捷

如果习惯了在linux上开发的话,则更是神器啊,新同事过来,给个docker,环境就搭建好了

  • 方便运维隔离管理,特别是多Docker的管理

基本概念

  • 镜像
    images :就是一个实物,从阿里云拉出一个ubutun的镜像

  • 容器
    container :建立在 镜像之上的一个虚拟运行环境。

Docker 制作镜像

  1. 通过image ID run,以交互模式进入container
    docker run -t -i test_rep /bin/bash
  2. 制作镜像,完成后, exit退出,内容会被保存,容器也会stop
  3. 如果要修改的话, docker ps -a 查看容器ID,
    docker exec -ti ID /bin/bash进入修改后 exit
  4. docker commit ContainerID new_image_name

Docker 容器内安装软件

nginx的 安装

记得要先update
apt-get update
apt-get install nginx
http://blog.csdn.net/shiyuezhong/article/details/39396487

JDK的安装

  • 通过挂载的方式把host解压缩的 JDK包暴露给 container
    docker run -i -t -v /usr/java/jdk1.7.0_25:/usr/jdk1.7.0_25 89796a /bin/bash

  • 复制JDK解压包到其他路径
    cp /usr/jdk1.7.0_25 /opt/jdk1.7

  • 设置环境变量
    nano ~/.bashrc 末尾添加路径

export JAVA_HOME=/opt/jdk1.7
export JRE_HOME=/opt/jdk1.7/jre
export PATH=$PATH:/opt/jdk1.7/bin
export CLASSPATH=./:/opt/jdk1.7/lib:/opt/jdk1.7/jre/lib
  • 生效环境变量
    source ~/.bashrc

docker run -i -t -v /home/wangjie/tomcat8:/home/wangjie 89796a /bin/bash

tomcat 安装

同JDK,只需要把tomcat的解压包拷贝过去即可

把制作好的镜像推到阿里云端

  1. 先要有阿里云的账号
  2. 然后创建属于自己的镜像仓库,创建的时候需要 绑定github的代码库
    https://cr.console.aliyun.com/?spm=5176.1971733.0.2.duOGn4#/imageList
  3. 登录后,推到云端去即可
    sudo docker login --username=dahuang666666 registry.cn-hangzhou.aliyuncs.com
    sudo docker tag 8bd687e55485 registry.cn-hangzhou.aliyuncs.com/mytest_jdk_tomcat/test
    sudo docker push registry.cn-hangzhou.aliyuncs.com/mytest_jdk_tomcat/test

从阿里云端拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/mytest_jdk_tomcat/test

常用命令

  • 查看
    docker images
    docker ps # 查看所有正在运行的container
    docker ps -a # 查看所有的container
    docker ps -l # 查看最后一个执行的container

  • 启动和进入
    根据image Name启动镜像,并进入bash命令行,退出后,内容保存在container中,但是程序关闭
    -p 81:80 表示对外开放的是81端口,映射到container当中的80端口
    docker run -t -d -i -p 81:80 test_rep /bin/bash

启动但是不进入 container
docker start containerId

进入container 并且交互,退出容器不关闭
docker exec -ti ID /bin/bash

  • 提交
    前提是container 还在运行
    docker commit ContainerID new_image_name

  • 挂载文件夹
    把host的 /home/wangjie/tomcat8 暴露给container的 /home/wangjie 路径下
    docker run -i -t -v /home/wangjie/tomcat8:/home/wangjie 89796a /bin/bash

  • 拷贝文件

    将主机./RS-MapReduce目录拷贝到容器30026605dcfe的/home/cloudera目录下。
    docker cp RS-MapReduce 30026605dcfe:/home/cloudera
    将容器30026605dcfe的/home/cloudera/RS-MapReduce目录拷贝到主机的/tmp目录中。
    docker cp 30026605dcfe:/home/cloudera/RS-MapReduce /tmp/
  • 查看容器日志
    docker logs test

安装

Ubutun 14.04 X86_64
靠谱的安装步骤
http://blog.csdn.net/zhangchao19890805/article/details/52849404

注意事项:

  • 每次操作之前都要 apt-get update
  • 安装好之后,需要把当前用户添加到docker用户当中并且 reboot才有效
    $sudo gpasswd -a ${USER} docker
  • 即使是root 用户,也需要 sudo service docker start,不能用道理解释的现象,坑了我一下午

问题排查

解决mysql 授权过期:
http://www.jianshu.com/p/2316ec970946

apt-key list
apt-key del 5072E1F5
apt-key adv --keyserver pgp.mit.edu --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5
apt-get update

翻墙拉镜像 hello world

http://blog.csdn.net/wangtaoking1/article/details/49126621

修改Docker配置文件/etc/default/docker如下:
DOCKER_OPTS=”–registry-mirror=http://aad0405c.m.daocloud.io

网络切换到手机WIFI,公司网络好像做了拦截,hello-world 拉不下来,手机WIFI就好了

sudo docker run hello-world

其他命令

  • 删除所有的关闭状态下的容器
    docker rm $(docker ps -a -q)

  • 启动和关闭docker
    sudo service docker start
    sudo service docker restart

  • 交互模式进入镜像
    docker run -t -i registry.cn-shenzhen.aliyuncs.com/cqyiyoutong/ubuntu /bin/bash

  • 拉取镜像
    进入阿里云里面拉取镜像
    docker pull registry.cn-shenzhen.aliyuncs.com/cqyiyoutong/ubuntu

https://cr.console.aliyun.com/?spm=5176.1972344.0.2.7a21aad5oeE6Mc#/imageDesc/37580/detail

当然也可以从某个人的公共仓库(包括自己是私人仓库)拉取,形如docker pull username/repository<:tag_name> :

-查看正在运行的image
docker ps

docker start/stop id/name 启动/停止某个容器

docker attach id 进入某个容器(使用exit退出后容器也跟着停止运行)

docker exec -ti id 启动一个伪终端以交互式的方式进入某个容器(使用exit退出后容器不停止运行)

docker images 查看本地镜像
docker rm id/name 删除某个容器
docker rmi id/name 删除某个镜像

docker ps -l 查看刚运行过的镜像

Contents
  1. 1. 优势
  2. 2. 基本概念
  3. 3. Docker 制作镜像
    1. 3.1. Docker 容器内安装软件
      1. 3.1.1. nginx的 安装
      2. 3.1.2. JDK的安装
      3. 3.1.3. tomcat 安装
  4. 4. 把制作好的镜像推到阿里云端
  5. 5. 从阿里云端拉取镜像
  6. 6. 常用命令
  7. 7. 安装
  8. 8. 问题排查
  9. 9. 翻墙拉镜像 hello world
  10. 10. 其他命令