docker常用命令

1 基本认识

1.0 what is docker

Docker 是一个 开放源代码 软件项目,让应用程序部署在 软件货柜 下的工作可以自动化进行,借此在 Linux 操作系统上,提供一个额外的软件 抽象层 ,以及 操作系统层虚拟化 的自动管理机制 [1] 。

Docker利用 Linux核心 中的资源分离机制,例如 cgroups ,以及Linux核心 名字空间 (英语: Linux namespaces )(namespaces),来创建独立的 容器 (containers)。这可以在单一Linux实体下运作,避免启动一个 虚拟机 造成的额外负担 [2] 。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括进程树、 网络 、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括 CPU 、 存储器 、block I/O与网络。从0.9版本起,Dockers在使用抽象虚拟是经由 libvirt 的 LXC 与systemd - nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施,

依据行业分析公司“451研究”:“Dockers是有能力打包应用程序及其虚拟容器,可以在任何Linux服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公有云、私有云、单机等。”  [3] 。 -------来自于维基百科

1.1 docker安装

centos7为例

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast

yum -y install docker-ce

1.2 why use docker

传统虚拟化的缺点:

  • 启动速度慢
  • 比较消耗资源(操作系统本身需要占用很多资源)
  • 兼容性比较差(不同的虚拟化平台,虚拟机不便迁移)

docker虚拟化的优势

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

1.3 传统虚拟化与docker对比

 

1.4 常见术语

镜像(Image)

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资

源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境

变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

是一个特殊的文件系统,

容器(Container)

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中

的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被

创建、启动、停止、删除、暂停等。

每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。

容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,

任何保存于容器存储层的信息都会随容器删除而丢失。

镜像以及容器的关系,可以用java面向对象的思想来理解,镜像就是一个类,容器就是这个类new出来的。

仓库(Repository)

Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服

务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务

供用户管理私有镜像。

