为什么要使用Docker
Docker能极大地减少环境配置和环境差异带来的工作,能相当程度提高生产力.以往我们使用的Homestead等虚拟机只能实现开发环境的共享,并不能用到生产环境中,无法减少运维的工作.
什么是Docker?
Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本! 使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!
理解Docker
传统的虚拟机是虚拟一套硬件,再在这套硬件上跑系统,Docker是操作系统级别的虚拟化,寄宿于你计算机中原有的操作系统,共用一套硬件.相比传统虚拟机,Docker更像是一个沙箱,也更轻量高效.在云计算虚拟化方便应用非常广泛.
核心概念
源(Registry)
类似各类Linux软件源,下载镜像的地方
仓库(Repository)
各种版本镜像的集合,例如Ubuntu是一个仓库,这个仓库里放了各种版本的镜像
镜像(Image)
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。概念上可以视作程序代码中 “类” 的概念.
容器(Container)
运行镜像产生的就是容器,容器的实质是进程,容器之间是相互隔离的.概念上类比,类实例化产生的对象.
Docker常用命令
#镜像
docker images #列出本地镜像
docker rmi training/sinatra #删除(在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器)
docker run -t -i ubuntu:14.04 /bin/bash #
docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2 #更新镜像
docker tag 5db5f8471261 ouruser/sinatra:devel #修改标签
docker build ${dockerfile_dir} #Dockerfile 构建
docker save -o ubuntu_14.04.tar ubuntu:14.04 #保存
docker load --input ubuntu_14.04.tar #导入
#容器
docker ps #查看容器信息
docker rm #删掉容器(-f 删除运行中)
docker inspect #查看指定容器详细信息(可获取ip,pid等信息)
docker logs insane_babbage #查看容器log
docker port CONTAINER [PRIVATE_PORT[/PROTO]] #查看端口映射
docker start|stop|restart insane_babbage #启动终止重启
docker attach insane_babbage #进入后台运行的容器 -d(推荐nsenter)
docker export 7691a814370e > ubuntu.tar #导出快照
cat ubuntu.tar | sudo docker import - test/ubuntu:v1.0 #导入快照
## docker hub
docker search #搜索镜像
docker pull #下载
docker push #推送(需登录)
Laradock 是什么?
Laradock是一个利用Docker实现的WEB环境配置工具,集成了大量WEB开发领域会用到的软件,如Redis,Mysql,MongoDB等.为PHP/Laravel开发和部署提供了极大的便利
Laradock 常用命令
docker-compose:
build Build or rebuild services
bundle Generate a Docker bundle from the Compose file
config Validate and view the Compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
images List images
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information
Laradock官方提供了详细的文档,非常赞 http://laradock.io/
一些经验
- 我们知道Docker的镜像是不含数据的,所以我们的数据需要存到一个共享的数据卷上,Laradoc已经为我们配置好了
- 要熟悉Laradoc,重点看项目目录下的.env和docker-compose.yml,里面有详细的注释和配置项
- Docker的容器是相互隔离的,每个容器都有一套独立的运行时环境,相当于运行在一个微型的Linux上面.注意虽然Laradock转发了一些端口到宿主机127.0.0.1,但127.0.0.1对每个容器来说都是他自己,并不是宿主机.
- 由于众所周知的原因,Docker需要用国内镜像加速 也有一些开发者把镜像里的源都做了替换,如 https://github.com/callect/laradock 我个人并没有用这个,不是很新,很多官方新出的镜像没有 但如果用官网的版本,最要有高速科学上网的工具,不然就得手动改源了
- win10需要专业版和企业版才能使用Hyper-V,这是Docker在windows上运行的基础
国内用户如何加速容器内的包安装
推荐方法:为DockerFile设置http_proxy代理
docker-compose build --build-arg http_proxy=http://ip:port