Docker入门

Docker入门

一、Docker简介

1.什么是Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口。

e1b48195415f79f752e4da6e773bd3e.png

核心概念:

1.Docker镜像

类似于虚拟机镜像,可以理解为一个面向Docker引擎的只读模板,包含了文件系统。
例如:一个镜像可以包含一个完整的Ubuntu操作系统环境,可以把它称为一个Ubuntu镜像。镜像也可以安装了Apache应用程序,可以把它称为一个Apache镜像。
镜像是创建Docker容器的基础。通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并通过简单的命令就可以直接使用。

2.Docker容器

Docker容器(Container)类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。
容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。
可以把容器看做一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序打包而成的应用盒子。
镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。

3.Docker仓库

Docker仓库(Repository)类似于代码仓库,是Docker集中存放镜像文件的场所。
注册服务器:Registry
注册服务器是存放仓库的地方,其上往往放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。
根据所存储的镜像公开分享与否,Docker仓库可以分为

  • 公开仓库(Public):最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供稳定的国内访问。
  • 私有仓库(Private):用户如果不希望公开分享自己的镜像文件,Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。
    当用户创建了自己的镜像之后就可以使用push命令将它上传到指定的公有或者私有仓库。这样用户下次在另外一台机器上使用该镜像时,只需将其从仓库上pull下来就可以了。

2.安装

官网:www.docker.com
Linux安装:

$ sudo wget -qO- https://get.docker.com/ | sh 
安装docker本身
sudo:当前用户是普通用户,但执行该命令时使用root身份执行
wget:命令行下载工具
-q:使wget输出不要那么多
O-:把wget的输出直接输出到标准输出,而不是输出到文件
|:管道 
| sh:把输出交给sh

$ sudo usermod -aG docker xxx  
允许非root用户(非superuser)来运行docker
修改用户组,把这个用户组加入到docker组里面(用户如果在docker组里,则可以不用sudo,不需要root就可以执行docker命令)

检查是否安装成功:docker info
如果执行此命令报错,则是docker没有启动,在centos中,使用

service docker start
安装docker.png
查看信息.png

3.Docker架构

docker架构.png

Docker host:进行docker操作的宿主机
Docker Daemon:负责各种各样的docker操作,比如下载docker镜像,运行一个容器,客户端通过命令,把命令交给docker daemon,由docker Daemon来做实际的操作。
Registry:互联网的saas服务,daemon可以和registry交互,比如获取一个image,或者push一个image;是Docker的镜像存储服务端。

架构.png

客户端和守护进程进行操作,把命令送给守护进程,守护进程拖取镜像,运行容器并和远端的镜像仓库进行交互。

4.使用docker

docker run centos echo hello docker
1787a55467271333a42791543e0fbf4.png

在centos这个image里运行了echo hello docker命令

docker在运行一个容器之前会先查看本地是否有该容器需要的image,如果没有则会从远端下载。

使用docker images命令查看本地的所有images:


docker images.png
docker run -p 8080:80 -d daocloud.io/nginx
返回一串字符串:contain的id
-p:做端口映射,把docker nginx本身的80端口映射到本地的host的8080端口。
-d:允许程序直接返回,把container作为守护进程来执行。

使用docker ps命令查看当前正在运行的docker的container:

dockerps.png

5.docker基础命令

命令 用途
docker pull 获取image(镜像)
docker build 创建image
docker images 列出image
docker run 运行container
docker stop 容器id 停止容器
docker ps 列出正在运行的container
docker ps -a 列出所有的container
docker rm 容器id 删除container
docker rmi 删除image
docker cp 在host和contaiiner之间拷贝文件
docker commit 保存改动为新的image

二、镜像与容器

1.docker commit

在使用docker cp index.html 32daa9dcs45c://usr/share/nginx/html修改了nginx的图片页面,停止再重启docker容器,
使用docker run -p 8080:80 -d daocloud.io/nginx查看,之前所做的改动会失效:
docker在容器内所做的修改的都是暂时的,没有被保存下来的

