Docker初识 -- 搭建编程环境

原文地址(欢迎访问):
https://www.jianshu.com/p/6a6eee0d9ea5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

1. 学习步骤
  1. Docker简介
  2. Docker中的基本概念
  3. Docker安装
  4. 设置Docker
  5. Docker的应用操作
  6. Docker搭建PHP开发环境
2. Docker介绍

2.1. Docker 是什么

Docker是一个开源的应用容器引擎,基于Go 语言开发实现,属于操作系统层面的虚拟化技术。
Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何安装有Docker的电脑(windowsLinux)上。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhoneapp),更重要的是容器性能开销极低。

f703738da977391281957edbf0198618377ae2dd.jpg

2.2. Docker 能够做什么

Docker可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于电脑资源要求过高而无法解决的问题。
虚拟机和Docker虚拟化的不同之处:

docker.jpg

2.3. 为什么使用 Docker

1、更快速的交付和部署:
对开发和运维员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
例如:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
节约安装各种开发环境的软件的时间。
解决开发环境和生产环境不一致的问题。
2、更轻松的迁移和扩展:
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
3、更高的资源利用率:
Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用容器即可。
总结:
Docker背后的想法是创建软件程序可移植的轻量级容器,让其可以在任何安装了Docker的机器上运行,并不用关心底层操作系统,就像野心勃勃的造船者们成功创建了集装箱而不需要考虑装在哪种船舶上一样。
只有一个共同目标:简化部署流程,提高生产力!

2.4. Docker 项目架构

Docker使用C/S架构,通过docker客户端连接到Docker服务器上从而管理Docker服务器里面的镜像和容器,类似于git的架构。

docker.jpg

2.5. Docker 的基本概念

