docker学习(1) 安装
docker是啥就不多讲了,简言之就是更轻量、更牛叉的新一代虚拟机技术。下面是安装步骤:
一、mac/windows平台的安装
docker是在linux内核基础上发展而来的,无法直接运行在mac/windows上,需要借助docker-machine工具,先在mac/windows上建一个linux的虚拟机,然后才能继续玩下去。默认内置的虚拟机引擎是Oracle的免费软件VirtualBox,可支持vmware fusion之类的商业软件。
1.1 下载docker toolbox
下载地址:http://www.docker.com/docker-toolbox ,toolbox已集成了docker-machine,docker client,virtualbox之插件,强烈建议在mac/windows上学习docker的同学用这种方式安装docker(注:虽然mac上也可以通过brew install 方式安装,但是没有图形界面,学习起来不方便)。
安装过程很简单,一路Next就可以了,唯一要注意的是最后一个界面:
docker toolbox提供了二种运行方式,终端命令行及图形界面,建议初学者选择图形界面,以降低学习难度。
进入后,会要求先创建一个docker hub的账号,注册账号完成邮箱验证后,就能进入了,docker hub上提供了大量的docker镜像文件(可以理解各种虚拟机的模板,不过建议翻~*墙,否则速度奇慢,甚至打不开),基本上可以满足各种要求,比如:需要一个持续集成的虚拟机,可以直接使用jenkins镜像,需要一个mysql,可以直接使用mysql镜像...
天朝的程序员估计是全世界幸福感最差的程序员,所有外国的好东西,要么不能用,要么龟速,docker hub下载巨慢,第1次接触慢慢等吧,后面会介绍如何使用国内daocloud的代理进行加速。
注:toolbox并没有提供卸载工具,如果出于某种原因需要卸载,可利用https://github.com/docker/toolbox/blob/master/osx/uninstall.sh 这个脚本完成,脚本内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #!/bin/bash # Uninstall Script if [ "${USER}" != "root" ]; then echo "$0 must be run as root!" exit 2 fi while true ; do read -p "Remove all Docker Machine VMs? (Y/N): " yn case $yn in [Yy]* ) docker-machine rm -f $(docker-machine ls -q); break ;; [Nn]* ) break ;; * ) echo "Please answer yes or no." ; exit 1;; esac done echo "Removing Applications..." rm -rf /Applications/Docker echo "Removing docker binaries..." rm -f /usr/local/bin/docker rm -f /usr/local/bin/docker-machine rm -r /usr/local/bin/docker-machine-driver * rm -f /usr/local/bin/docker-compose echo "Removing boot2docker.iso" rm -rf /usr/local/share/boot2docker echo "All Done!" |
上面的脚本并没有删除virtualbox,如果连virtualbox也要卸载,自行到Application面板里,把virtualbox拖到垃圾箱里即可。
1.2 下载镜像
先选一个小点儿的镜像感受下,比如:用kitematic/hello-world-nginx测试下nginx
点击New,搜索nginx就能找到,其文档地址为:https://hub.docker.com/r/kitematic/hello-world-nginx/,通过GUI界面下载的过程,等效于下面的命令:
1 | docker pull kitematic /hello-world-nginx |
1.3 一些常规操作
下图是KI的GUI界面,打红圈的地方可以直接操作,工具栏里的Start点击一下,把nginx容器运行起来
点击上图中"浏览nginx首页"的按钮,就可以直接在浏览器里看到nginx首页了,很方便吧!工具栏里的STOP/RESTART这些按钮看名字就知道用途了,不再啰嗦。
可以有同学注意到了,浏览器里的地址类似:http://192.168.99.100:32774,如果想知道为啥是这个IP及端口,可以看下Ports页,如下图:
上图的意思是,将docker容器中的80端口,映射到虚拟机的32774端口,那么问题来了,192.168.99.100又是哪里来的?
点击左下角的DOCKER CLI,就能进入docker终端,然后运行:
1 | docker-machine ls |
会显示出当前创建的虚拟机(还记得本文最开头说的,mac上不能直接运行docker,必须先创建一个linux虚拟机吧),输出的default就是虚拟机的名字,然后再运行:
1 | docker-machine ip default |
就能看到virtual box给虚拟机default分配的IP. 继续,点击下图中的Exec,将进入nginx docker容器的bash命令行模式:
输入nginx -V查看配置文件的位置:
可以看出配置文件为/etc/nginx/nginx.conf,用cat命令查看一下:
从上图看,网站的根目录为/website_files,回到KI中,点击Volumns标签
可以看到实际是上把mac本机的~/Documents/Kitematic/hello-world-nginx/website_files 映射到docker容器实例中的/website_files,大家可以尝试把mac本机~/Documents/Kitematic/hello-world-nginx/website_files 中的index.html修改下,再刷新下浏览器中nginx页面,应该马上就能看到效果了。
1.4 docker 命令行的秘密
如果直接在mac本机打开一个终端,然后输入docker ps之类的命令,会提示
1 | Cannot connect to the Docker daemon. Is the docker daemon running on this host? |
但是从KI界面点击DOCKER CLI进入终端后,再输入docker ps,能正常显示正在运行的容器信息:
原因在于:通过KI进入终端后,会先执行
1 | bash -c "clear && DOCKER_HOST=tcp://192.168.99.100:2376 DOCKER_CERT_PATH=/Users/yjmyzz/.docker/machine/machines/default DOCKER_TLS_VERIFY=1 /bin/zsh" |
大家在docker CLI终端里,按一下向上的箭头就能发现这个秘密了,把这一行长长的命令换行整理一下,
1 2 3 4 5 6 | bash -c " clear && DOCKER_HOST=tcp: //192 .168.99.100:2376 DOCKER_CERT_PATH= /Users/yjmyzz/ .docker /machine/machines/default DOCKER_TLS_VERIFY=1 /bin/zsh " |
并没有什么特别之处,就是定义了几个bash变量而已,上面这一段不用死记,可以简化成:
1 2 | docker-machine start default #启动虚拟机default,如果vm未启动的话,先执行这一行 docker-machine env default #获取default的环境变量 |
第二行执行完以后,会输出:
1 2 3 4 5 6 | export DOCKER_TLS_VERIFY= "1" export DOCKER_HOST= "tcp://192.168.99.100:2376" export DOCKER_CERT_PATH= "/Users/yjmyzz/.docker/machine/machines/default" export DOCKER_MACHINE_NAME= "default" # Run this command to configure your shell: # eval $(docker-machine env default) |
注意最后一行,按提示复制 eval $(docker-machine env default),然后执行一下,bash终端就有docker的上下文环境,然后执行docker ps之类的,就不会报错了。
类似的,点击顶部工具栏上的EXEC,实际上等效于
1 | bash -c "clear && DOCKER_HOST=tcp://192.168.99.100:2376 DOCKER_CERT_PATH=/Users/yjmyzz/.docker/machine/machines/default DOCKER_TLS_VERIFY=1 docker exec -it hello-world-nginx sh" |
换行整理一下:
1 2 3 4 5 6 | bash -c " clear && DOCKER_HOST=tcp: //192 .168.99.100:2376 DOCKER_CERT_PATH= /Users/yjmyzz/ .docker /machine/machines/default DOCKER_TLS_VERIFY=1 docker exec -it hello-world-nginx sh" |
只是多了最后一行,所以上面这一段相当于:
1 2 | eval $(docker-machine env default) docker exec -it hello-world-nginx sh |
二、linux平台的安装(以centos为例)
注意:centos要求7以上版本,低版本的内核docker不支持。
1 2 3 | curl -sSL https: //get .daocloud.io /docker | sh sudo chkconfig docker on sudo systemctl start docker |
3行代码就搞定了,其中第1行,是从国内daocloud公司下载的,如果你想从官网下载,可以改成 sudo yum install docker 或 curl -sSL https://get.docker.com/ | sh, 安装完成后,执行:
1 | sudo systemctl status docker |
查看docker deamon状态,如果有active(running)字样输出,表示docker运行正常.
参考文章:
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
· 记一次 .NET某固高运动卡测试 卡慢分析
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 7 个最近很火的开源项目「GitHub 热点速览」
· DeepSeekV3:写代码很强了
· 记一次 .NET某固高运动卡测试 卡慢分析
· Visual Studio 2022 v17.13新版发布:强化稳定性和安全,助力 .NET 开发提
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
2014-01-23 jboss上的soap web service开发示例
2014-01-23 jboss的时区问题
2014-01-23 JAVA JPA - 示例用法