Docker在Ubuntu的搭建与使用

Docker在Ubuntu的搭建与使用_第1张图片
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在Ubuntu的搭建与使用_第2张图片
docker info.png

Docker 查找和下载镜像

查找镜像
docker search [镜像名称]
下载镜像
docker pull [镜像名称] 
Docker在Ubuntu的搭建与使用_第3张图片
docker search nginx.png

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

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

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

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

Docker在Ubuntu的搭建与使用_第4张图片
阿里Docker Hub镜像站点.png

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

docker images
Docker在Ubuntu的搭建与使用_第5张图片
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的搭建和使用的总结。

你可能感兴趣的:(Docker在Ubuntu的搭建与使用)