超哥

https://www.cnblogs.com/pyyu/p/9485268.html#
Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。
容器里面的应用,直接就是底层系统的一个进程。
多个容器可以共享资源。
容器只包含他用到的组件。
docker创建的所有虚拟实例共有一个Linux内核。
docker三大概念:镜像,容器,仓库
镜像就是一个只读模板,镜像可以用来创建容器。
union FS技术,分层存储,
镜像和容器的关系,就像类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。
容器可以被创建,启动,停止,删除,暂停
docker利用容器来运行应用程序
容器是从镜像创建的运行实例,每个容器之间是隔离的。
可以把容器看作一个简易版的Linux环境和运行在其中的应用程序。
仓库是集中存放镜像的地方,仓库分为公开仓库public和私有仓库private。最大的公开仓库是docker hub,存放了数量庞大的镜像供用户下载。
当用户创建的了自己的镜像后就可以使用push命令将他上传到公有或私有仓库。
国内的一些云服务商提供了针 对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为加速器。
使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从官方网站下载速度会提高很多。
官方教程如下,最正确安装docker姿势

docker最低支持centos7且在64位平台上,内核版本在3.10以上
[root@oldboy_python ~ 10:48:11]#uname -r
3.10.0-693.el7.x86_64

1.卸载旧版本
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

2.设置存储库
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3.安装docker社区版
sudo yum install docker-ce
4.启动关闭docker
systemctl start docker

Docker镜像加速器

一条命令加速

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io

docker基础命令注释

[root@docker ~]# docker --help

使用docker镜像

从仓库获取镜像
管理本地主机的镜像
获取镜像
从docker registry获取镜像的命令是docker pull。命令格式是:
docker pull [选项][docker registry地址] 仓库名:标签
image文件是通用,可以共享的
列出所有的image文件
docker image ls
删除image文件
docker image rm [imagename]
[root@docker ~]# docker search centos #搜索所有centos的docker镜像
可以使用docker pull命令来从仓库获取所需要的镜像。
[root@docker ~]# docker pull centos #获取centos镜像
[root@docker ~]# docker run -it centos /bin/bash #完成后可以使用该镜像创建一个容器
镜像的ID唯一标识了镜像,如果ID相同,说明是同一镜像。
TAG信息来区分不同发行版本,如果不指定具体标记,默认使用latest标记信息。
[root@docker ~]# docker images #查看docker镜像
如果要移除本地的镜像,可以使用docker rmi命令(在删除镜像之前先用docker rm删除依赖于这个镜像的所有容器)。注意docker rm 命令是移除容器。
[root@docker ~]# docker rmi imageID #删除docker镜像
如果要导出镜像到本地文件,可以使用docker save命令。
[root@docker ~]# docker save centos > /opt/centos.tar.gz #导出docker镜像至本地
可以使用docker load从本地文件中导入到本地docker镜像库
[root@docker ~]# docker load < /opt/centos.tar.gz #导入本地镜像到docker镜像库
[root@docker~]# docker images #查看镜像导入情况
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在停止状态(stopped)的容器重新启动。
[root@docker ~]# docker run centos /bin/echo "hehe"
[root@docker ~]# docker run --name mydocker -it centos /bin/bash#启动一个终端,允许用户进行交互。
--name:给容器定义一个名称
-i:则让容器的标准输入保持打开。
-t:让Docker分配一个伪终端,并绑定到容器的标准输入上
/bin/bash:执行一个命令

当利用docker run来创建容器时,Docker在后台运行的标准操作包括

检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启动一个容器
分配一个文件系统,并在只读的镜像层外面挂在一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个ip地址给容器
执行用户指定的应用程序
执行完毕后容器被终止

获取镜像 hello-world

docker pull hello-world

检查镜像

docker images

运行image文件,可以用容器id

docker run hello-world

检查docker容器进程

docker ps

检查所有运行过的容器

docker ps -a

运行一个Ubuntu容器

