Docker在Ubuntu的搭建与使用

docker.png

关于Docker

Docker 是 Docker 公司的开源项目,使用 Google 公司推出的 Go 语言开发的,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护,大概在2017年4月份左右Docker项目突然改名为Moby,所以在Github搜索Moby才可以找到这个项目。

Docker的内核建立在LXC(Linux Container)之上,作为容器的一种,同传统的虚拟机比起来,容器内的应用/进程直接运行在宿主机的内核上,容器没有自己的内核,所以容器更加轻量,运行效率也更高。

同传统的虚拟机相比:

  • 更高效的资源利用
  • 快速启动时间
  • 一致的运行环境
  • 持续交付和部署
  • 轻松迁移
  • 轻松维护和扩展

Docker 概念
在Docker上包含如下几个重要概念

  • 镜像 Image
  • 容器 Container
  • 仓库 Repository

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

Docker容器是Docker镜像的实例,镜像启动后可生成一个Docker实例,当然也可以将Docker实例保存为一个镜像,供其他用户使用。

Docker仓库是保存Docker镜像的地方,Docker的默认镜像仓库是在hub.docker.com,但用户只能在官网创建一个private项目,有些组织并不希望自己的镜像成为public项目(比如打包了云源码),这时用户可以使用registry构建自己的仓库。

Docker常用命令

本人使用的机器操作系统为ubuntu 16.04.1,以下docker的使用均是建立在该操作系统上,如果是windows和mac的操作系统,可以在官方下载相应的软件。

安装docker

sudo apt install docker

Docker 取消 sudo
在使用docker 每次都要敲sudo ,可以使用如下命令取消

