部署文章目录:目录
目录
基础知识
什么是docker
官网:
Docker Docs: How to build, share, and run applications | Docker Documentation
Docker 是一个基于go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
开发环境,测试环境,生产环境不一致,会出现开发环境可用,但其他环境出现问题的情况,使用docker 可以解决这一问题
减少各应用之间的相互影响,比如A应用需要修改环境变量,会影响B应用,如果在两个容器中就没影响了
- 从下面的logo中我们可以看到,一条鲸鱼载着一堆集装箱。在集装箱没有出现之前,运送的货物全部都堆在一条船上运输,很容易造成货物损坏,比如我运送一批货物,里面有水果,化学物品,木头。当这批货物堆在一条船上一起运送的时候,有可能会发生化学物品泄露导致水果被污染,或者木头松动导致砸坏化学物品。这个时候为了避免货物损失,会安排多条船去运送这批物资,但是这样又会造成运送成本的增加,这个时候就发明了集装箱,把不同的货物通过集装箱隔离开。这样所有的货物放在一条船上,就不会出现互相污染的情况了。
- 那么docker是什么呢?docker就是那头鲸鱼货轮+集装箱的集合体,它可以将货物进行分类包装进集装箱,并提供一条存放集装箱的货轮。这样,通过想把集装箱送往哪个地方就送往哪个地方。
docker核心概念
docker三大核心概念:镜像 Image、容器 Container、仓库 Repository
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。基于镜像可以创建容器,同一个镜像可以创建多个容器;
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。镜像存放在仓库中,可以从仓库中拉取。
docker架构及原理
Docker 使用客户端-服务器 (**C/S**) 架构模式,使用远程API来管理和创建Docker容器。 架构上可以分为客户端和服务端; **Docker Daemon**是docker的守护进程; **containerd**是容器运行的进程,是实现容器的核心; 客户端通过内部的API和服务端的守护进程进行交互,守护进程再通过**containerd**分发到各个容器;
Docker和虚拟机
说到Docker就要提到虚拟机了,在Docker流行之前,虚拟机是开发人员部署开发环境的普遍方法。但是虚拟机的缺点是消耗太多不必要的资源和内存,速度也很慢。从一张图就可以看出为什么Docker会比虚拟机更快,更方便。
可以看到Docker和VM的区别,是没有Guestos,而是用Docker Engine代替。虚拟机的Guest OS即为虚拟机安装的操作系统,它是一个完整的操作系统内核,而Docker就显得简练很多,docker Engine可以简单看成对Linux和NameSpace,Cgroup,镜像管理文件的系统操作的分装。Docker没有和虚拟机一样利用一个完全独立的Guest OS 实现环境隔离,它利用的是目前Linux内核本身支持的容器实现资源和环境隔离。
docker命令
其他命令参考docker命令大全:Docker 命令大全 | 菜鸟教程
下载和安装docker
windows:
DockerToolbox在Win7上的安装和设置
为什么使用Docker Toolbox
Docker在Windows上使用有两种方式,一是利用VirtualBox建立linux虚拟机,在linux虚拟机中安装docker服务端和客户端,二是利用Windows的Hyper-v虚拟化技术,直接在Windows上安装docker服务端和客户端。WIndows7不支持Hyper-v,所以只能采用Docker Toolbox的方式使用Docker。下载地址:https://docs.docker.com/toolbox/overview/
安装过程很简单,保持默认选项,直接【next】即可。VirualBox和Git如果已经安装,也可以不选
如果已经安装了virtualbox,建议先卸载自己的virtualbox,在这里重新安装,否则启动docker时会报错
1、Docker Toolbox安装图文教程
注意:
1、在第四张教程图片中,可以不勾选Install VirtualBox with NDISS。
2、过程中,需要安装一个串行设备,切记点击安装!
安装完成后,桌面上会多出3各图标,如下。其中VirtualBox提供了linux虚拟机的运行环境,Docker Quickstart Terminal用于快速介入linux虚拟机,提供命令行交互,Kitematic是docker GUI很少用到。
启动
第一次运行Docker Quickstart Terminal时会进行Docker环境的初始化,会在VirtualBox中自动创建名字为【default】的linux虚拟机
利用Xshell登录
Docker Quickstart Terminal使用起来不方便,可以使用XShell进行SSH登录Docker环境(其实就是远程访问default linux虚拟机)。
通过在PowerShell或cmd终端中执行【docker-machine ls】命令,可以看到虚拟机的地址,本机是192.168.99.100。
default虚拟机的默认用户名和密码
用户名:docker
密码: tcuser
登录成功页面:
更改虚拟磁盘存储位置
虚拟机的默认存储位置是C:\Users\Administrator\.docker\machine\machines ,后期docke镜像文件会不断增加,为了给系统盘减负,最好将磁盘移动到其他位置。
- 首先通过PowerShell或cmd终端中执行【docker-machine stop default】命令停止default虚拟机
- 通过VirtualBox【管理】-》【虚拟介质管理】界面对虚拟磁盘进行复制
需要注意虚拟磁盘类型的选择
- 为虚拟机添加新复制的虚拟磁盘,删除之前的dick
macbook:
从官网下载 Install Docker Desktop on Mac | Docker Docs
更改配置,在任务栏点击 Docker Desktop 应用图标 -> Perferences,在左侧导航菜单选择 Docker Engine,在右侧像下边一样编辑 json 文件。修改完成之后,点击 Apply & Restart 按钮,Docker 就会重启并应用配置的镜像地址了
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://docker.mirrors.ustc.edu.cn"
]
更改镜像仓库地址
docker默认的镜像仓库地址是https://hub.docker.com/,但国内的下载速度太过缓慢,最好使用国内镜像,比如阿里云。
首先需要注册阿里云账号,然后在https://cr.console.aliyun.com/页面的左侧可以看到【镜像加速器】选项
在powershell或cmd中通过 【docker-machine ssh default】命令登录虚拟机(或使用设置好的XShell连接),执行如下命令:
1 |
|
然后重启default
1 |
|
修改之后,用docker info命令查看, Registry Mirrors所配置的镜像地址
idea集成docker
打开Settings设置界面
选择Build Exection Deployment=>Docker
点击+号,创建一个Docker连接,指定Docker Machine为default,默认的虚拟机。
点击右下角的Apply
底部出现Docker工具栏
在Images右键Pull Image拉取镜像
在Repository中输入指定的镜像名,比如httpd,mysql,nginx等名称。
latest是Tag中是最新的Tag版本。
拉取成功之后,右键Create container
设置端口映射
由于此处选择了mysql,所以要设置mysql的密码。
docker命令
docker stats <容器 ID>
该命令可以查看容器资源的使用情况,包括 CPU 占用率、内存使用量、网络使用量等。
查看虚拟机:docker-machine ls
进入虚拟机:docker-machine ssh 虚拟机名称
退出虚拟机:exit
启动虚拟机:docker-machine start 虚拟机名称
停止虚拟机:docker-machine stop 虚拟机名称
重启虚拟机:docker-machine restart 虚拟机名称
删除虚拟机:docker-machine rm 虚拟机名称
查看虚拟机环境信息:docker-machine env 虚拟机名称
注:若进入虚拟机,对虚拟机的启动、停止、重启、删除操作,需先退出虚拟机
dockerFile的指令详解
docker迁移
docker迁移分为容器迁移和镜像迁移
容器迁移和镜像迁移的区别:
1)容器(export 导出、import导入) :
- 是将当前容器 变成一个新的镜像,导入时会丢失镜像所有的历史,所以无法进行回滚操作(docker tag <LAYER ID> <IMAGE NAME>);
- 从容器(container)中导出tar文件
- 若是在启动容器后,容器内容有变化,需要备份,则使用export、import。
2)镜像(save保存、load加载):
- 是复制的过程,没有丢失镜像的历史,可以回滚到之前的层(layer)。(查看方式:docker images --tree)
- 镜像导出的 tar 文件比容器导出文件大。
- 从镜像(images)中导出
- 若是只想备份images,使用save、load即可
容器迁移
把已经制作好的容器,迁移到别的服务器上,比如,我有个MYSQL数据库,里面有个表,表里有数据,可以用MYSQL自带的数据迁移,也可以使用docker的容器迁移方式
容器导出
docker export [-o|--output[=""]] CONTATINER
或者
docker
export
容器
id
/name
>文件名.
tar
我的命令是:
docker export 24624966d8c8 >lzs_mysqlv1.tar
其中可以通过-o来指定导出的tar文件名,也可以直接通过重定向来实现。
通过SCP或者sftp等方式,将容器拷贝到目标服务器上
容器加载
docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|-[REPOSITORY[:YAG]]
我的命令是
docker import /d/DB/lzs_mysqlv1.tar lzs_mysql:1.0
其中-c 选项可以在导入的同时执行对容器进行修改的Dockerfile指令(网络等修改)
此外,也可以通过指定 URL 或者某个目录来导入,例如
$sudo docker import http://example.com/exampleimage.tgz example/imagerepo
加载镜像成功,通过镜像生成容器,MYSQL还需要迁移数据文件,此部分没有
镜像迁移
镜像导出
docker save -o output.tar ID/NAME:VERSION
或
docker save > output.tar ID/NAME:VERSION
镜像加载
docker load -i output.tar
或
docker load < output.tar
其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
参考文章:
https://www.cnblogs.com/canger/p/9028723.html
Docker Toolbox:Docker Toolbox的简介、安装、使用方法之详细攻略_dockertoolbox_一个处女座的程序猿的博客-CSDN博客