2.5.1. 镜像( Image
Docker 镜像(Image)就是一个只读的模板。例如:一个镜像可以包含一个完整的操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

2.5.2. 容器(Container
Docker 利用容器(Container)来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
文件系统隔离技术使得Docker成为了一个非常有潜力的虚拟化技术。在容器中可以对文件进行修改、删除、创建。

2.5.3. 仓库(Registry
仓库(Repository)是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括 时速云 、网易云 等,可以提供大陆用户更稳定快速的访问。当然,用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。

3. Windows 10 下安装 Docker

3.1. 系统要求

一、64bit Windows 10 Build 10586 以上专业版或者企业版本,电脑支持虚拟化。
二、开启Hyper-V。
三、win7、win8 等需要利用 docker toolbox 来安装。

3.1.1. 查看系统版本和版本号

查看系统信息:

docker.jpg

查看版本号:
win+R 输入 cmd 进入 dos 系统就可以看到

docker.jpg

3.1.2. 电脑支持虚拟化

对于windows10系统来说,你可以在 任务管理器->性能 中查看到你的电脑是否开启了虚拟化

docker.jpg

在BIOS下开启虚拟化虚拟化:

docker.jpg

3.1.3. 开启Hyper-V

windows设置 -> 应用 -> 应用和功能 -> 程序和功能 -> 启用和关闭Windows功能 -> 选中Hyber-V -> 重启
选中Hyper-V后确定重启电脑

docker.jpg

注意:Hyper-V 是与 VMware 是冲突的,两者不能并存,只能择其一,如果你必须要使用虚拟机的话,比如 Vagrant 之类的工具,亦可在虚拟机内运行一个 Linux 系统,然后根据 Linux 系统 的安装流程处理,在虚拟机内运行 Docker 作为开发环境。

3.2. 安装Docker for Windows
3.2.1. 下载Docker for Windows

https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.exe

3.2.2. 安装

双击下载的Docker for Windows Installer.exe安装完毕即可。

3.2.3. 启动

启动之后会在电脑的右下角查看到docker的图标

docker.jpg
4. 简单使用 Docker

4.1. 使用Docker的前提

必须通过 dos命令 行来操作Docker。win+R 输入 cmd 进入 dos 系统

4.2. Docker命令初体验

docker info #查看docker信息
docker version #查看docker版本
docker run hello-world #运行第一个容器

5. 设置Docker

5.1. 切换到Linux容器下

docker for windows 默认使用linxu容器。如有需要可切换到win容器下。
右键点击docker图标:

docker.jpg

5.2. 镜像加速

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,强烈建议安装 Docker 之后配置 国内镜像加速。

5.2.1. 获取阿里云加速器地址

  1. 进入 http://dev.aliyun.com
  1. 登录阿里云进入后台
docker.jpg

5.2.2. 配置docker加速器

对于使用 Windows 10 的系统,在系统右下角托盘 Docker 图标内右键菜单选择Settings,打开配置窗口后左侧导航菜单选择 Daemon。在 Registry mirrors 一栏中填写加速器地址你的专属加速器地址,之后点击 Apply 保存后 Docker 就会重启并应用配置的镜像地址了。

docker.jpg

5.2.3. 检查加速器是否生效

手动检查加速器配置是否生效,在命令行执行 docker info,如果从结果中看到了如下内容,说明配置成功。

docker.jpg
6. Docker 镜像操作

6.1. 获取镜像(下载镜像到本地)
Docker Hub 上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像。

Docker 镜像仓库获取镜像的命令是docker pull。其命令格式为:
docker pull [选项] [Docker Registry 地址 [:端口号] /] 镜像名 [:标签]

具体的选项可以通过 docker pull --help

Docker 镜像仓库地址:地址的格式一般是<域名/IP>[:端口号]。默认地址是 Docker Hub,但我们已经将其修改为阿里云的加速器。

例如:

docker pull training/webapp
docker pull busybox
docker pull centos
备注:↓
training/webapp : pythonapp
busybox:是一个集成了三百多个最常用Linux命令和工具的软件,简化的Linux系统
centos: centos系统容器

6.2. 列出本地镜像

要想列出已经下载下来的镜像,可以使用 docker image ls 命令。

docker.jpg

列表包含了 镜像名、版本、镜像 ID、创建时间 以及所占用的空间。

6.3. 删除本地镜像

如果要删除本地的镜像,可以使用 docker image rm 命令,其格式为:
docker image rm [选项] <镜像1> [<镜像2> ...]
备注:
用 ID、镜像名、摘要删除镜像
其中,<镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要。
我们可以用镜像的完整 ID,也称为 长 ID,来删除镜像。使用脚本的时候可能会用长 ID,但是人工输入就太累了,所以更多的时候是用 短 ID 来删除镜像。docker image ls 默认列出的就已经是短 ID 了,一般取前3个字符以上,只要足够区分于别的镜像就可以了。
例如:
docker image rm training/webapp

7. Docker 容器操作

7.1. 说在前面

/bin/bashlinux的命令行工具,类似于windowcmd进入dos系统

7.2. 查看容器

docker ps #查看启动的容器
docker ps -a #查看所有容器,包含没有启动的容器

7.3. 启动容器

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。

因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。

语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
COMMAND: 容器启动后进入容器中要执行的命令.
OPTIONS(常用选项)
-d:让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下
-t:选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
-i:则让容器的标准输入保持打开。
--name:为容器命名
-v:创建数据卷
-p:绑定端口

7.3.1. 基于镜像新建一个容器并启动

docker run

例如:
docker run -p 8000:5000 –-name web training/webapp

实际操作举例:

启动pythonapptraining/webapp,并绑定本机端口8000映射到容器5000端口

docker.jpg

访问本机

docker.jpg

7.3.2. 后台运行

更多的时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现。
docker run -d CONTAINER [CONTAINER...]

例如:
docker run –d –p 8000:5000 training/webapp

7.3.3. 交互运行

启动一个 bash 终端,允许用户进行交互。
docker run -t -i CONTAINER [CONTAINER...] /bin/bash

-t选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的 标准输入 上
-i则让容器的 标准输入 保持打开。

在交互模式下,用户可以通过所创建的终端来输入linux命令
例如:

docker run -i -t centos /bin/bash
创建centos容器并且进入centos容器中

docker.jpg

7.4. 终止容器
docker stop CONTAINER [CONTAINER...]

例:

docker.jpg

7.5. 启动一个停止的容器
docker start CONTAINER [CONTAINER...]

例:

docker.jpg

7.6. 重启容器
docker restart CONTAINER [CONTAINER...]

例:

docker.jpg

7.7. 删除容器
docker rm CONTAINER [CONTAINER...]
注意:删除容器前 先关闭容器

例:

docker.jpg

7.8. 获取容器的输出信息
docker logs [OPTIONS] CONTAINER

options:
        --details        显示更多的信息
    -f, --follow         跟踪实时日志
        --since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
        --tail string    从日志末尾显示多少行日志, 默认是all
    -t, --timestamps     显示时间戳
        --until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

例:

docker.jpg

查看指定时间后的日志,只显示最后100行:

docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID

查看最近30分钟的日志:

docker logs --since 30m CONTAINER_ID

查看某时间之后的日志:

docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID

查看某时间段日志:

docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID

7.9. 进入容器
docker exec –i –t CONTAINER /bin/bash

例:

docker.jpg

7.10. 主机和容器间拷贝文件
7.10.1. 容器拷贝到主机
docker cp CONTAINER:/opt/webapp/app.py d:/www

备注:
/opt/webapp/app.py: 容器中的文件
d:/www: 主机文件夹

例:

docker.jpg
docker.jpg

7.10.2. 主机拷贝到容器
docker cp f:/docker_test/文件 CONTAINER:/目标路径

例:

docker.jpg
docker.jpg
8. 数据卷

8.1. 什么是数据卷
数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  1. 数据卷 可以在容器之间共享和重用
  2. 对 数据卷 的修改会立马生效
  3. 对 数据卷 的更新,不会影响镜像
  4. 数据卷 默认会一直存在,即使容器被删除

理解:
1.数据卷 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的数据卷。
2.相当于将容器中的目录 和 本机目录映射起来,在本机目录中修改代码,增加文件等,会实时反映在容器目录中

8.2. 为什么要使用数据卷

方便将本地主机中的代码运行在docker容器中

8.3. 挂载数据卷的前提

授权本地磁盘
docker.jpg

注意:点击Apply的时候,会验证本机账户,没有设置密码的话,去设置一个吧。

8.4. 挂载一个主机目录作为数据卷
docker run -d -P 8000:5000 --name web -v f:/docker:/opt/webapp training/webapp

9. Docker应用-搭建PHP开发环境

9.1. 下载阿里云的lamp镜像

docker pull registry.cn-hangzhou.aliyuncs.com/itsource/centos-lamp:[镜像版本号]
镜像版本号就是TAG的值

9.2. 创建lamp容器并且运行
docker run -itd -p 80:80 -p 3306:3306 --name lamp --privileged=true -v D:/www/default:/data/wwwroot/default ec258725b54b /usr/sbin/init

-i选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,
-t 则让容器的标准输入保持打开。
-d 则让容器在后台运行。
--name lamp为容器起名为lamp
--privileged=true 让container内的root拥有真正的root权限。
-v 创建数据卷,将本地主机目录挂着到容器的指定目录中

10. 制作阿里云镜像

10.1. 制作本地镜像
docker commit -a "itsource.com" -m "this is image" 容器ID 镜像名字:版本

OPTIONS说明:
· -a :提交的镜像作者;
· -m :提交时的说明文字;
· -p :在commit时,将容器暂停。

10.2. 上传阿里云

进入阿里云演示

10.3. 导出镜像到本地

docker save d2b9f203546d -o d:/www/centos-lamp-v2.tar

10.4. 加载本地镜像文件

docker load -i d:/www/centos-lamp-v2.tar

安装wget

yum install wget –y

备份yum源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

阿里云yum源

wget -O /etc/yum.repos.d/CentOS-Base.repo [<u>http://mirrors.aliyun.com/repo/Centos-7.repo</u>](http://mirrors.aliyun.com/repo/Centos-7.repo)

解决bash: service: command not found

yum install initscripts.x86_64 –y

yum install net-tools

docker run -it -p 80:80 --name lamp2 --privileged=true itsource/centos-lamp /usr/sbin/init

docker run -itd -p 80:80 --name lamp3 --privileged=true -v /data/wwwroot/[www.baidu.com:/data/wwwroot/www.baidu.com](http://www.baidu.com:/data/wwwroot/www.baidu.com) itsource/centos-lamp /usr/sbin/init

docker rm $(docker ps -a -q)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容