要永久保存:
修改:docker cp index.html e5f32u43k51://usr/share/niginx/html
保存:docker commit -m 'fun' e5f32u43k51 nginx-fun 返回一个新产生的imageid
此时是产生了一个跟之前一模一样的image,可以把之间的删除掉。

2.dockerfile

通过编写简单的文件自创docker镜像

第一个Dockerfile

FROM alpine:latest  要产生的新镜像有一个baseimage基础镜像
MAINTAINER hcx  共享时告诉其他人,这是hcx写的
CMD echo 'hello docker' 运行的命令:echo ‘hello docker’

alpine:专门针对Docker来做的一个极小的linux环境

docker build

使用Docker命令构建一个image:

docker build -t hello_docker .
-t:设定一个标签:hello_docker
.:路径名,把该路径下的所有内容送到docker engine,让其产生image。
e9f1c24c261b4fb4744eb1ad06555ed.png

docker images hello_docker:查看是否生成了该文件
docker run hello_docker:运行该image

Dockerfile语法

命令 用途
FROM base image (指定一个基础镜像)
RUN 执行命令 (在容器内执行一个命令)
ADD 添加文件(往容器中添加文件,还可以将远程的文件加入到容器里面)
COPY 拷贝文件(拷贝一个文件或目录)
CMD 执行命令 (给容器指定一个执行的入口)
EXPOSE 暴露端口
WORKDIR 指定路径(指定命令运行的路径)
MAINTAINER 维护者
ENV 设定环境变量
ENTRYPOINT 容器入口
USER 指定用户(指定执行该命令的用户)
VOLUME mount point(指定容器所挂载的卷)

3.镜像分层

Dockerfile中的每一层都产生一个新层

FROM alpine:latest 4e38e38c7ct0
MAINTAINER hcx   fb1gail4315b
CMD echo 'hello docker' 8gf243gsfe8
镜像分层.png

三、容器存储

1.Volume

提供独立于容器之外的持久化存储

2.Volume操作

$ docker run -v /usr/share/nginx/html nginx
771c87f9b0081506f446eddc0da058d.png
docker inspect nginx
a31115298de1c2e9b9cac8a3ccf2e2b.png
b2d74e01849fcdfea0bfe5df4dd4026.png

本地目录挂在到容器里的

$ docker run -v $PWD/code:/var/www/html nginx

把当前的目录映射到容器里:

$ docker run -p 80:80 -d -v $PWD/html:/usr/share/nginx/html nginx
$PWD:shell的宏变量,始终指向当前目录
$PWD/html:当前目录下的html目录
/usr/share/nginx/html:挂载在容器里的目录
把当前的host目录挂到容器里的/usr/share/nginx/html目录

$ docker run -volumes-from

四、Registry 镜像仓库

English 中文
host 宿主机
image 镜像
container 容器
registry 仓库
daemon 守护进程
client 客户端
$ docker search whalesay
$ docker pull whalesay
$ dorcker push myname/whalesay

国内的一些仓库:

  • daocloud
  • 时速云
  • aliyun
bc183f83eb465ad6ab31ff7648a0183.png
HelloDocker.png

产生一个新tag,并共享到hub里:

5e7509d03896647cfa120ce4b3e4112.png

五、docker-compose 多容器app

1.安装docker-compose

linux上安装docker-compose:

curl -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s) -$(uname -m) > /usr/local/bin/docker-compose

下载一个二进制文件再将其变为可以执行的

docker-compose:

docker-compose.png

docker-compose.yaml:

docker-compose.yaml.png

docker-compose.yml常用命令:

命令 用途
build 本地创建镜像
command 覆盖缺省命令
depends_on 连接容器
ports 暴露端口
volumes
image pull镜像
up 启动服务
stop 停止服务
rm 删除服务中的各个容器
logs 观察各个容器的日志
ps 列出服务相关的容器
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,306评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,657评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,928评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,688评论 0 220
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,105评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,024评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,159评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,937评论 0 212
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,689评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,851评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,325评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,651评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,364评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,192评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,985评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,154评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,955评论 2 279

推荐阅读更多精彩内容