docker入门——安装(CentOS)、镜像、容器

Docker简介

什么是docker

官方解释

Docker is the company driving the container movement and the only container platform provider to address every application across the hybrid cloud. Today’s businesses are under pressure to digitally transform but are constrained by existing applications and infrastructure while rationalizing an increasingly diverse portfolio of clouds, datacenters and application architectures. Docker enables true independence between applications and infrastructure and developers and IT ops to unlock their potential and creates a model for better collaboration and innovation.

Google翻译:

Docker是推动集装箱运动的公司,也是唯一一家应对整个混合云中的每个应用的集装箱平台提供商。 当今的企业面临着数字化转型的压力,但受到现有应用程序和基础架构的制约,同时合理化日益多样化的云,数据中心和应用程序架构产品组合。 Docker实现了应用程序和基础架构与开发人员和IT操作员之间的真正独立性,从而发挥他们的潜力并创建更好的协作和创新模式。

《Docker从入门到实践》介绍 “什么是Docker”

为什么用docker

在微服务的大背景下,一台物理机或者云主机可能要运行很多应用。应用必须依赖于开发环境。当我们遇到拓展物理机、云主机、应用迁移等场景,必然要重新搭建开发环境。这时,虚拟化技术就很好地保证环境一致、配置一致,并且让你更高效地迁移应用。

Docker正是应对这种场景的虚拟化技术。例如java,只要机器上安装了JVM,一份代码到处运行。应用好比java,只要机器上安装docker,我们事先保存的镜像可以到处运行。这些镜像可以是nginx、php、mysql、数据仓库等,无论你的主机从ubuntu迁移到centos,还是windows迁移linux,只要主机安装了docker,就能迅速地部署好新环境,并且保持环境、配置一致。

详情参考 《Docker从入门到实践》—— “为什么用Docker”


镜像、容器、仓库

镜像,是特殊的文件系统,他包含程序、配置、资源等;

容器,镜像的实例。就像是类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

仓库,用于保存镜像的服务。

详情参考《Docker从入门到实践》——基本概念


CentOS安装docker

安装之前,建议先yum -y upgrade更新软件包。

官方安装脚本

curl -sSL https://get.docker.com/ | sh

官方安装指南:docker/docker-install

阿里云安装脚本

由于国内墙的原因,如果安装官方脚本很慢,可以试试阿里云安装脚本:

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

如果你是其他操作系统,参考一下《安装 Docker》

Windows安装docker

官方文档Install Docker Toolbox on Windows挺详细的了,下载安装docker toolbox。

如果遇到:

This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory.

修改一下BIOS设置:

重启电脑后按F2或F10进入BIOS界面(不同主板型号进入BIOS所需按键不同)。 进入BIOS界面:Configuratio > Intel Virtualization Technology > Enabled。 注:主板不一样其BISO中显示关键词也不一样的,主要是找到Virtual或Virtualization将其设置为Enabled。

重启docker

service docker restart

这一步很重要,如果不重启,docker pull时会有如下错误:

Warning: failed to get default registry endpoint from daemon (Cannot connect to the Docker daemon. Is the docker daemon running on this host?)...

镜像

搜索镜像

你可以在Docker HubDocker Store上搜索你要的镜像。例如,你要找nginx

1.搜索nginx

2.浏览官方nginx镜像详情,可以看到有很多版本(准确来说是tag)选择

拉取镜像

从 Docker Registry 获取镜像的命令是 docker pull官方文档。其命令格式为:

docker pull [选项] name[:tag]

例如,拉取刚才搜到的nginx:latest

docker pull nginx

如果你想拉取某个tagnginx,则执行docker pull nginx:{tag},例如docker pull nginx:1.13。如不写tag,默认latest

如果出现如下信息,说明安装成功

Using default tag: latest
latest: Pulling from library/nginx
8176e34d5d92: Pull complete
cb1142c3ae99: Pull complete
45b531966c63: Pull complete
Digest: sha256:0ffc09487404ea43807a1fd9e33d9e924d2c8b48a7b7897e4d1231a396052ff9
Status: Downloaded newer image for nginx:latest

