Docker学习笔记

原文

01 Docker要解决什么问题

一、环境配置的难题

编程开发最麻烦的一件事,就是环境配置。如果你的计算机环境不符合要进行测试或使用的软件的要求,那么你就无法进行测试使用。同时,好多老旧模块已经发生了与当前环境不兼容的情况,而且随着技术发展速度越来越快,这些问题将会越来越严重。
环境的配置复杂费时,降低了开发的效率。很多人想,可不可以在根本上解决问题,在安装的时候就把原始环境复制过来。

二、虚拟机

虚拟机就是一种带环境安装的解决方案,它可以在一种操作系统里运行另一个操作系统,比如Windows中运行Linux。
但是虚拟机这个方案也有几个缺点:

  • 资源占用多
  • 冗余步骤多
  • 启动缓慢

三、Linux容器

由于虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

四、Docker来了

Docker就是属于Linux容器的一种封装,提供简单易用的容器使用接口。
Docker将某一应用程序与改程序所需要的环境打包在一个文件里。在Docker中运行这个文件,就会产生一个虚拟的容器,程序在容器里运行,就好像在物理机上运行一样。

五、Docker的用途

1.简化配置。
2.混合云。
3.微服务架构。


02 Docker基础

一、Docker安装

参考官方网站

二、image文件

Docker把应用程序及其所需要的环境依赖,打包放在image文件中。只有拉取拉image文件才能生成容器实例。同一个image文件,可以生成多个同时运行的容器实例。

iamge是二进制文件,一个image文件常常通过继承另一个image文件,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。

#列出本机所有iamge文件
docker images
#删除image文件
docker image rm [iamgeName]

image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用。
Docker 的官方仓库 Docker Hub是最重要、最常用的 image 仓库。

三、容器文件

image 文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。

#列出本机正在运行的容器
docker container ls
//或者
docker ps
#列出本机所有容器,包括终止运行的容器
docker container ls --all
//或者
docker ps -a

上面命令的输出结果之中,包括容器的 ID。很多地方都需要提供这个 ID,比如终止容器运行的docker container kill 命令。

docker container kill [containerID] 

终止运行的容器文件,依然会占据硬盘空间,可以使用docker container rm命令删除。

docker container rm [containerID]

四、实例

1.hello world

下面,我们通过最简单的 image 文件"hello world",感受一下 Docker。

首先,将iamge文件从仓库抓取到本地。

docker image pull library/hello-world

docker image pull 是抓取image文件的命令
library/hello-world是image文件在仓库里的位置

抓取成功以后,可以查看这个image文件,使用命令

docker images

现在,可以运行这个image文件。

docker container run hello-world
#或者省略container
docker run hello-world

如果运行成功,你会在屏幕上读到下面的输出。

Hello from Docker!
This message shows that your installation appears to be working correctly.

··· ···

输出相关提示后,hello-world就会停止运行,容器自动终止。

有些容器不会自动终止,因为提供的是服务。比如,安装运行Ubuntu的iamge,就可以在命令行体验Ubuntu系统。

docker container run -it ubuntu bash
//或者
docker run -it ubuntu bash

对于那些不会自动终止的容器,必须使用docker container kill 命令手动终止。

2.sqli-labs

接下来,我们部署某一服务——SQL注入练习平台sqli-labs

首先在docker中搜索sqli-labs

docker search sqli-labs

在找到相应的镜像后,进行拉取(我用的是NAME为acgpiano/sqli-labs的镜像)

docker pull acgpiano/sqli-labs

Docker会将sqli-labs的镜像下载到本地,等待下载完毕后,就可以运行镜像产生容器

docker run -dt --name sqli -p 80:80 --rm acgpiano/sqli-labs

-d 后台运行容器
--name sqli 为容器指定一个名称 'sqli'
-p 80:80 将容器的80端口映射到本地的80端口
--rm 容器退出时就能够自动清理容器内部的文件系统。

五、Docker命令

1. docker start
前面的docker run命令是新建容器,每运行一次,就会新建一个容器。同样的命令运行两次,就会生成两个一模一样的容器文件。如果希望重复使用容器,就要使用docker start命令,它用来启动已经生成、已经停止运行的容器文件。

docker start [containerID]

2. docker stop
前面的docker kill命令终止容器运行,相当于向容器里面的主进程发出 SIGKILL 信号。而docker stop命令也是用来终止容器运行,相当于向容器里面的主进程发出 SIGTERM 信号,然后过一段时间再发出 SIGKILL 信号。

docker stop [containerID]

这两个信号的差别是,应用程序收到 SIGTERM 信号以后,可以自行进行收尾清理工作,但也可以不理会这个信号。如果收到 SIGKILL 信号,就会强行立即终止,那些正在进行中的操作会全部丢失。

3. docker logs
docker logs命令用来查看 docker 容器的输出,即容器里面 Shell 的标准输出。如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令查看输出。

docker logs [containerID]

4. docker exec
docker exec命令用于进入一个正在运行的 docker 容器。如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令了。

docker  exec -it [containerID] /bin/bash

5. docker cp
docker cp命令用于从正在运行的 Docker 容器里面,将文件拷贝到本机。下面是拷贝到当前目录的写法。

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

推荐阅读更多精彩内容

  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,468评论 0 120
  • 原文地址:LoveDev Docker相对于传统意义上的虚拟机最大的区别就在于传统虚拟机是虚拟出一套硬件后,再在上...
    KevinLive阅读 3,740评论 3 7
  • Docker 和虚拟机 容器内的进程是直接运行于宿主内核的,这点和宿主进程一致,只是容器的 userland 不同...
    Jancd阅读 482评论 0 8
  • 端午假期,维持着“葛优摊”的姿势躺在沙发上拿着遥控器换台。看了个无数个台在转播激烈的龙舟赛事,或者各式各样的粽子,...
    Solweigh阅读 511评论 1 2
  • 鱼小泡和小沫 那是个没有一丝风的下午 我在诊室里就听见小沫抽抽搭搭的哭 等她进来了 也平复了好久才说话 医生医生你...
    青芷阅读 372评论 0 1