数据卷(volume

Docker的镜像是由一系列的只读层组合而来,当启动一个容器的时候,Docker加载镜像的所有只读层,并在最上层加入一个读写层。这个设计使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间,然而也存在如下问题。

   (1)容器中的文件在宿主机上存在形式复杂,不能在宿主机上很方便的对容器中的文件进行访问

   (2)多个容器之间的数据无法共享

   (3)当删除容器时,容器产生的数据将丢失

Docker中的数据可以存储在类似于虚拟机磁盘的介质中。在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。

简而言之:不用数据卷,数据无法持久化。所有的数据都在最上层的读写层,容器删除后这个读写层自己销毁了,数据也就丢了。

1.5 容器,仓库,镜像运行关系图

 

2 镜像基本操作

2.1 镜像搜索

docker search  # 在docker index中搜索image

    --automated=false 仅显示自动创建的镜像

    --no-trunc=false 输出信息不截断显示

    -s 0 指定仅显示评价为指定星级的镜像

2.2 镜像下载

docker pull  # 从docker registry server 中下拉image

还可通过指定标签下载某镜像

docker pull [:TAG]

docker pull centos:7

2.3 镜像查看/删除

docker images: # 列出images

docker images -a # 列出所有的images(包含历史)

docker ps -a #列出本机所有容器

docker rmi : # 删除一个或多个image

2.4 镜像导入导出

存出本地镜像文件为.tar

docker save -o ubuntu_14.04.tar ubuntu:14.04

导入镜像到本地镜像库

docker load --input ubuntu_14.04.tar或者

docker load < ubuntu_14.04.tar

2.5 上传镜像

 用户在dockerhub网站注册后,即可上传自制的镜像。

    docker push NAME[:TAG]

3 容器基本操作

容器是镜像的一个运行实例,不同的是它带有额外的可写层。

 可认为docker容器就是独立运行的一个或一组应用,以及它们所运行的必需环境。

3.1 运行容器

# 创建(使用镜像创建容器):

    首先得查看镜像的REPOSITORY和TAG

 docker run -i -t REPOSITORY:TAG

(等价于先执行docker create 再执行docker start 命令)

其中-t选项让docker分配一个伪终端并绑定到容器的标准输入上,

 -i则让容器的标准输入保持打开。

 若要在后台以守护态(daemonized)形式运行,可加参数-d

在执行 docker run来创建并启动容器 时,后台运行的过程包括:

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

docker start/stop/restart  #:开启/停止/重启container

操作容器可以通过容器名称,容器ID进行,

可以通过docker ps 查看对应的名称或是ID

3.2 进入容器

docker attach [container_id] #连接一个正在运行的container实例

(即实例须为start状态,可以多个 窗口同时attach 一个container实例),

但当某个窗口因命令阻塞时,其它窗口也无法执行了。

exec可直接在容器内运行的命令。

docker exec -ti [container_id] /bin/bash

如:

[root@uirb-test ~]# docker exec -it trs-uirb bash

3.3 删除容器

docker rm  #:删除一个或多个container

docker rm `docker ps -a -q` #:删除所有的container

docker ps -a -q | xargs docker rm #:同上, 删除所有的container

docker -rm

    -f 强制中止并运行的容器

    -l 删除容器的连接,但保留容器

    -v 删除容器挂载的数据卷

3.4 修改容器

docker commit  [repo:tag] #

将一个container固化为一个新的image,后面的repo:tag可选。

3.5 容器导入导出

导出到一个文件,不管是否处于运行状态。

docker export CONTAINER > test.tar

导入为镜像:

cat test.tar | docker import - centos:latest

3.6 容器使用数据卷

docker run -d -it --rm --name test -v /xxx:/xxx centos:v1

#其中冒号前面是物理机的位置,冒号后面是容器的位置。

docker run -d -it --rm --name test -v /xxx:/xxx:rw centos:v1

数据卷默认可读可写挂载,不写就是rw。

docker run -d -it --rm --name test -v /xxx:/xxx:ro centos:v1

3.7 怎么访问容器

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或

-p 参数来指定端口映射。

当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开

放的网络端口。

docker run -d -P nginx

docker run -d -p 88:80 nginx   #指定映射端口

3.8 使用docker搭建wordpress

具体很多环境变量信息可以看官方仓库,有详细说明

容器直接通信可以使用link

3.8.1 运行mysql容器

docker run -dit --restart=always --name db -v /data/k8s/db:/var/lib/mysql -e MYSQL_DATABASE=blog -e MYSQL_ROOT_PASSWORD=redhat mysql:5.7

3.8.2 运行wordpress容器

docker run -dit --restart=always --link db:db -e WORDPRESS_DB_HOST=db -e WORDPRESS_DB_NAME=blog -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=redhat --name=blog -v /data/k8s/blog:/var/www/html -p 88:80 wordpress

4 docker-compose

Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集

群中部署分布式应用。

服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器

实例。

项目(project):由一组关联的应用容器组成的一个完整业务单元,在 docker-

compose.yml 文件中定义。

4.1 docker-compose安装

以centos7为例

yum -y install epel-release

yum install python-pip

pip install --upgrade pip

pip install docker-compose

docker-compose --version

4.2 docker-compose部署rabbitmq实战

创建rabbitmq启动文件的目录

mkdir -p /TRS/APP/rabbitmq

创建启动的compose文件

vim /TRS/APP/rabbitmq/docker-compose.yml

version : '2'

networks:

  default:

    driver: bridge

    ipam:

      driver: default

      config:

      - subnet:  10.1.0.1/16

services:

  mq:

        container_name : mq

        hostname: trsmq

        image : rabbitmq:3-management

        environment:

           - RABBITMQ_DEFAULT_USER=admin  #用户

           - RABBITMQ_DEFAULT_PASS=trs@admin123  #用户的密码

           - RABBITMQ_DEFAULT_VHOST=gov  #创建的vhost名称

        volumes :

          - /TRS/APP/rabbitmq/rabbitmq-data:/var/lib/rabbitmq

          - /etc/localtime:/etc/localtime:ro

        ports :

                - 5672:5672       #端口映射关系

                - 15672:15672

启动cd /TRS/APP/rabbitmq && docker-compose up -d

启动命令docker-compose up -d (会根据compose文件写的关系依次启动)

关闭命令docker-compose down -v

此时已经可以访问rabbitmq

访问url:http://ip:15672

对应的参数已经通过配置文件环境变量设置完成,启动完成后可以直接使用rabbitmq。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lijun208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值