Docker学习1
Docker学习1
初看docker的两个地方
阿里云docker官方文档
docker中文网
因为被墙了所以用阿里云的容器镜像服务
为了方便部署上线,使用Docker是一个非常好的选择
win10专业版或者企业版
直接开Hyper官网下载docker
windows低一点的系统
下载docker-toolbox,安装完毕后,将docker-machine添加到环境变量。接着可以用git-bash命令创建一个
docker-machine create --engine-registry-mirror=https://5f2jam6c.mirror.aliyuncs.com -d virtualbox default
用的是阿里云的加速库。这是我的阿里云加速,使用阿里云加速的方法是
登陆后在容器镜像服务中选加速器然后查看windows版本下的加速命令即可。
https://dev.aliyun.com/search.html
ssh连接docker-machine的命令如下ssh [email protected]
密码是tcuser
Dockerfile
github中项目中一般都会有.gitignore,README.md,有时候还会有个Dockerfile,.gitignore和README.md我们都知道是什么,那么Dockerfile又是什么呢?Dockerfile自然就关联到docker了,它是面向开发者(Dev)的,开发者把需要什么系统,需要装什么软件,需要怎么配置环境等等全部都写进Dockerfile里面,相当于是一个基于docker的全自动生成镜像的一个脚本,至少我是这么理解的。而有个这个Dockerfile,别人只用在这个Dockerfile的目录下执行docker build -t image:tag 就可以由你的Dockerfile生成镜像,是不是很方便?
自从有了Dockerfile,开发者就可以取代一部分原来由运维(Ops)做的部署工作(deployment),也就加强了运维和开发的联系,加快的了工作的效率,其实Dockerfile还不算最高效率,最高的效率是直接移植现在做好的docker镜像,把Dockerfile build中各种网络下载安装,还有编译的时间都省去了,真的做到开箱即用
镜像
镜像是docker的静态,由Dockerfile生成的是镜像而不是容器,你可以通过sudo docker images查看你现在有多少的镜像,docker的镜像是docker移植的关键,当然容器也可以export出来再import回去,但是一般都是save和load docker镜像为主
容器
容器是docker的动态,由镜像run出来的(sudo docker run),容器是docker的精华,你可以理解为容器技术就是应用了集装箱的思维,把所需要的所有东西都放进一个集装箱(container)里面,哪里需要服务,我直接把整个集装箱运过去,然后你进去集装箱享受服务就好了
容器是不会自动保存改动到原来的镜像的,除非你commit容器形成一个快照,但是这个操作其实就是将现在改动过的动态的容器新存为一个静态的镜像,而不是保存为原来的镜像。
常用命令
#从当前目录下的Dockerfile(命名dockerfile好像也能识别,其他就不行了)建立镜像 sudo docker build -t reponame:tag . #别忘了最后那个.! sudo docker images #查看镜像 sudo docker ps #查看当前运行的容器 sudo docker ps -a #查看全部容器(包括运行中的和停止的) sudo docker run -it --name blabla -p <物理机>:<容器>(e.g. 127.0.0.1:3306:3306) -v /your/local/path/:/map/path/in/docker/ -v /etc/localtime:/etc/localtime --net =host -d reponame:tag # 启动容器 #[-it 是启动交互和伪终端] #[-p <IP>:<宿主机端口>:<容器端口> 将宿主机(物理机)映射或者可以理解为绑定,<IP>可以指定,也可以不指定,不指定默认是0.0.0.0,建议还是指定] #[-v 是挂载本机目录到到docker目录,最好每次都把-v /etc/localtime:/etc/localtime也带上,确保docker 容器内时间和服务器时间一致] #[-d 是daemonize的意思,就是使容器成为守护进程,后台运作] #[--net是设置docker的网络模式,默认不设置的话就是bridge模式,现在设置为和物理机网络绑定的host模式,更多可以看 Docker的4种网络模式(http://www.cnblogs.com/gispathfinder/p/5871043.html) #[--link 是容器链接] #复习几个特别的IP: #①127.0.0.1是本地回环地址,代指本机; [对于绑定在127.0.0.1的端口而言,外部无法访问,不对外打开,仅仅对内打开] #②0.0.0.0 代表所有不清楚的IP,安全性差,也是指本机?;[对于绑定在0.0.0.0的端口而言,外部可以访问] #③255.255.255.255 用人类的话说:“嘿,这屋子的所有人听着了!” #④localhost 这个是域名,一般都是127.0.0.1,这种对应关系写在你的/etc/hosts里面 sudo docker start/stop/restart/rm blabla #启动/停止/重启/删除 容器 sudo docker cp blabla:/app/file.txt . # 把docker里面/app目录下的file.txt文件复制出来到现在所在的目录 sudo docker exec -it blabla /bin/bash #在启动的容器blabla中运行/bin/bash sudo docker exec -it blabla /the/path/of/your/command sudo docker commit blabla repo:tag #提交保存容器到一个新的镜像repo:tag sudo docker rmi repo:tag #删除镜像 #容器的导出和导入 sudo docker export sudo docker import #镜像的导出和导入 [文件] sudo docker save repo:tag > backup.tar sudo docker load < backup.tar [dockerhub] sudo docker login sudo docker push repo:tag sudo docker pull repo:tag #常用组合命令 #停止所有docker容器 sudo docker kill $(sudo docker ps -q) #删除所有docker容器 sudo docker rm $(sudo docker ps -aq)