Docker 介绍
Docker 是指容器化技术, 用于支持创建和实验 Linux Container. 借助 Docker, 你可以将容器当做重量轻, 模块化的虚拟机来使用, 同时, 你还将获得高度的灵活性, 从而实现对容器的高效创建, 部署和复制, 并能将其从一个环境顺利迁移至另外一个环境.
Docker 官方网站: http://www.docker.com/
Github Docker 源码: https://github.com/docker/docker
基础特性:
基于 C/S 架构应用程序
模块化
层与镜像版本控制
支持回滚
快速部署
Docker 的应用场景
web 应用的自动化打包和发布.
自动化测试和持续集成, 发布.
在服务型环境中部署和调整数据库或其他的后台应用.
从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境.
Docker 基础架构图:
Docker 使用客户端 - 服务器 (C/S) 架构模式, 使用远程 API 来管理和创建 Docker 容器
Docker 容器通过 Docker 镜像来创建
DOCKER_HOST: 真正运行容器的主机
Containers: 容器, 独立运行的一个或一组应用
Images: 镜像, 用于创建 Docker 容器的模板
Registry: 镜像仓库
镜像 image 与容器 Container 区别:
镜像是静态的, 不会运行
容器则是动态的, 有生命周期
Docker 容器镜像站: https://hub.docker.com/
- Docker object:
- image
- containers
- networks
- volumes
- plugins
Docker 的安装
直接在 CentOS 上安装 Docker
首先安装之前先卸载之前的旧版本:
- $ sudo yum remove docker \
- docker-client \
- docker-client-latest \
- docker-common \
- docker-latest \
- docker-latest-logrotate \
- docker-logrotate \
- docker-selinux \
- docker-engine-selinux \
- docker-engine
安装 docker 依赖包:
- $ sudo yum install -y yum-utils \
- device-mapper-persistent-data \
- lvm2
添加 docker 源 (如果 Docker 官方下载的速度太慢也可以使用阿里的镜像源: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo):
- $ sudo yum-config-manager \
- --add-repo \
- https://download.docker.com/linux/centos/docker-ce.repo
安装 docker:
$ sudo yum install docker-ce
安装完直接启动 docker 即可:
~]# systemctl start docker
使用 docker version 可以看到我们安装 docker 的版本
- ~]# docker version
- Client:
- Version: 18.03.1-ce
- API version: 1.37
- Go version: go1.9.5
- Git commit: 9ee9f40
- Built: Thu Apr 26 07:20:16 2018
- OS/Arch: linux/amd64
- Experimental: false
- Orchestrator: swarm
- Server:
- Engine:
- Version: 18.03.1-ce
- API version: 1.37 (minimum version 1.12)
- Go version: go1.9.5
- Git commit: 9ee9f40
- Built: Thu Apr 26 07:23:58 2018
- OS/Arch: linux/amd64
- Experimental: false
使用 Vagrant + Virtual Box 快速搭建 Docker 环境
Vagrant 介绍
Vagrant 是一个基于 Ruby 的工具, 用于创建和部署虚拟化开发环境. 它 使用 Oracle 的开源 VirtualBox 虚拟化系统, 使用 Chef 创建自动化虚拟环境. 我们可以使用它来干如下这些事:
建立和删除虚拟机
配置虚拟机运行参数
管理虚拟机运行状态
自动配置和安装开发环境
打包和分发虚拟机运行环境
Vagrant 的运行, 需要依赖某项具体的虚拟化技术, 最常见的有 VirtualBox 以及 VMWare 两款, 早期, Vagrant 只支持 VirtualBox, 后来才加入了 VMWare 的支持.
Vagrant 安装和使用
Vagrant 是基于其他虚拟化产品来创建虚拟机的, 这里我们选择开源产品 Virtual Box, 我们先安装 Virtual Box 和 Vagrant:
Virtual Box 下载地址: https://www.virtualbox.org/
Vagrant 下载地址: https://www.vagrantup.com/downloads.html
下载好之后先使用
vagrant init centos/7
生成默认的 Vagrntfile, 然后使用 vagrant up 即可自动创建虚拟机, 我们为了配置 Docker 环境需要更改下 Vagrantfile, 在创建虚拟机的时候自动安装 docker 环境 (配置
config.vm.provision "shell"
选项) 并且按照自己的要求配置虚拟机的规模和网络.
我的 Vagrantfile 配置如下
- # -*- mode: ruby -*-
- # vi: set ft=ruby :
- Vagrant.require_version ">= 1.6.0"
- boxes = [
- {
- :name => "docker-1",
- :eth1 => "172.16.56.11",
- :mem => "1024",
- :cpu => "1"
- }
- ]
- Vagrant.configure(2) do |config|
- config.vm.box = "centos/7"
- boxes.each do |opts|
- config.vm.define opts[:name] do |config|
- config.vm.hostname = opts[:name]
- config.vm.provider "vmware_fusion" do |v|
- v.vmx["memsize"] = opts[:mem]
- v.vmx["numvcpus"] = opts[:cpu]
- end
- config.vm.provider "virtualbox" do |v|
- v.customize ["modifyvm", :id, "--memory", opts[:mem]]
- v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
- end
- config.vm.network :public_network, ip: opts[:eth1]
- end
- end
- # config.vm.synced_folder "../sync", "/home/vagrant/sync"
- config.vm.provision "shell", inline: <<-SHELL
- yum -y install wget
- wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
- yum makecache
- yum install -y yum-utils device-mapper-persistent-data lvm2
- yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- yum makecache fast
- yum -y install docker-ce
- sudo systemctl start docker
- SHELL
- end
之后使用 vagrant up 创建即可
λ vagrant up
- Bringing machine 'docker-1' up with 'virtualbox' provider...
- ==> docker-1: Importing base box 'centos/7'...
- [KProgress: 20%
- [KProgress: 40%
- [KProgress: 90%
- [K==> docker-1: Matching MAC address for NAT networking...
- ==> docker-1: Checking if box 'centos/7' is up to date...
- ==> docker-1: Setting the name of the VM: docker-1_docker-1_1534247086153_83300
- ==> docker-1: Clearing any previously set network interfaces...
- ==> docker-1: Preparing network interfaces based on configuration...
- docker-1: Adapter 1: nat
- docker-1: Adapter 2: bridged
- ==> docker-1: Forwarding ports...
- docker-1: 22 (guest) => 2222 (host) (adapter 1)
- ==> docker-1: Running 'pre-boot' VM customizations...
- ==> docker-1: Booting VM...
- ==> docker-1: Waiting for machine to boot. This may take a few minutes...
- docker-1: SSH address: 127.0.0.1:2222
- docker-1: SSH username: vagrant
- docker-1: SSH auth method: private key
- docker-1:
- docker-1: Vagrant insecure key detected. Vagrant will automatically replace
- docker-1: this with a newly generated keypair for better security.
- docker-1:
- docker-1: Inserting generated public key within guest...
- ==> docker-1: Machine booted and ready!
- ==> docker-1: Checking for guest additions in VM...
- ...
在这个过程中 Vagrant 会帮我们创建好一台 Centos 7 的虚拟机并安装好 Docker 环境, 使用 vagrant ssh 直接登陆虚拟机
λ vagrant ssh
- Last login: Wed Aug 15 15:54:32 2018 from 10.0.2.2
- [vagrant@docker-1 ~]$ sudo docker version
- Client:
- Version: 18.06.0-ce
- API version: 1.38
- Go version: go1.10.3
- Git commit: 0ffa825
- Built: Wed Jul 18 19:08:18 2018
- OS/Arch: linux/amd64
- Experimental: false
- Server:
- Engine:
- Version: 18.06.0-ce
- API version: 1.38 (minimum version 1.12)
- Go version: go1.10.3
- Git commit: 0ffa825
- Built: Wed Jul 18 19:10:42 2018
- OS/Arch: linux/amd64
- Experimental: false
- [vagrant@docker-1 ~]$
Vagrantfile 中有一项
config.vm.synced_folder
可以配置本地文件夹同步到虚拟机, 挂载本地文件夹到虚拟机中需要 VBoxAdditions 的支持, 这个可以在虚拟机起来之后在安装, 也可以参考 https://github.com/dotless-de/vagrant-vbguest 这个插件的使用, 这个功能比较适合开发人员, 可以在本地编写代码而在 Linux 环境中调试代码运行.
Docker 和 vagrant 都是最近才开始了解学习的, 有什么错误或者不对的地方还请大家指正, 有什么不懂的也可以一起交流.
来源: https://www.cnblogs.com/zpzhue/p/9498024.html