1.创建docker组:sudo groupadd docker 
2.将当前用户加入docker组:sudo gpasswd -a ${USER} docker
3.重启服务:sudo service docker restart
4.刷新[Docker](http://lib.csdn.net/base/docker)成员:newgrp - [docker]

Docker 安装信息
使用docker info 查看docker的安装信息

docker info
docker info.png

Docker 查找和下载镜像

查找镜像
docker search [镜像名称]
下载镜像
docker pull [镜像名称] 
docker search nginx.png

包含:NAME(镜像名称),DESRIPTION(描述),STARS(赞数量),OFFICIAL(是否是官方镜像),AUTOMATED(是否是自动构建镜像)。

一般我们倾向于下载赞数量比较大的官方镜像

设置Docker Hub镜像站点/加速器
因为docker默认的仓库在docker.io,所以有时间下载的速度比较慢,可以通过设置镜像代理站点/加速器的方式来对下载加速,我使用了阿里云的镜像代理。

在阿里云创建Docker Hub镜像站点以后,可按照操作文档配置daemon.json文件,配置完毕,再次下载docker镜像就非常快了;因为docker 会优先从镜像站点下载。

阿里Docker Hub镜像站点.png

查看镜像
查看本地已经下载的镜像

docker images
docker images.png

显示的列包括:本地镜像名称,版本,镜像ID,创建事件,大小

导出镜像
使用如下命令可以将镜像导出到当前目录

docker  save centos > centos.tar

导入镜像
在当前目录中导入镜像

docker load < centos.tar

删除镜像

docker rmi [镜像名称]
  • -f 强制删除
    创建并启动容器
    创建并启动一个centos容器
docker run -i -t centos /bin/bash

参数解释

  • -i 选项:容器启动后,打开标准输入设备(STDIN),可使用键盘输入
  • -t 选项:容器启动后,分配一个为终端,将与服务器建立一个会话
  • centos 参数:需要运行的镜像名称,标准格式为centos:latest, 若为latest版本,则可忽略
  • /bin/bash 表示容器中bash应用程序
    该命令首先从本地获取镜像,本地没有镜像,则从Docker Hub拉取放到本地。

再看一个使用docker启动jenkins的例子:

docker run -d -p 8080:8080 -p 50000:50000 --name jenkins --link gitlab:gitlab.bill.com -u root 
-v ~/jenkins:/var/jenkins_home  -v /usr/share/maven:/usr/local/maven 
-v /usr/lib/jvm/jdk1.8:/usr/local/jdk jenkinsci/jenkins:latest

参数解释:

  • -p: 端口映射,将宿主机的端口映射到容器端口,前为宿主机端口,后为容器端口
  • -v: 宿主机目录与容器目录映射
  • -link: 会在容器/etc/hosts创建域名映射
  • name:容器命名

列出容器

docker ps -a
  • -a 所有容器
  • -i 最近创建的容器
  • -n 列出n个最近创建的容器
  • -q 仅列出CONTAINER_ID 字段
  • -s 在输出表格中增加一个SIZE字段,用于描述容器的大小
    进入容器
docker attach [容器ID]

前提条件是容器已经启动
执行命令

docker exec -i -t [容器id] ls -l

和docker run命令类似,进入容器并列出容器的目录结构
停止容器

docker stop [容器id]

使用该命令对容器发送SIGTERM信号,将等待一段很短的事件,再对容器发送SIGKILL信号,立即终止容器
终止容器

docker kill [容器id]

使用该命令对容器发送SIGKILL信号,立即终止容器

启动容器

docker start [容器id]

启动已经停止的容器

重启容器

docker restart [容器id]

重启在运行的容器(前提条件容器已经启动),如何修改了容器内的配置文件,需要重启容器
删除容器

docker rm [容器id]

删除容器,前提条件是容器已经停止
批量删除:

docker rm -f $docker ps -a -q

或者

docker rm -f `docker ps -a -   `

导出与导入容器

docker export [容器id] > xxxx.tar

在打包的文件在另一台机器上导入为镜像

docker import xxx.tar billjiang/xxxx:lastest

推送镜像

docker push billjiang/java

当我们在本地创建了镜像后,可以将它推送到镜像仓库,默认是推送到Docker hub,默认的地址是docker.io/biljiang/java

Dockerfile

Docker为我们提供了一个叫做Dockerfile的脚本文件,将命令写入该文件中,可以批量执行docker命令,构建镜像。

比如我们写一个构建带有jdk环境的镜像
Dockerfile内容

FROM centos:latest
MAINTAINER "billjiang"<475572229.qq.com>
ADD jdk1.8.tar.gz /opt
RUN ln -s /opt/jdk1.8  /opt/jdk
CMD /opt/jdk/bin/java -version

在Dockerfile的目录中执行docker build -t [容器名称] .即可构建镜像。
(具体Dockerfile命令请自行学习,查看官网)

Docker仓库

考虑到我们的镜像不想在Docker hub中公开,我们可以使用registry做私有镜像注册中心。
搭建Docker Registry:

docker run -d -p 5000:5000 -v ~/docker-registry:/tmp/registry registry

如果要把镜像推送到这个地址(在这里是本地地址http://127.0.0.1:5000),需要更改镜像的名称。

docker tag [镜像id] 127.0.0.1:5000/billjiang/java

使用push命令即可将该镜像推送到私有镜像中心

docker push 127.0.0.1:5000/billjiang/java

以上是docker的搭建和使用的总结。

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

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,418评论 15 147
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,404评论 0 120
  • 0x01 核心概念 Docker镜像类似于虚拟机镜像,可以理解为一个面向Docker引擎的只读模板,包含了文件系统...
    闲云逸心阅读 4,601评论 0 9
  • 单单把重复管理拎出来,因为这是我自己实践时遇到的一个比较特别的难题。 1.传统阅读的重复 我总是看重复的书籍和视频...
    时间管理讲师泽阳阅读 548评论 0 1
  • 最近关注了一些资讯、媒体类等内容型产品的评论设计方式和差异,刚好现在这个项目的评论设计也需要优化,梳理出来如下。 ...
    涂涂小排屋阅读 1,514评论 2 18