Docker实战
优势
- 方便移植环境,搭建好各种程序全家桶,然后给出一个,启动快,体积小的镜像
- 真的可以做到秒开机 docker run -itd -p 80:80 ImageId /bin/bash
- 跨操作系统,只要操作系统可以安装docker,就可以运行各种不同操作系统的镜像
比如在linux上搭建一个运行环境,只需要给一个docker镜像,便可以在linux上跑起来了,不需要任何配置,相对于 虚拟机镜像的话,这个更轻便(因为不是一个完整的操作系统),启动也更快捷
如果习惯了在linux上开发的话,则更是神器啊,新同事过来,给个docker,环境就搭建好了
- 方便运维隔离管理,特别是多Docker的管理
基本概念
镜像
images :就是一个实物,从阿里云拉出一个ubutun的镜像容器
container :建立在 镜像之上的一个虚拟运行环境。
Docker 制作镜像
- 通过image ID run,以交互模式进入container
docker run -t -i test_rep /bin/bash - 制作镜像,完成后, exit退出,内容会被保存,容器也会stop
- 如果要修改的话, docker ps -a 查看容器ID,
docker exec -ti ID /bin/bash
进入修改后 exit - 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 末尾添加路径
|
- 生效环境变量
source ~/.bashrc
docker run -i -t -v /home/wangjie/tomcat8:/home/wangjie 89796a /bin/bash
tomcat 安装
同JDK,只需要把tomcat的解压包拷贝过去即可
把制作好的镜像推到阿里云端
- 先要有阿里云的账号
- 然后创建属于自己的镜像仓库,创建的时候需要 绑定github的代码库
https://cr.console.aliyun.com/?spm=5176.1971733.0.2.duOGn4#/imageList - 登录后,推到云端去即可sudo docker login --username=dahuang666666 registry.cn-hangzhou.aliyuncs.comsudo docker tag 8bd687e55485 registry.cn-hangzhou.aliyuncs.com/mytest_jdk_tomcat/testsudo 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
翻墙拉镜像 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就好了
其他命令
删除所有的关闭状态下的容器
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 查看刚运行过的镜像