容器技术
容器技术与 Docker
和 微服务
一起火起来的,还有容器技术。通过容器技术,应用程序可以和环境打包在一个包中,然后运行在任何支持容器的操作系统中,容器隔离了所有的物理层。这使得人们非常轻量级地、安全可靠地发布软件包(包含了应用程序和运行时环境)。
传统意义上,人们在持续发布流水线上编译,测试,构建出一个软件包,然后再自动化配置一套环境,再将软件部署其上。现在人们可以很容易的为流水线添加一个新的 job,使其构建出一个独立的容器。这个容器可以直接运行在像 AWS 这样的云提供商的机器上。
Docker 是目前最为流行的容器技术,它可以运行在主流的 Linux 主机上(内核版本 3.10 以上)。通过 Docker Toolbox,你还可以在 Mac 下,甚至 Windows 上运行 Docker(当然,只是 Docker 的客户端,但是即使这样也可以获得 Docker 带来的好处)。
如果你在 Mac
下工作(如果在 Linux 下工作,按照官方的指导即可,如果在 Windows 下工作,那我建议你还是换成 Linux 或者 Mac 吧),可以安装 Docker Toolbox
来使用 Docker。 Docker Toolbox
中包含了一组工具,包括:
- docker-machine 应用程序
- docker-compose 应用程序
- Kitematic,docker 的图形化客户端
- VirtualBox
- 一个包含了 Docker 所需配置的 shell 环境
概念
事实上,我们通常说的 Docker 分为三个部分:
- docker daemon(只能运行在 Linux 下,使用了 Linux 的一些内核特性)
- docker client(客户端程序,可以运行在 Linux/Mac/Windows 下)
- container(容器,包含了应用程序和其依赖的环境)
在 Linux 环境中,这三者都在同一个环境中:
而在 Mac 和 Windows 中,docker client 运行在宿主环境中,docker daemon 和 container 都在一个 Linux 的虚拟机中:
docker-machine
docker-machine
可以用来创建和管理 Linux 虚拟机,这些 Linux 虚拟机具备了运行 Docker Daemon 的条件。宿主操作系统的客户端可以连接到该 Linux 虚拟机。
你可以使用下面的命令来创建一个虚拟机:
$ docker-machine create --driver virtualbox myvm
使用:
$ docker-machine ls
来查看已经运行的 docker
虚拟机:
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dev virtualbox Running tcp://192.168.99.100:2376
可以看到,我本地有一台名为 dev
的虚拟机,状态为 运行中
。如果这个机器没有启动(STATE 状态部位 Running),你可以通过:
$ docker-machine start dev
来启动它。启动之后,你可以使用 env
子命令来查看机器的配置
$ docker-machine env dev
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/jtqiu/.docker/machine/machines/dev"
export DOCKER_MACHINE_NAME="dev"
# Run this command to configure your shell:
# eval "$(docker-machine env dev)"
事实上,你可以创建多个 docker
虚拟机,因此在你的 shell 中执行下列命令来设置环境变量:
eval "$(docker-machine env dev)"
这样,你本地的环境变量如 DOCKER_HOST
, DOCKER_MACHINE_NAME
等就会被设置为虚拟机 dev
对应的值,后续的所有 docker 客户端命令就会在该机器上生效。
启动了 docker
虚拟机之后,你就可以使用 docker
客户端程序来启动 container 了
$ docker run -d -P --name web nginx
这条命令会使用 nginx
这个 docker image 来启动一个容器,容器的名字叫 web
。默认的 docker 在执行完命令之后会退出, -d
选项使其进入后台服务模式,即不退出。 -P
选项会将容器中的端口暴露给宿主环境。
如果你本地没有 nginx
镜像,docker 会尝试从远程的中心仓库下载该镜像,最后启动:
$ docker run -d -P --name web nginx
Unable to find image 'nginx:latest' locally
Pulling repository docker.io/library/nginx
c0e6aba9c87a: Pulling dependent layers
...
启动之后,你就可以通过 DOCKER_HOST
对应机器的 80 端口来访问该 nginx 实例了:
docker-compose
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论