列出本地镜像

$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              9e988ed19567        43 hours ago        109MB

说明已拉取一个nginx:latest镜像到本地了。

删除镜像

使用docker rmi命令删除镜像,官方文档。格式是:

docker rmi -f {repository}:{tag}

docker rmi -f {image id}

例如,删除刚才安装的nginx:latestdocker rmi -f nginx:latestdocker rmi -f 9e988ed19567


容器

启动容器有两种方式:

  1. 基于镜像新建一个容器并启动;
  2. 重新启动在终止状态(stopped)的容器。

新建并启动

基于镜像启动新容器,用docker run命令,官方文档,格式:

docker run [options] image [command] [arg...]

我们启动nginx

docker run --name my_nginx -p 80:80 -d nginx

(如果启动指定tagnginx,则docker run ... nginx:{tag}即可)

options说明:

--name 指定容器名,"--name my_nginx"指定容器名为"my_nginx";
-p     映射端口,"-p 80:80"表示映射容器80端口到主机80端口,
       参数格式ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort
-d     在后台运行,并打印container id

参考docker run参数

查看容器状态

$ docker ps

CONTAINER ID  IMAGE  COMMAND   ...               PORTS               NAMES                                
fcc368a4d5c0  nginx  "nginx -g 'daemon of…"  ... 0.0.0.0:80->80/tcp  my_nginx

(省略了CREATED & STATUS字段)

如果my_nginx存在,证明容器在运行。假如服务器ip是45.77.146.10,在浏览器打开:

出现nginx画面,证明nginx容器正常运行,并成功映射80端口。

进入容器

使用docker exec命令,官方文档

$ docker exec -it my_nginx bash
root@fcc368a4d5c0:#

对容器的操作,就像普通linux那样。我们定位到/usr/share/nginx/html/目录,列出所有文件:

# cd /usr/share/nginx/html/
# ls
50x.html   index.html

目录下有50x.htmlindex.html两个文件,我们新建一个test.html

echo "<html><header><title>测试页面</title></header>test</html>" >> test.html

在浏览器打开http://45.77.146.10/test.html

停止容器

使用docker stop命令,官方文档,格式:

docker stop [options] container

停止my_nginx容器:

docker stop my_nginx

(也可以指定container id停止容器,docker stop fcc368a4d5c0)

查看停止状态容器

刚才my_nginx容器,只是停止了,并没有销毁。执行命令:

$ docker ps -a

CONTAINER ID   IMAGE   COMMAND                  CREATED         STATUS                     PORTS    NAMES
fcc368a4d5c0   nginx   "nginx -g 'daemon of…"   17 minutes ago  Exited (0) 7 seconds ago            my_nginx

我们看到my_nginx处于停止状态。当已存在namemy_nginx,就不可以再run一个--name my_nginx的容器。

我们试试docker run --name my_nginx -d nginx,会报错:

docker: Error response from daemon: Conflict. 
The container name "/my_nginx" is already in use by container "fcc368a4d5c0f7e0c1fb9bf60780623f1ad5613d68a6496e5fd41bd0a05c3b0a". You have to remove (or rename) that container to be able to reuse that name.

重启容器

docker start my_nginx

然后查看容器状态

$ docker ps
CONTAINER ID    IMAGE   COMMAND                  CREATED           STATUS          PORTS                NAMES
fcc368a4d5c0    nginx   "nginx -g 'daemon of…"   24 minutes ago    Up 7 minutes    0.0.0.0:80->80/tcp   my_nginx

my_nginx已重启,保留着之前的状态。

删除容器

删除容器前,必须先停止容器。删除命令:

docker rm my_nginx

再次查看终止状态容器,docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

my_nginx已被销毁。销毁的容器不能再用docker start启动,必须用docker run新建容器。


关于作者

我是键盘男。
在广州生活,在互联网公司上班,猥琐文艺码农。喜欢科学、历史,玩玩投资。

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

推荐阅读更多精彩内容