[root@oldboy_python ~ 11:52:22]#docker pull ubuntu:14.04
下载过程可以看出镜像是由多层存储构成的。下载也是一层一层,并非单一的文件。
下载过程中给出每一层的前12位ID。下载结束后会给出sha246的文件一致性校验值。
运行Ubuntu容器
[root@oldboy_python ~ 12:18:53]#docker run -it --rm ubuntu:14.04 bash
root@3efbb2749d7c:/# cat /etc/os-release

使用exit退出容器

docker run就是运行容器的命令。
参数
-it : -i 是交互式操作,-t是终端
-rm : 容器退出后将其删除。也可以不指定参数,手动docker rm,使用-rm可以避免浪费空间。
ubuntu:14.04 这指的是镜像文件
bash : 指定用交互式的shell,因此需要bash命令
-d参数:后台运行容器,返回容器ID
[root@oldboy_python ~ 15:58:14]#docker run -d centos /bin/sh -c "while true;do echo hello centos; sleep 1;done"

docker start c02
docker stop c02
docker logs c02
docker rm c02
docker ps
docker images #列出所有本级镜像
docker pull centos #获取新的centos镜像
docker search nginx #搜索nginx镜像

构建镜像

1.通过commit修改镜像
2.编写dockerfile

进入容器
使用-d参数时,容器启动后会进入后台。某些时候需要进入容器进行操作,有很多种方法,包括使用docker attach命令或nsenter工具等。
docker exec -it 容器id
docker attach 容器id

提交创建自定义的镜像(docker container commit)

1.我们进入交互式的centos容器中,发现没有vim命令
docker run -it centos
2.在当前容器中,安装一个vim
yum install -y vim
3.安装好vim之后,exit退出容器
exit
4.查看刚才安装好vim的容器记录
docker container ls -a
5.提交这个容器,创建新的image
docker commit 059fdea031ba chaoyu/centos-vim
6.查看镜像文件
[root@master /home]docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
chaoyu/centos-vim latest fd2685ae25fe 5 minutes ago 348MB

外部访问容器

容器中可以运行网络应用,但是要让外部也可以访问这些应用,可以通过-p或-P参数指定端口映射。
-P 参数会随机映射端口到容器开放的网络端口
[root@oldboy_python ~ 16:31:37]#docker run -d -P training/webapp python app.py
检查映射的端口

宿主机ip:32768 映射容器的5000端口

[root@oldboy_python ~ 16:34:02]#docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
cfd632821d7a        training/webapp     "python app.py"     21 seconds ago      Up 20 seconds       0.0.0.0:32768->5000/tcp   brave_fermi

也可以通过-p参数指定映射端口

指定服务器的9000端口,映射到容器内的5000端口

[root@oldboy_python ~ 16:46:13]#docker run -d -p 9000:5000 training/webapp python app.py
查看指定容器的端口映射
[root@oldboy_python ~ 16:49:01]#docker port c0b
5000/tcp -> 0.0.0.0:9000
查看容器内的进程
[root@oldboy_python ~ 16:49:05]#docker top c0b

利用dockerfile定制镜像

镜像是容器的基础,每次执行docker run的时候都会指定哪个镜像作为容器运行的基础。我们之前的例子都是使用来自docker hub的镜像,直接使用这些镜像只能满足一定的需求,当镜像无法满足我们的需求时,就得自定制这些镜像。
镜像的定制就是定制每一层所添加的配置、文件。如果可以把每一层修改、安装、构建、操作的命令都写入到一个脚本,用脚本来构建、定制镜像,这个脚本就是dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令 构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

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

推荐阅读更多精彩内容

  • 1.容器的生命周期: * 检查本地是否存在镜像,如果不存在即从远端仓库检索 * 利用镜像启动容器 * 分配一个文件...
    你好树洞先生阅读 480评论 0 0
  • docker容器 1:什么是容器? 容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。 隔离的环境拥...
    Zh_bd92阅读 278评论 0 0
  • docker容器 docker容器1:什么是容器?2:容器和虚拟化的区别3:容器技术的发展过程:1):chroot...
    青衫忆笙666阅读 1,430评论 0 0
  • Docker => 1.31.1 Jenkins => 2.174 安装Docker [root@localhos...
    唐潮_小五阅读 1,177评论 0 0
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,030评论 0 4