Docker轻量级的特性使得我们可以快速打包开发环境:一处编译,到处使用。我们可以在第一次编译好需要的开发环境,然后把镜像导出打包,只有有docker环境,便可以快速还原原来的开发环境。
很常用的一个场景:换了电脑后,每次都需要重新安装PHP开发环境,浪费了很多时间。使用Docker,只需要预先编译一次,后续无需再次编译,就算从Windows换到了Mac、Linux,我们编译好的环境依然可以使用:只需要导入或者pull下来就行。
在Ubuntu等环境,我们可以一键安装Docker(服务端、客户端),但是在Mac、Windows环境却无法直接安装Docker服务端。这种情况下,我们有3种选择:
1、在虚拟机安装CentOS或者Ubuntu:比较费时。
2、使用 docker-for-mac 或者 docker-for-windows(仅Windows10专业版支持)客户端,这种体积会比较大,一般300M左右。
3、使用 boot2docker,配合docker-machine客户端,轻松部署Docker环境。需要提前安装VirtualBox(约90M)。(推荐,可玩性较高)
常规安装docker方法:
- curl -fsSL https://get.docker.com/ | sh
-
- # daocloud.io 国内镜像
- curl -sSL https://get.daocloud.io/docker | sh
该方法适用于 Ubuntu,Debian,Centos 等大部分主流 Linux 发行版。
准备工作
1、下载并安装VirtualBox
2、下载boot2docker.iso
https://github.com/boot2docker/boot2docker/releases/download/v18.01.0-ce/boot2docker.iso
建议使用迅雷下载。
为方便下载,网盘也存了一份:链接: https://pan.baidu.com/s/1i6QGIg9 密码: fsmb
3、下载docker-machine
Mac直接使用brew下载:
brew install docker-machine
或者:
- curl -L https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-`uname -s`-`uname -m` >/usr/local/bin/docker-machine && \
- chmod +x /usr/local/bin/docker-machine
Windows 打开 GitBash:
- if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi && \
- curl -L https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" && \
- chmod +x "$HOME/bin/docker-machine.exe"
基于boot2docker.iso初始化环境
打开Bash命令行:
docker-machine create --driver virtualbox --virtualbox-boot2docker-url=/Users/yjc/.docker/machine/cache/boot2docker.iso default
其中--virtualbox-boot2docker-url
手动指定了boot2docker.iso位置。如果不指定该参数,则会从网络直接下载,会非常慢。
如果没有出错,就可以进入这个虚拟机里面的Docker Linux里了:
- $ docker-machine start default
-
- Starting "default"...
- (default) Check network to re-create if needed...
- (default) Waiting for an IP...
- Machine "default" was started.
- Waiting for SSH to be available...
- Detecting the provisioner...
- Waiting for SSH to be available...
- Detecting the provisioner...
- Restarted machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
-
- $ docker-machine ls
-
- NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
- default - virtualbox Running tcp://192.168.99.101:2376 Unknown Unable to query docker version: Get https://192.168.99.101:2376/v1.15/version: x509: certificate is valid for 192.168.99.100, not 192.168.99.101
-
- $ docker-machine ssh default
- ## .
- ## ## ## ==
- ## ## ## ## ## ===
- /"""""""""""""""""\___/ ===
- ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
- \______ o __/
- \ \ __/
- \____\_______/
- _ _ ____ _ _
- | |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
- | '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
- | |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
- |_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
- Boot2Docker version 18.01.0-ce, build HEAD : 0bb7bbd - Thu Jan 11 16:32:39 UTC 2018
- Docker version 18.01.0-ce, build 03596f5
- docker@default:~$
docker-machine命令:
- Commands:
- active Print which machine is active
- config Print the connection config for machine
- create Create a machine
- env Display the commands to set up the environment for the Docker client
- inspect Inspect information about a machine
- ip Get the IP address of a machine
- kill Kill a machine
- ls List machines
- provision Re-provision existing machines
- regenerate-certs Regenerate TLS Certificates for a machine
- restart Restart a machine
- rm Remove a machine
- ssh Log into or run a command on a machine with SSH.
- scp Copy files between machines
- start Start a machine
- status Get the status of a machine
- stop Stop a machine
- upgrade Upgrade a machine to the latest version of Docker
- url Get the URL of a machine
- version Show the Docker Machine version or a machine docker version
- help Shows a list of commands or help for one command
建议打开VirtualBox给default
配置共享目录:
默认会配置c/Users
。配置共享目录前需要先:
docker-machine stop default
配置选项:自动挂载、固定分配。
如果需要手动挂载目录:
mount -t vboxsf work /work
/www
是容器内挂载点。
配置好后:
docker-machine start default
以后重启电脑后只需运行上面一句即可。
拓展
在虚拟机机中安装docker-compose
方法
- sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose -k
-
- chmod 777 -R /usr/local/bin/docker-compose
- chmod +x /usr/local/bin/docker-compose
重点
1.最后的-k 是免认证的请求方式,如果不加-k,会报SLL认证失败导致下载失败。
2.网络问题,经常超时,多试几次。
宿主机直接使用docker
每次都要docker-machine ssh 到虚拟机里面还是挺麻烦的,其实可以直接在宿主机操作docker。首先需要安装docker客户端:
brew install docker
然后:
eval $(docker-machine env)
假设已经启动了docker,想进入容器(假设是yphp),每次都得:
- eval $(docker-machine env)
- docker exec -it yphp /bin/bash
挺繁琐的。可以借助shell搞定:
在.bashrc
里加上:
- eval $(docker-machine env);
- alias yphp="winpty docker exec -it yphp bash"
以后直接输入yphp
就可以进入容器了。
xshell连接docker
默认的git-bash连接docker,vim实在是太难用了。可以使用xhsell连接docker。默认用户名是docker,密码tcuser。
参考:https://blog.csdn.net/ltyzsd/article/details/79041616
解决docker终端宽度、高度显示不正确
方法一(操作简单,但是每次都要输入环境变量):
docker exec -it --env COLUMNS=`tput cols` --env LINES=`tput lines` your_container_name /bin/bash
方法二(将环境变量追加到容器内的.bashrc中,一劳永逸):
- # 进入容器
- docker exec -it your_container_name /bin/bash
- # 追加配置
- echo -e "export COLUMNS=\`tput cols\` \nexport LINES=\`tput lines\`" >> ~/.bashrc
- # 退出容器,以后再进入容器,就正常了
- exit
- # 再次进入即可看到容器宽高正确
- docker exec -it your_container_name /bin/bash
参考资料
1、Docker学习笔记 - 飞鸿影~ - 博客园
http://www.cnblogs.com/52fhy/p/5638571.html
2、https://docs.docker.com/machine/install-machine/#install-machine-directly
3、解决docker终端宽度、高度显示不正确 - 蘑菇猎手的专栏 - CSDN博客
https://blog.csdn.net/DongGeGe214/article/details/86674741